П р и м е р 12 [7]. ─────────────────── 10 OPEN "DRESS" FOR OUTPUT AS #1 20 FOR X=1 TO 5 30 INPUT"Данные об одежде";S$,C$,P:PRINT #1,S$;",";C$;",";P 50 NEXT X:CLOSE #1 run Данные об одежде? А35,Красный,68.95 Данные об одежде? A36,Голубой,75 Данные об одежде? Б44,Розовый,105.50 Данные об одежде? В78,Серый,85 Данные об одежде? ЖД5,Черный,78.89 Ok Отдельные сегменты программных файлов - это специфические файлы данных последовательного доступа. Поэтому программы или их фрагменты можно загру- жать в память как данные. Ограничимся здесь лишь двумя примерами. П р и м е р 13. Выполнение этой программы приводит к считыванию и вы- ─────────────── воду на экран всех строк программы "Симпсон". 10 'Чтение программного файла 20 OPEN "Симпсон" FOR INPUT AS#1 30 LINE INPUT #1,R$:PRINT R$ 50 IF NOT EOF(1) THEN 30 60 CLOSE #1 П р и м е р 14. Выполнение программы дает возможность "просмотреть" в ─────────────── той же самой программе "Симпсон" строки с номерами от 30 и до 70. 10 'Чтение диапазона строк 20 OPEN "Симпсон" FOR INPUT AS#1 30 LINE INPUT #1,R$ 40 X$=MID$(R$,1,2) 50 IF X$<"30" OR X$>"70" THEN 80 60 PRINT R$ 80 IF NOT EOF(1) THEN 30 90 CLOSE #1 ┌───────────────────────────────────────────────────────────────────────┐ │ 2. Общая схема пополнения файла В строками с его к о н ц а: │ │ А. В оперативной памяти резервируется буфер (оператором MAXFILES=).│ │ B. Открывается уже открытый файл В (оператором OPEN с параметром │ │ APPEND). │ │ C. Формируется требуемое количество строк файла(операторами PRINT# │ │ или PRINT#,USING). На дискету из буфера они сбрасываются автома-│ │ тически. │ │ D. Файл В закрывается. │ └───────────────────────────────────────────────────────────────────────┘ П р и м е р 15 [7]. Добавление в файл спортивной информации названия ──────────────────── двух новых видов спорта. 10 OPEN "GAMES" FOR APPEND AS#1 20 PRINT #1,"Пинг-понг":PRINT #1,"Теннис":CLOSE #1 ┌───────────────────────────────────────────────────────────────────────┐ │ 3. Общая схема с ч и т ы в а н и я строк с диска от начала файла В │ │ А. В оперативной памяти резервируется буфер (оператором MAXFILES) │ │ В. Открывается уже существующий файл В (оператором OPEN с парамет- │ │ ром INPUT) │ │ C. Считывается требуемое количество строк файла(операторами INPUT$ │ │ или LINEINPUT$, или INPUT$) │ │ D. Файл В закрывается │ └───────────────────────────────────────────────────────────────────────┘ П р и м е р 16 [7]. ─────────────────── 10 OPEN "DRESS" FOR INPUT AS#2 20 FOR X=1 TO 5 30 INPUT #2,S$,C$,P:PRINT S$,C$,P 50 NEXT X:CLOSE #2 run А35 Красный 68.95 A36 Голубой 75 Б44 Розовый 105.50 В78 Серый 85 ЖД5 Черный 78.89 Ok IX.3.4. П р и м е р ы 1. Гидрометцентр ведет статистику выпадения снега по регионам, для каж- дого из которых заведен файл последовательного доступа.Во всех файлах име- ется по три элемента данных: имя метеоролога, название региона, количест- во выпавшего за зиму снега в мм. α) Напишите программу ввода данных; заполните файлы для трех регионов. β) Просмотрите все три файла и подсчитайте средний уровень снежных осадков по трем регионам. Результат выведите на экран. 10 MAXFILES=6:OPEN "region1" FOR OUTPUT AS #1 21 OPEN "region2" FOR OUTPUT AS #2:OPEN "region3" FOR OUTPUT AS #3 30 FOR I=1 TO 3 31 PRINT "region";I 35 INPUT "Введите количество работающих метеорологов на станции";N 36 FOR E=1 TO N 40 INPUT "Введите:имя метеоролога";I$:INPUT "название региона";R$:INPU T "количество выпавшего за зиму снега в мм";K 50 PRINT #I,I$;",";R$;",";K 55 NEXT E 60 CLOSE #I 70 NEXT I:CLS 71 OPEN "region1" FOR INPUT AS #1:OPEN "region2" FOR INPUT AS #2 73 OPEN "region3" FOR INPUT AS #3 80 FOR O=1 TO 3 90 S=0 100 FOR E=1 TO N:INPUT #O,I$,R$,K:S=S+K:NEXT E 140 S=S/N:PRINT"Средний уровень снежных осадков по ";R$;" региону";S 150 CLOSE #O 160 NEXT O 170 END 2. Хоккейные команды "Черные ястребы" и "Красные крылья" хранят в фай- лах последовательного доступа имена всех своих 12 нападающих, число забро- шенных ими шайб, сделанных голевых передач и заработанное штрафное время. α) Создайте файлы "BLACK" и "RED", содержащие информацию о каждой из двух команд. β) Ваша программа по данным, извлеченным из этих файлов, должна порож- дать новый файл "ALLSTARS", в котором содержались бы имя, команда и сумма очков (голы + передачи) для шести лучших игроков обеих команд. Выведите имена и показатели результативности хоккеистов на экран дисплея. 10 MAXFILES=3 20 OPEN "BLACK" FOR OUTPUT AS #1:OPEN "RED" FOR OUTPUT AS #2 25 FOR K=1 TO 2 30 FOR X=1 TO 6 'В каждой команде - 6 игроков 40 PRINT "Данные о команде";K;":" 50 INPUT "Имя нападающего";I$:INPUT "Число заброшенных шайб";F: INPUT "Сделанных голевых передач";G:INPUT "Заработанное штра фное время";W 60 PRINT #K,I$;",";F;",";G;",";W 70 NEXT X 80 CLOSE #K 81 NEXT K 90 OPEN "BLACK" FOR INPUT AS #1:OPEN "RED" FOR INPUT AS #2 100 OPEN "ALLSTARS" FOR OUTPUT AS #3 110 DIM MI$(12):DIM MK$(12):DIM MO(12) 115 I=1 120 FOR K=1 TO 2 130 FOR X=1 TO 6 140 INPUT #K,I$,F,G,W 145 IF K=1 THEN A$="BLACK" ELSE A$="RED" 150 O=F+G:MI$(I)=I$:MK$(I)=A$:MO(I)=O:I=I+1 155 NEXT X 156 CLOSE #K 157 NEXT K 165 FOR I=1 TO 11 166 L=I 170 FOR J=I+1 TO 12 175 IF MO(L)=4 THEN D=D+1:PRINT #2,I$;",";K$ 155 NEXT X:CLOSE #1:CLOSE #2 220 OPEN "SMART" FOR INPUT AS#2 225 INPUT "Введите название курса";E$ 230 FOR I=1 TO D 240 INPUT #2,I$,K$:IF K$=E$ THEN PRINT I$ 280 NEXT I:CLOSE #2 290 PRINT "Хотите закончить Д/Н" 300 IF INPUT$(1)="Д" THEN END ELSE GOTO 220 IX.3.5. В ы в о д ф а й л о в д а н н ы х на э к р а н и п р и н т е р Текстовые экраны 0 и 1, графические экраны, а также принтер могут быть объявлены устройствами вывода файлов последовательного доступа. О т к р ы т и е таких файлов осуществляется оператором ┌───────────────────────────────────┐ │ {"CRT:"} │ │ OPEN {"GRP:"} FOR OUTPUT AS[#]n │ , │ {"LPT:"} │ └───────────────────────────────────┘ где: OPEN, FOR OUTPUT, AS - служебные слова; n - арифметическое выражение, целая часть значения которого определя- ет номер контрольного буфера файла; CRT:, GRP:, LPT: - имена устройств. При выполнении оператора OPEN в качестве устройства вывода файлов на- значаются: т е к с т о в ы е экраны (CRT:), г р а ф и ч е с к и е экраны (GRP:), п р и н т е р (LPT:). Вывод строк в любом случае осуществляется операторами PRINT# и PRINT#,USING. Поговорим о выводе п р о г р а м м н ы х файлов на экран и принтер. Используя устройства CRT:, GRP: и LPT:, можно выводить текст программы на экран и принтер. 1. Команда SAVE "LPT:" предназначена для вывода текста программы на п р и н т е р . 2. Команда SAVE "CRT:" позволяет выводить текст программы на т е к с т о в ы й экран. 3. Команда SAVE "GRP:" позволяет выводить текст программы на г р а ф и ч е с к и й экран. Использование "графического" оператора SAVE "GRP:" в текстовом режиме приводит к сообщению об ошибке: "Illegal function call". Вполне естественно,что команды LOAD, RUN и MERGE не могут "работать" с устройствами CRT:, GRP: и LPT: ! П р и м е р ы: ───────────── 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 30 OPEN "GRP:" FOR OUTPUT AS#1:OPEN "777" FOR OUTPUT AS#2 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]. Простейший г р а ф и ч е с к и й редактор. ────────────────── При формировании изображения Вам могут понадобить- ся такие команды: L При нажатии этой клавиши определяется начальная точка прямой.При повторном нажатии вычерчивается прямая. P Закрашивается участок экрана. U Отменяется последняя команда. DEL Уничтожается программа, запущенная из памяти, а экран очищается. ESC Генерируется программа. После окончания формирования изображения текст программы на языке MSX- BASIC можно вызвать на экран, либо записать на ленту или дискету (по ко- манде SAVE.При необходимости программу с ленты или с дискеты можно вновь загрузить (командой LOAD) или "слить" с другой программой, хранящейся в памяти (командой MERGE). Один из спрайтов задействуется как курсор, другой - в качестве марке- ра, отмечающего начало прямой, и еще шесть в качестве "координатных",что- бы отмечать текущие координаты курсора на экране. Когда курсор "касается" одного из "координатных" спрайтов, они пропадают. Это выполняется с испо- льзованием прерывания по ON SPRITE GOSUB. 10 GOTO 210 30 'Изображение дополнительных координат 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 110 PUT SPRITE 5,(28,P+8),1,U1 120 RETURN 130 ' О с н о в н а я программа 210 SCREEN 0:KEY OFF:WIDTH 38 220 DEFINT A-Z 230 MAXFILES=2 240 DIM BUF(100,5) 260 ' Открытие файла 280 PRINT"ЭКРАННЫЙ ГЕНЕРАТОР" 290 PRINT 300 PRINT"Включите на всякий случай принтер!" 310 PRINT:PRINT 320 PRINT"Введите имя файла:"; 330 A$=INPUT$(1) 340 IF A$=CHR$(13) AND F$<>""THEN 390 350 IF A$=CHR$(8) AND POS(0)-1>16 THEN LOCATE POS(0)-1:PRINT CHR$(32); :LOCATE POS(0)-1:F$=LEFT$(F$,LEN(F$)-1):GOTO 330 360 IF LEN(F$)=6 THEN GOTO 330 370 IF (A$>="A"AND A$<="Z")OR (A$>="a" AND A$<="z")THEN F$=F$+A$ ELSE GOTO 330 380 PRINT A$;:GOTO 330 390 PRINT:PRINT 400 PRINTUSING"Открывается файл:&";F$ 410 PRINT:PRINT 420 OPEN F$ FOR OUTPUT AS#2 430 PRINT USING"Файл'&'Открыт";F$ 440 PRINT:PRINT 450 PRINT"Для продолжения нажмите любую клавишу" 460 A$=INPUT$(1) 470 SCREEN 2,0,0 480 GOSUB 800 490 IX=-1:P=8:Q=168:X=128:Y=96 500 H=1:T=2:U=8:H1=0:T1=9:U1=6 510 MX=1:MY=1:HX=8:HY=8:LX=0:LY=0 520 ON SPRITE GOSUB 1780:SPRITE ON 530 PUT SPRITE 6,(X,Y),1,10 540 GOSUB 60 550 A$=INKEY$:IF A$=""THEN 550 560 IF A$=CHR$(127)THEN IX=-1:CLS 570 IF A$=CHR$(27)THEN GOTO 1320 580 IF A$="P"THEN GOSUB 910 590 IF A$="L"THEN GOSUB 1000 600 IF A$="U"THEN GOSUB 1160 610 D=STICK(0):IF D=0 THEN 550 620 IF D=1 THEN Y=Y-MY 630 IF D=2 THEN Y=Y-MY:X=X+MX 640 IF D=3 THEN X=X+MX 650 IF D=4 THEN X=X+MX:Y=Y+MY 660 IF D=5 THEN Y=Y+MY 670 IF D=6 THEN Y=Y+MY:X=X-MX 680 IF D=7 THEN X=X-MX 690 IF D=8 THEN X=X-MX:Y=Y-MY 700 IF X>255 THEN X=255 710 IF Y>191 THEN Y=191 720 IF X<0 THEN X=0 730 IF Y<0 THEN Y=0 740 H=INT(X/100):T=(XMOD100)/10:U=X MOD10 750 H1=INT(Y/100):T1=(YMOD100)/10:U1=Y MOD10 760 GOTO 530 780 ' О п и с а н и е спрайтов 800 FOR I=0 TO 11 810 S$="" 820 FOR J=1 TO 8 830 READ A$:S$=S$+CHR$(VAL("&h"+A$)) 840 NEXT 850 SPRITE$(I)=S$ 860 NEXT 870 RETURN 890 ' Подпрограмма закраски 910 IF POINT(X,Y)=15 THEN RETURN 920 IF IX+1=500 THEN RETURN 930 IX=IX+1 940 PAINT(X,Y) 950 BUF(IX,0)=1:BUF(IX,1)=X:BUF(IX,2)=Y 960 RETURN 980 ' Изображение п р я м о й 1000 IF L=0 THEN 1070 1010 L=0 1020 LINE(X,Y)-(BUF(IX,1),BUF(IX,2)) 1030 IF(X=BUF(IX,1))AND(Y=BUF(IX,2))THEN BUF(IX,0)=2:PUT SPRITE 7,(0,2 09):SPRITE ON:RETURN 1040 BUF(IX,3)=X:BUF(IX,4)=Y 1050 PUT SPRITE 7,(0,209) 1060 BUF(IX,0)=3:SPRITE ON:RETURN 1070 IF IX+1=100 THEN RETURN 1080 IX=IX+1 1090 L=1:SPRITE OFF 1100 BUF(IX,1)=X:BUF(IX,2)=Y 1110 PUT SPRITE 7,(X-1,Y-2),1,11 1120 RETURN 1140 'Отмена предыдущего действия 1160 IX=IX-1 1170 CLS 1180 IF IX<=-1 THEN IX=-1:BUF(0,0)=0:RETURN 1190 FOR I=0 TO IX 1200 ON BUF(I,0) GOSUB 1230,1250,1270 1210 NEXT 1220 RETURN 1230 PAINT(BUF(I,1),BUF(I,2)) 1240 RETURN 1250 PSET(BUF(I,1),BUF(I,2)) 1260 RETURN 1270 LINE(BUF(I,1),BUF(I,2))-(BUF(I,3),BUF(I,4)) 1280 RETURN 1300 'Генерация программы 1320 SPRITE OFF:SCREEN 0'В оригинале оператор SPRITE OFF отсутствует! 1330 PRINT"Вывод на принтер(P)" 1340 PRINT"Вывод на экран(S)" 1350 PRINT:PRINT 1360 PRINT"Выбирайте скорее режим:" 1370 LOCATE 23,4 1382 A$=INPUT$(1) 1390 PRINT A$ 1400 IF A$<>"P"ANDA$<>"S" THEN BEEP:GOTO 1370 1410 IF A$="P"THEN OPEN"LPT:"AS#1 1420 IF A$="S"THEN OPEN"CRT:"AS#1 1430 CLS 1450 'З а п и с ь п р о г р а м м ы 1470 FOR D=1 TO 2 1480 PRINT#D,"10 REM*" 1490 PRINT#D,USING"20 REM*Имя программы:&";F$ 1500 PRINT#D,"30 REM*" 1510 PRINT#D,"40 SCREEN 2" 1520 LN=50 1530 FOR I=0 TO IX 1540 PRINT#D,MID$(STR$(LN),2);SPC(1) 1550 ON BUF(I,0)GOSUB 1610,1650,1690 1560 LN=LN+10 1570 NEXT 1580 PRINT#D,MID$(STR$(LN),2);SPC(1);"GOTO";MID$(STR$(LN),2) 1590 NEXT 1600 END 1610 T$=MID$(STR$(BUF(I,1)),2) 1620 U$=MID$(STR$(BUF(I,2)),2) 1630 PRINT#D,USING"PAINT(&,&)";T$;U$ 1640 RETURN 1650 T$=MID$(STR$(BUF(I,1)),2) 1660 U$=MID$(STR$(BUF(I,2)),2) 1670 PRINT#D,USING"PSET(&,&)";T$;U$ 1680 RETURN 1690 T$=MID$(STR$(BUF(I,1)),2) 1700 U$=MID$(STR$(BUF(I,2)),2) 1710 V$=MID$(STR$(BUF(I,3)),2) 1720 W$=MID$(STR$(BUF(I,4)),2) 1730 PRINT#D,USING"LINE(&,&)-(&,&)";T$;U$,V$,W$ 1740 RETURN 1760 'Подпрограмма обработка прерываний 1780 SPRITE OFF 1790 SWAP P,Q 1800 GOSUB 60 1810 FOR D=1 TO 100:NEXT 1820 SPRITE ON 1830 RETURN 1840 DATA 70,88,98,A8,C8,88,70,0 1850 DATA 20,60,20,20,20,20,70,0 1860 DATA 70,88,08,30,40,80,F8,0 1870 DATA F8,08,10,30,08,88,70,0 1880 DATA 10,20,50,90,F8,10,10,0 1890 DATA F8,80,F0,08,08,88,70,0 1900 DATA 38,40,80,F0,88,88,70,0 1910 DATA F8,08,10,20,40,40,40,0 1920 DATA 70,88,88,70,88,88,70,0 1930 DATA 70,88,88,78,08,10,E0,0 1940 DATA 80,40,20,10, 8, 4, 2,1 1950 DATA 40,E0,40, 0, 0, 0, 0,0 IX.4. И с п о л ь з о в а н и е RAM - д и с к а (т о л ь к о д л я к о м п ь ю т е р о в MSX-2) RAMdisk (псевдодиск) - логическое устройство, обеспечивающее хранение файлов в специально выделенной области оперативной памяти.Исполь- зуется на микроЭВМ и ПЭВМ. Англо-русский словарь по програм- мированию и информатике Свободное пространство памяти, размер которого можно определить при по- мощи функций FRE(0) и FRE(""), автоматически распределяется интерпретато- ром MSX-BASIC. Когда программа слишком длинна или использует слишком мно- го переменных, для временного хранения данных следует использовать либо внешние устройства (магнитные ленты, дискеты),либо дополнительную область памяти MSX-компьютера (так называемый RAM - д и с к). Эта дополнительная область не распределяется а в т о м а т и ч е с к и- т.е. если программа, например, использует слишком много переменных, это еще не значит,что значения этих переменных будут автоматически перенесены в дополнительную область оперативной памяти! Вы сейчас убедитесь в том, что доступ к этой области осуществляется аналогично доступу к д и с к о в о д а м ! ┌──────────────────────────┐ Оператор │ CALL MEMINI [(R)] │ , └──────────────────────────┘ где: CALL ("вызвать"), MEMINI ("MEMory INIcialisation" - "инициализация памяти") - служебные слова; R - арифметическое выражение, целая часть значения которого принима- ет значения от 6655 до M-32769 , где M - максимальный объем RAM , инициализирует RAM-диск и сообщает его текущий свободный объем. Этот опе- ратор должен быть выполнен до первой попытки обращения к RAM-диску. ┌────────────────────────────────────────────────────────┐ │ Помните, что это обращение у н и ч т о ж а е т все │ │ файлы, записанные до этого на RAM-диск. │ └────────────────────────────────────────────────────────┘ Отметим, что для MSX-компьютеров с общим объемом RAM в 128 Кбайтов зна- чение параметра R не должно превышать 98303 байта. Фактический же размер RAM-диска (в байтах) равен значению арифметичес- кого выражения R - 6399 . Если значение параметра R меньше указанного минимального значения, то RAM-диск "отключается" и компьютер выдает сообщение: "No RAM disk" , если же значение параметра R больше максимального значения, то появляется сообщение о неправильном вызове функции "Illegal function call" . Когда параметр R опущен, то его значение по умолчанию устанавливается равным максимальному, т.е. 98303-6399 = 91904 ≈ 92 Кбайта. Параметр R необходим, если Вы хотите использовать дополнительные облас- ти RAM как для временного хранения файлов, так и для других целей. Если же это не так, то используйте команду ┌────────────────────┐ │ CALL MEMINI │ . └────────────────────┘ И м е н а файлов, находящихся на RAM-диске, должны включать: α) имя устройства "МЕМ:", β) имя файла, состоящее не более чем из 8 символов (причем символы "*" и "?" не могут использоваться!), и γ) расширение имени файла,состоящее из точки и не более чем из 3-х сим- волов. Впрочем, расширение имени файла не обязательно; если оно пропущено, то точка также может быть опущена. Например: "МЕМ:PROGRAM1.BAS" "MEM:HRU" Команды для работы с RAM-диском очень похожи на команды FILES, KILL и NAME версии MSX-Disk BASIC. ┌────────────────────┐ 1) Команда │ CALL MFILES │ , └────────────────────┘ где: CALL, MFILES - служебные слова; выводит на экран список файлов, записанных на RAM-диске, и размер оставше- гося свободного пространства. ┌──────────────────────────────────┐ 2) Команда │ CALL MKILL ("И м я ф а й л а") │ , └──────────────────────────────────┘ где: CALL, MKILL - служебные слова; "стирает" файл с указанным именем с RAM-диска. Обратите внимание на то, что параметр "И м я ф а й л а" заключается в круглые скобки! 3) Команда ┌───────────────────────────────────────────────────────────────────────┐ │ CALL MNAME ("Имя с т а р о г о файла" AS "Имя н о в о г о файла") │, └───────────────────────────────────────────────────────────────────────┘ где: CALL, MNAME - служебные слова; параметр "Имя с т а р о г о файла" обязательно должен присутство- вать, параметр "Имя н о в о г о файла" может быть опущен; позволяет изменить имя файла. Перечислим теперь операторы и функции, которые можно использовать для работы с программными файлами и с файлами п о с л е д о в а т е л ь н о - г о доступа: SAVE LOAD MERGE RUN OPEN CLOSE PRINT# PRINT#USING INPUT# INPUT$ LINEINPUT# EOF LOC LOF FPOS ┌───────────────────────────────────────────────────────┐ │ Помните, однако, что имя устройства МЕМ: обязано │ │ присутствовать всякий раз при упоминании имени файла! │ └───────────────────────────────────────────────────────┘ Приведем несколько примеров записи операторов для работы с 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 10 OPEN "MEM:GAMES" FOR OUTPUT AS#1 20 FOR X=1 TO 3 30 INPUT"Введите название игры";F$:PRINT #1,F$ 50 NEXT X:CLOSE #1 60 PRINT"∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗" 80 OPEN "MEM:GAMES" FOR INPUT AS#1 90 FOR X=1 TO 3 100 INPUT #1,F$:PRINT F$ 110 NEXT X 120 CLOSE #1:SAVE"MEM:GAMES" run Введите название игры? Футбол Введите название игры? Шашки Введите название игры? Хоккей ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ Футбол Шашки Хоккей Ok ┌────────────────────────────────────────────────────────────────┐ │ Команда SAVE всегда записывает программу в формате ASCII, │ │ после чего она "готова к употреблению" операторами MERGE и RUN.│ └────────────────────────────────────────────────────────────────┘ Отметим, что на RAM-диске может существовать один файл с п у с т ы м именем. Таким образом, синтаксически допустимы следующие конструкции: SAVE"MEM:" LOAD"MEM:" RUN"MEM:" MERGE"MEM:" OPEN"MEM:" ┌──────────────────────────────┐ Функция │ LOC(Н о м е р ф а й л а) │ └──────────────────────────────┘ возвращает позицию в файле, начиная с номера файла. Например, LOC вовраща- ет 0 сразу после того, как файл открыт для ввода и вывода (OPEN FOR INPUT/ OUTPUT) и возвращает длину файла cразу после того, как файл открыт для до- бавления (OPEN FOR APPEND). ┌────────────────────────────────┐ Функция │ LOF(Н о м е р ф а й л а) │ └────────────────────────────────┘ возвращает объем файла. ┌────────────────────────────────┐ Функция │ FPOS(Н о м е р ф а й л а) │ └────────────────────────────────┘ возвращает оставшийся объем RAM-диска. Все остальные операторы и функции, перечисленные выше,используются ана- логично соответствующим конструкциям,используемым в версии MSX-Disk BASIC. IX.5. Ф а й л ы на м а г н и т н о й л е н т е Вывод программных файлов и файлов данных из оперативной памяти на маг- нитную ленту и обратное считывание с ленты в память реализуется через устройство, называемое м а г н и т о ф о н о м. Для идентификации файлам присваиваются и м е н а , конструируемые из символов алфавита языка. Длина имени не может превосходить 6 символов (операторы SAVE, CSAVE) или 11 (оператор BSAVE). Уникальность имен не обязательна. Работа с магнитофоном может быть организована в рамках любой версии языка MSX-BASIC. Для этих целей предусмотрены следующие команды и функции. 1. SAVE - команда записи в формате ASCII программ из оперативной памя- ти на магнитную ленту. 2. LOAD - команда чтения в оперативную память программ, записанных на магнитной ленте в формате ASCII. 3. MERGE - команда подгрузки в память программ, записанных на ленте в формате ASCII. 4. RUN - команда загрузки в память программ, записанных на ленте в формате ASCII, с автоматическим запуском их на счет. 5. CSAVЕ - команда записи во внутреннем представлении программ из опе- ративной памяти на ленту. 6. CLOAD - команда чтения в оперативную память (или верификации) про- грамм, записанных на ленте во внутреннем представлении. 7. BSAVE - команда записи во внутреннем представлении программных фай- лов или файлов данных из конкретного участка оперативной памяти на ленту. 8. BLOAD - команда считывания в определенную область оперативной памя- ти программных файлов и файлов данных, записанных на ленте во внутреннем представлении. 9. OPEN │ 10. CLOSE │ 11. MAXFILES= │ 12. EOF() │ операторы и функции для работы с файлами 13. PRINT# │ данных последовательного доступа 14. PRINT#USING │ 15. INPUT# │ 16. LINE INPUT# │ 17. INPUT$() │ Приступим к краткому описанию синтаксиса и семантики упомянутых выше средств организации файлов на магнитной ленте и работы с ними.