Адрес 9212. Запись текущего сектора файла данных. Откройте по-
ток, связанный с файлом.
9212 CALL 9251;вычисление адреса текущего сектора файла на диске
CALL 8993;вычисление адреса текущего фрагмента текста в описателе канала
LD B,1 ;записывать 1 сектор
CALL 7757;запись сектора
Внимание!!! После записи сектора надо снова открывать поток,
связанный с файлом данных, так как при дисковой ошибке открыва-
ется поток 0.
LD C,15 ;15-ый байт описателя канала
RST 40
LD A,(HL);файл прямого доступа ?
CP 127
RET Z ;если да, то возврат
CALL 8993;вычисление адреса текущего фрагмента текста в описателе канала
XOR A ;сектор заполнять нулями
LD B,A ;длина его - 256 байтов
9235 LD (HL),A;очистка байта
INC HL ;следующий байт
DJNZ 9235;повтор до конца
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9240. Загрузка текущего сектора в описатель канала. От-
кройте поток, связанный с файлом данных.
9240 CALL 9251;вычисление адреса текущего сектора на диске
CALL 8993;вычисление адреса сектора в описателе канала
LD B,1 ;загружать 1 сектор
JP 7741 ;загрузка сектора и возврат
Внимание!!! После загрузки сектора надо снова открывать канал,
связанный с файлом данных, так как при ошибках открывается поток
0.
────────────────────────────────────────────────────────────────
Адрес 9251. Вычисление адреса текущего сектора файла на диске.
Откройте поток, связанный с файлом данных. На выходе в DE будет
адрес сектора на диске.
9251 LD HL,(23633);берем адрес 30-го байта описателя канала
LD BC,30
ADD HL,BC
LD E,(HL) ;берем адрес файла на диске
INC HL
LD D,(HL)
LD C,14 ;14-ый байт
RST 40
LD B,(HL) ;берем номер текущего сектора файла
DEC B ;он равен 0 ?
INC B
PUSH AF ;сохранение AF
LD A,16 ;на дорожке 16 секторов
JR Z,9281 ;если номер текущего сектора файла pавен 0, то выход
9272 INC E ;следующий сектор
CP E ;конец дорожки ?
JR NZ,9279 ;если да, то
LD E,0 ;сектор 0
INC D ;и следующая дорожка
9279 DJNZ 9272 ;повтор до конца
9281 POP AF ;восстановление AF
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9283. Установка дисковода для операций с файлом данных.
Откройте поток, связанный с файлом.
9283 LD C,11 ;берем адрес 11-го байта описателя канала
RST 40
LD A,(HL);берем номер дисковода, на котором находится файл
JP 15819 ;выбор дисковода
────────────────────────────────────────────────────────────────
Адрес 9290. Вывод символа в файл данных. Символ поместите в ак-
кумулятор и откройте поток, связанный с файлом.
9290 LD HL,23746 ;адрес переключателя ПЗУ на бейсик
PUSH HL ;помещение его на стек
LD HL,8433 ;адрес подпрограммы изменения памяти
PUSH HL ;помещение его на стек
PUSH AF ;сохранение символа
CALL 8433 ;изменение памяти
LD A,10 ;файл искать по 10 байтам описателя
LD (23814),A
POP AF ;восстановление символа
CALL 9378 ;работа с файлом прямого доступа
PUSH AF ;сохранение символа
CALL 9808 ;файл открывался для чтения ?
JR Z,9374 ;если да, то ошибка
POP AF ;восстановление символа
CALL 8983 ;вычисление адреса текущего символа в текущем секторе
LD (HL),A ;запись символа
JP 9002 ;проверка достижения конца сектора в описателе канала
────────────────────────────────────────────────────────────────
Адрес 9326. Проверка достижения конца блока. Используется также
с адресов:
9362 - обработка ошибки END OF FILE через ПЗУ бейсика.
9364 - обработка ошибок через ПЗУ бейсика. Код ошибки поместите
в аккумулятор.
9326 LD C,13 ;берем адрес 13-го байта описателя канала
RST 40
LD A,(HL) ;берем младший байт длины пройденной части файла
LD BC,14 ;27-й байт
ADD HL,BC
CP (HL) ;сравнение младших байтов длин пройденной и записанной
;частей блока
RET NZ ;если они не равны, то возврат
LD C,14 ;аналогично со старшими байтами
RST 40
LD BC,14
ADD HL,BC
CP (HL)
RET NZ
LD HL,23734 ;адрес переменной разpешения изменения памяти
LD A,(HL) ;берем ее значение
CP 244 ;интерфейс-1 есть?
JR Z,9362 ;если нет, то ошибка
BIT 4,(HL) ;выполняется команда LOAD интерфейса-1 ?
JR Z,9362 ;если да, то ошибка
OR 1 ;сброс флага C
POP HL ;снятие со стека адреса возврата
RET ;возврат по следующему адресу
9362 LD A,7 ;код ошибки END OF FILE
9364 LD (23610),A;установка кода ошибки
CALL 8421 ;изменение памяти
RST 32 ;обработка ошибки
DEFW #0058
────────────────────────────────────────────────────────────────
Адрес 9373. Команда RET.
9373 RET
────────────────────────────────────────────────────────────────
Адрес 9374. Обработка ошибки INVALID I/O DEVICE через ПЗУ бейси-
ка.
9374 LD A,23;код ошибки - 23
JR 9364;обработка ошибки чеpез ПЗУ бейсика
────────────────────────────────────────────────────────────────
Адрес 9378. Работа с файлом произвольного доступа. Очередной
символ поместите в A и откройте поток, связанный с файлом дан-
ных. Если окончен прием записи или файл последовательного досту-
па, то происходит простой возврат, иначе происходит возврат из
программы, вызвавшей эту подпрограмму.
9378 LD D,A ;сохранение символа
LD C,15 ;берем адрес 13-го байта описателя канала
RST 40
LD A,(HL) ;файл произвольного доступа ?
CP 127
LD A,D ;восстановление символа
RET NZ ;если файл произвольного доступа, то возврат
LD BC,19 ;34-ый байт
ADD HL,BC
LD A,(HL) ;принимаем номер записи ?
OR A
LD A,D ;восстановление символа
JR NZ,9429 ;если номер записи принят, то запись символа
DEC HL ;33-ий байт
LD A,(HL) ;это 0 ?
OR A
JR NZ,9410 ;если нет, то рабочая область уже есть
PUSH BC ;сохранение числа 19,
PUSH HL ;адреса 33-го байта описателя канала и
PUSH DE ;символа
CALL 9464 ;выделение 16 байтов в рабочей области
POP DE ;восстановление символа,
POP HL ;адреса 33-го байта описателя канала и
POP BC ;числа 19
9410 LD C,(HL) ;берем относительный адрес символа
LD A,D ;восстановление символа
EX DE,HL
LD HL,(23759);берем адрес рабочей области
ADD HL,BC ;вычисление адреса для символа
CP 6 ;символ CHR$ 6 ?
LD (HL),A ;помещение символа в рабочую область
CALL Z,9476 ;если символ CHR$ 6, то номер записи принят
LD C,33 ;33-ий байт
RST 40
INC (HL) ;записали 1 символ
POP HL ;снятие со стека адреса возврата
RET ;возврат по следующему адресу
9429 DEC HL ;33-ий байт
LD A,(HL) ;берем относительный адрес символа
DEC HL ;32-й байт
INC A ;место для символа ENTER
CP (HL) ;конец записи ?
INC HL ;33-ий байт
INC (HL) ;записали 1 символ
PUSH HL ;сохранение адреса 33-го байта описателя
PUSH AF ;канала и результата проверки наличия места для символа
LD C,35 ;35-ый байт
RST 40
LD (HL),255 ;сектор переписывать
POP AF ;восстановление результата проверки наличия места
POP HL ;для символа и адреса 33-го байта описателя канала
JR C,9454 ;если места для символа нет, то следующая запись
LD A,D ;восстановление символа
CP 13 ;это ENTER ?
JR Z,9458 ;если да, то следующая запись
POP BC ;снятие со стека адреса возврата
RET ;возврат по следующему адресу
9454 LD A,D ;восстановление символа
CP 13 ;это ENTER ?
RET NZ ;если нет, то возврат
9458 XOR A ;относительный адрес символа - 0
LD (HL),A
INC HL ;34-ый байт
LD (HL),A ;будем принимать номер записи
LD A,D ;восстановление символа
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9464. Выделение 16 байтов в рабочей области памяти. Уста-
навливает 23759.
9464 LD HL,(23649);берем адрес рабочей области памяти
LD (23759),HL;установка его
LD BC,16 ;выделять 16 байтов
JP 7715 ;выделение области и возврат
────────────────────────────────────────────────────────────────
Адpес 9476. Обработка номера записи. Поместите в память номер
записи в виде текста и поместите его адрес в 23759, а в HL по-
местите адрес последнего символа номера записи плюс 1.
9476 LD (HL),13 ;конец строки
LD HL,(23645);сохранение CH_ADD
LD (23767),HL
LD HL,(23759);установка CH_ADD на номер записи
LD (23645),HL
LD HL,23611 ;проверка на синтаксис
RES 7,(HL)
CALL 7617 ;перевод числа в 5-байтную форму
LD HL,23611 ;выполнение
SET 7,(HL)
LD HL,(23759);установка CH_ADD на номер записи
LD (23645),HL
CALL 7617 ;прием числа на стек калькулятора
CALL 7609 ;снятие его оттуда
PUSH BC ;перенос его в DE
POP DE
LD C,32 ;берем адрес 13-го байта описателя канала
RST 40
LD B,(HL) ;берем длину записи
XOR A
LD HL,0 ;вычисление относительного адреса записи в
LD (23771),HL;секторе, номера сектора и номера блока
9528 ADD HL,DE ;извините, не понял, как это pаботает
JR NC,9540
PUSH HL
LD HL,(23771)
INC HL
LD (23771),HL
POP HL
9540 DJNZ 9528
LD (23769),HL
LD A,(23771) ;в блоке всего 16 секторов
LD HL,23770
AND 15
LD (23771),A
LD HL,(23767);восстановление CH_ADD
LD (23645),HL
CALL 9576 ;открытие записи
LD C,33 ;33-ий байт
RST 40
LD A,255 ;относительный адрес текущего символа будет 0
LD (HL),A
INC HL ;34-ый байт
LD (HL),A ;номер записи принят
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9576. Открытие записи. Установите 23767, 23769 и 23771.
9576 LD C,25 ;берем адрес 25-го байта описателя канала
RST 40
LD A,(23770) ;берем номер открываемого блока
CP (HL) ;блок уже открыт ?
JP NZ,9604 ;если нет, то открытие блока
LD C,14 ;14-ый байт
RST 40
LD A,(23771) ;берем номер сектора в открываемом блоке
CP (HL) ;сектор уже считан ?
JP NZ,9639 ;если нет, то загрузка сектора
9695 LD C,13 ;13-ый байт
RST 40
LD A,(23769) ;берем относительный адрес открываемой записи
LD (HL),A ;установка его
RET ;возврат
9604 CALL 9674 ;проверка и обнуление 35-го байта
CALL NZ,9667 ;если надо, то запись сектора
LD A,(23770) ;берем номер открываемого блока
LD C,25 ;25-ый байт
RST 40
LD (HL),A ;установка номера блока
LD C,16 ;16-ый байт
RST 40
LD DE,23773 ;установка описателя блока
LD BC,16
LDIR
CALL 7347 ;поиск блока
Ошибка!!! После поиска файла надо снова открывать канал файла
данных, так как при ошибке будет открыт поток 0.
JP NZ,9682 ;если блок не найден, то создание блока
CALL 9188 ;открытие блока
JR 9645 ;загрузка сектора из блока
9639 CALL 9674 ;проверка и обнуление 35-го байта
CALL NZ,9667 ;если надо, то запись сектора
9645 LD A,(23771) ;берем номер считываемого сектора
LD C,14 ;14-ый байт
RST 40
LD (HL),A ;установка номера сектора
PUSH HL ;сохранение адреса 14-го байта
CALL 9283 ;установка дисковода
CALL 9240 ;загрузка сектора
POP HL ;восстановление адреса 14-го байта
DEC HL ;13-ый байт
LD A,(23769) ;установка относительного адреса открываемой
LD (HL),A ;записи
JR 9596 ;выход
────────────────────────────────────────────────────────────────
Адрес 9667. Запись текущего сектора. Откройте канал файла дан-
ных.
9667 CALL 9283;установка дисковода
CALL 9212;запись сектора
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9674. Проверка и обнуление 35-го байта описателя канала.
Соответственно содержимому будет установлен флаг Z, а само со-
держимое будет в аккумуляторе. Откройте нужный канал.
9674 LD C,35 ;берем адрес 35-го байта описателя канала
RST 40
LD A,(HL);берем его содержимое
OR A ;проверка его
LD (HL),0;обнуление байта
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9682. Создание блока файла данных. Установите 23767,
23769 и 23771.
9682 LD HL,(23770);берем номер блока
LD H,32
LD (23767),HL;установка его
LD HL,(23769);сохранение относительного адреса открываемой
PUSH HL ;записи
LD HL,(23771);и номера сектора
PUSH HL
CALL 9089 ;создание блока
POP HL ;восстановление номера сектора
LD (23771),HL
POP HL ;и относительного адреса открываемой записи
LD (23769),HL
JR 9645 ;загрузка сектора из блока
────────────────────────────────────────────────────────────────
Адрес 9711. Ввод из файла данных. Откройте поток, связанный с
файлом данных. При вызове из редактора вводит всю строку и про-
изводит выход из редактора, иначе возвращает символ из файла в
A.
9711 CALL 8433 ;изменение памяти
LD HL,23612 ;pежим не менялся
RES 3,(HL)
LD HL,(23613);берем адрес подпрограммы обработки ошибок
LD E,(HL)
INC HL
LD D,(HL)
OR A ;он pавен 4223 ?
LD HL,4223
SBC HL,DE
JR NZ,9766 ;если нет, то подпрограмма вызвана не из редактора
LD SP,(23613);очистка стека редактора
POP DE ;снятие адреса подпрограммы обработки ошибок
POP DE ;восстановление адреса дна стека
LD (23613),DE;установка его
9743 CALL 9771 ;ввод символа из файла
JR C,9757 ;если был введен символ, то посылка его в буфер редактора
9748 LD HL,23746 ;адрес переключателя ПЗУ на бейсик
PUSH HL ;помещение его на стек
LD HL,8421 ;адрес подпрограммы удаления буфера и изменения памяти
PUSH HL ;помещение его на стек
RET ;изменение памяти и возврат
9757 CP 13 ;символ ENTER ?
JR Z,9748 ;если да, то выход
RST 32 ;ввод символа в буфер редактора
DEFW #0F85
JR 9743 ;повтор
9766 CALL 9771 ;ввод символа из файла
JR 9748 ;возврат
────────────────────────────────────────────────────────────────
Адрес 9771. Ввод байта из файла данных. На выходе байт будет в
аккумуляторе. Откройте поток, связанный с файлом данных.
9771 LD A,10 ;файл искать по 10 байтам описателя
LD (23814),A
CALL 9808 ;файл открыт для чтения ?
JR Z,9794 ;если да, то
CP 127 ;файл произвольного доступа ?
JP NZ,9374 ;если нет, то ошибка
LD BC,19 ;берем адрес 34-го байта описателя канала
ADD HL,BC
LD (HL),0 ;подпрограмма вывода будет принимать номер записи
JR 9797
9794 CALL 9326 ;
9797 CALL 8983 ;вычисление адреса текущего символа
LD A,(HL) ;берем этот символ
PUSH AF ;сохраняем его
CALL 9115 ;проверка достижения конца сектора
POP AF ;восстановление символа
SCF ;был введен символ
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9808. Проверка 15-го байта описателя текущего канала. Со-
ответственно его содержимому установится флаг Z, а само содержи-
мое будет в регистре A.
9808 LD C,15 ;берем адрес 15-го байта описателя канала
RST 40
LD A,(HL);берем этот байт
OR A ;проверка его на 0
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 9814. Выполнение команды CLOSE#. Установите 23825 и 23611.
9814 LD HL,(23825);установка CH_ADD
LD (23645),HL
CALL 7691 ;прием номера потока
CALL 7541 ;если идет проверка на синтаксис, то возврат
LD A,(23771) ;берем номер потока
RST 32 ;берем относительный адрес описателя канала
DEFW #1727
LD A,B ;поток закрыт ?
OR C
JP Z,467 ;если да, то завершение
PUSH HL ;сохранение адреса элемента STRMS
LD HL,(23631);берем адрес области описателей каналов
ADD HL,BC ;вычисляем адрес первого байта описателя канала
LD A,(HL) ;берем старший байт адреса подпрограммы вывода
LD HL,15630 ;он равен 61 ?
CP H
POP HL ;восстановление адреса элемента STRMS
JP NZ,8744 ;если старший байт адреса подпрограммы вывода не равен 61,
;то сообщение NOT DISC FILE
Дурацкая проверка!!! Мало ли что может изменить пользователь!
LD (HL),0 ;закрытие потока
INC HL
LD (HL),0
LD (23769),BC;сохранение относительного адреса описателя канала
LD HL,(23631);вычисление адреса описателя канала
ADD HL,BC
DEC HL
LD (23767),HL;сохранение его
CALL 9934 ;запись остатка файла, если нужно
LD HL,(23767);восстановление адреса описателя канала
LD BC,292 ;его длина - 292 байта
CALL 7726 ;уничтожение области описателя канала
LD HL,23568 ;берем начало таблицы STRMS
LD B,16 ;всего 16 потоков
9885 PUSH BC ;сохранение количества потоков
LD BC,(23769);берем относительный адрес описателя канала
LD E,(HL) ;берем адрес из таблицы
INC HL
LD D,(HL)
EX DE,HL ;переносим его в HL
SBC HL,BC ;он меньше нашего адреса ?
EX DE,HL ;переброска его в DE
JR C,9916 ;если он меньше нашего адреса, то следующий элемент
LD D,(HL) ;снова берем адрес из таблицы
DEC HL
LD E,(HL)
INC HL
PUSH HL ;сохранение адреса текущего элемента таблицы
EX DE,HL ;переброска адреса из таблицы в HL
LD BC,292 ;коррекция адреса
SBC HL,BC
EX DE,HL ;перенос его в DE
POP HL ;восстановление адреса текущего элемента таблицы
LD (HL),D ;установка нового адреса
DEC HL
LD (HL),E
INC HL
9916 INC HL ;следующий элемент
POP BC ;восстановление количества элементов
DJNZ 9885 ;повтор до конца
LD HL,(23825);коррекция адреса командной строки
LD BC,292
SBC HL,BC
LD (23825),HL
JP 467 ;завершение
────────────────────────────────────────────────────────────────
Адрес 9934. Запись текущего сектора файла данных. При записи от-
крывает поток, связанный с файлом. Поместите в HL и 23767 адрес
описателя канала.
9934 LD BC,15 ;берем адрес 15-го байта описателя канала
ADD HL,BC
LD A,(HL) ;файл открывался для чтения ?
OR A
RET Z ;если да, то возврат
LD HL,(23767);открытие потока
LD (23633),HL
CALL 9953 ;запись описателя блока
JP 9212 ;запись текущего сектора и возврат
────────────────────────────────────────────────────────────────
Адpес 9953. Запись описателя текущего блока файла данных. От-
кройте поток, связанный с файлом данных и поместите в HL адрес
описателя канала.
9953 LD BC,13 ;берем адрес 13-го байта описателя канала
ADD HL,BC
LD E,(HL) ;берем длину пройденной части блока
INC HL
LD D,(HL)
LD BC,13 ;берем адрес 26-го байта описателя канала
ADD HL,BC
LD (HL),E ;установка длины записанной части блока
INC HL
LD (HL),D
LD C,16 ;16-ый байт
RST 40
LD DE,23773;установка описателя блока
LD BC,16
LDIR
CALL 9283 ;установка дисковода
LD C,12 ;12-ый байт
RST 40
LD C,(HL) ;берем номер блока в каталоге
CALL 5739 ;замена описателя блока
JP 7741 ;запись сектора с описателем и возврат
Внимание!!! После записи сектора надо снова открывать поток,
связанный с файлом данных, так как при дисковой ошибке открыва-
ется поток 0.
────────────────────────────────────────────────────────────────
Адрес 9991. Печать строки. В HL поместите ее начало. Последний
символ должен быть либо CHR$ 0, либо с поднятым седьмым битом.
9991 LD A,(HL) ;берем символ из строки
OR A ;это CHR$ 0 ?
RET Z ;если да, то возврат
AND 127 ;сброс бита 7
RST 16 ;печать символа
BIT 7,(HL);бит 7 установлен ?
RET NZ ;если да, то возврат
INC HL ;берем адрес следующего символа
JR 9991 ;повтор
────────────────────────────────────────────────────────────────
Адрес 10003. Сравнение областей памяти. В HL и DE поместите на-
чала сравниваемых областей, а в B - их длину. При несовпадении
флаг Z сброшен, иначе включен.
10003 LD A,(DE) ;сравнение байтов из областей
CP (HL)
RET NZ ;если они не совпали, то возврат
INC HL ;следующие байты
INC DE
DJNZ 10003;повтор до конца
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 10011. Обработка ошибки NO DISC без установки TAPE LOADING
ERROR.
10011 LD HL,10236;адрес сообщения NO DISC
LD A,6 ;код ошибки - 6
JP 7242 ;обработка ошибки
────────────────────────────────────────────────────────────────
Адрес 10019. Обработка ошибки DIRECTORY FULL.
10019 LD HL,10221;адрес сообщения DIRECTORY FULL
LD A,4 ;код ошибки - 4
JP 7242 ;обработка ошибки
────────────────────────────────────────────────────────────────
Адрес 10027. Установка кода ошибки TAPE LOADING ERROR для пзу
бейсика.
10027 LD A,26 ;код ошибки TAPE LOADING ERROR
JR 10033;установка кода ошибки
────────────────────────────────────────────────────────────────
Адрес 10031. Установка кода ошибки INVALID I/O DEVICE для пзу
бейсика. Используется также с адрес 10033 (установка кода ошибки
для пзу бейсика; код ошибки поместите в A).
10031 LD A,18 ;код ошибки INVALID I/O DEVICE
10033 LD (23610),A;установка кода ошибки
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 10037. Установка кода ошибки OUT OF MEMORY для пзу бейси-
ка.
10037 LD A,3 ;код ошибки OUT IF RAM
JR 10033;установка кода ошибки
────────────────────────────────────────────────────────────────
Адрес 10041. Проверка дорожки. В регистре D задайте физический
номер дорожки. По окончании в 23766 получите число битых секто-
ров на дорожке.
10041 XOR A ;дорожку проверять
LD (23768),A
LD (23766),A ;дефектных секторов пока не нашли
IN A,(31) ;сохраним состояние контроллера дисководов
LD (23757),A
LD E,D ;перегрузка номера дорожки в E
PUSH DE ;сохранение номера дорожки
LD A,E ;помещение номера дорожки в регистр данных
OUT (127),A
LD A,24 ;позиционирование
CALL 15770
LD A,(23757) ;берем состояние контроллера до операции
AND 128 ;дисковод был готов ?
CALL NZ,16032;если нет, то задержка в 2168937 тактов
POP DE ;восстановление номера дорожки
CALL 12987 ;проверка дорожки по таблице секторов для быстрого диска
LD A,(23766) ;битых секторов нет ?
OR A
RET Z ;если да, то возврат
LD A,7 ;дисковая ошибка
LD (23823),A
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 10086. Сообщения TR-DOS.
10086 DEFM "O.K."
DEFB 0
10091 DEFM "Verify error."
DEFB 141
10105 DEFM "BACKUP DISK"
DEFB 141
10117 DEFM "Insert Destination disk"
DEFB 13
DEFM "then press Y"
DEFB 0
10154 DEFM "Insert source disk then press Y"
DEFB 0
10186 DEFM "*BREAK*"
DEFB 141
10194 DEFM "Out of RAM"
DEFB 141
10205 DEFM "Array not found"
DEFB 141
10221 DEFM "Directory full"
DEFB 141
10236 DEFM "No disk"
DEFB 141
10244 DEFM "Stream opened"
DEFB 141
10258 DEFM "Not disk file"
DEFB 141
10272 DEFM " file exists"
DEFB 13
DEFM "over write?(Y/N)"
DEFB 0