|
ACNews
#02
08 июля 2001 |
|
Программирование - О командных строках TR-DOS.

┌─── ─- - - - О командных строках
| Не помню уже когда, но я уже предлагал в эхе этот способ. Ещё
он вскользь описывался в ZX-Guide #3.
Заключается он в том, что для упрощения взаимодействия прог-
рамм между собой они будут использовать для вызова друг друга
командную строку вида:
RUN "prog",parameter
Командная строка E_LINE - это предопределённое самой системой
место для хранения такого рода параметров. Логичнее, по-моему,не
придумать. А запятая как разделитель выбрана для общности уже
существующих команд с несколькими параметрами и наших вызовов.
При этом TR-DOS мало интересует содержимое командной строки пос-
ле запятой.
В AC Edit 0.5S через такую строку можно указать имя загружае-
мого файла.Поскольку возможные расширения файлов отнюдь не исче-
рпываются стандартными TR-DOS расширениями, то я решил обойтись
без всякого рода точек и кавычек - просто указывать 9 байт наз-
вания со слитно написанным расширением...
Реализуется это так:
LD HL,(23641) ;адрес ком.строки E_LINE
LD BC,7 ;первые 7 байт ком.строки, как известно, запороты
ADD HL,BC
LD A,",
CPIR ;ищем запятую (ведь нам неизвестно, сколько букв
;набрал юзер в названии нашей программы? ;)))
JR NZ,notFND
LD DE,23773 ;TR-DOS file descriptor
LD C,9
LDIR
LD C,#A ;"поиск элемента каталога"
CALL #3D13 ;ищем по 9 байтам, т.к. обычно (23814)=9
LD A,C ;получаем номер элемента каталога
INC C ;C=#FF означает, что файл не найден
JR Z,notFND
LD C,8 ;"считывание элемента каталога"
CALL #3D13
;теперь дескриптор по адресу 23773 содержит инфу о нужном файле!
;что делать дальше, уже зависит от конкретной программы:
LD HL,23773
CALL PRCDESC+3
CALL EXTLU
JR OK
notFND ...
...
OK ...
Если действительно запускать программу через TR-DOS, то (как
обнаружилось) TR-DOS немного перерабатывает строку по своему
вкусу: заменяет строки,похожие на токены бейсика,на сами токены.
Таким образом,нельзя выполнить через TR-DOS такую команду:
RUN "ACEdit5S",AlCoNew2p
А такую можно:
RUN "ACEdit5S",AlCoNws2p
Я,конечно,отдаю себе отчёт в том,что ни одна программа,будучи
в здравом уме, не станет грузить другую через командную строку
TR-DOS. Обычно всё это происходит через процедурку запуска бей-
сик-файла, типа той, что написана BASIL'ом (ZX-Guide #3)
LD HL,#YYYY ;16 BYTES INFO
LD DE,23773 ;ABOUT
LD BC,16 ;BASIC FILE.
LDIR
LD A,#C9
LD (23746),A
LD HL,RNBASIC
PUSH HL
LD DE,23448
LD BC,END_COD-RNBASIC
LDIR
LD HL,10072 ;ДЛЯ
EXX ;ВЫХОДА
LD IY,23610 ; В
IM 1 ;BASIC.
EI
RET
RNBASIC
DISP 23448
LD HL,23867
LD DE,23868
LD (HL),0
LD BC,41668
LDIR ;ОЧИСТКА 48-Й ПАМЯТИ
LD A,#38 ;PAPER 7
LD (23693),A ;& INK 0.
LD (23624),A ;И ДВЕ НИЖНИЕ СТРОКИ ЭКРАНА ТАКИЕ ЖЕ.
LD BC,65167 ;CLEAR 65167 ДЛЯ
CALL 7863 ;МАКСИМАЛЬНО ДЛИННЫХ ФАЙЛОВ.
LD HL,4867 ;ПОДКЛЮЧЕНИЕ
PUSH HL ;
LD (23613),SP ;
LD HL,(23631) ;48-ГО
LD DE,15 ;
ADD HL,DE ;
LD DE,5566 ;BASIC'А
EX DE,HL ;
LD BC,4 ;
LDIR ;СО 128-ОЙ
RES 4,(IY+1) ;
LD HL,7030 ;
PUSH HL ;ПАМЯТЬЮ.
LD HL,RNBAS2
PUSH HL
LD HL,10608 ;
PUSH HL ;
LD HL,10528 ;
PUSH HL ;ЗАГРУЗКА.
LD HL,10570 ;
PUSH HL ;
JP 15663 ;
RNBAS2 LD HL,(23649)
LD A,(HL)
DEC HL
LD L,(HL)
LD H,A
LD (23618),HL ;СТРОКА АВТОСТАРТА
XOR A ;ВЫПОЛНЯЕТСЯ С
LD (23620),A ;1-ОЙ КОМАНДЫ.
RET
ENT
END_COD
Так вот,ничто нам не мешает перед таким запуском сформировать
командную строку, состоящую из запятой и названия файла, и засу-
нуть в E_LINE (23641) её адрес (точнее,адрес на 7 меньше)! |
- - - -─ ──┘
------------------- Как высушивать текст ;)
Если вам очень хочется достать из предыдущей статьи исходни-
ки, то придётся удалить управляющие символы.
Способ #1 (ламерский):
Входим в Find/Replace и вводим в поле "Введите, что искать" сим-
вол белого цвета (SS/E, 7)
Вводим в поле "и на что заменить" символ пробела.Нажимаем Enter.
Видим: Replaced OK.
Продолжать то же самое для жёлтого,зелёного и т.д. цветов :)))
Способ #2 (кодерский;)):
Пишем маааленькую программу,которая делает то же самое,перекоди-
руем с помощью неё текст,а потом стираем программу ;)))
Результат можно отдавать на съедение ALASM 4.42...
----------------------------------------------------------------
Другие статьи номера:
Новости - группа Anarchia переживает свои худшие времена. |
Эмуляторы - Укрощение эмулятора ZX Spectrum. |
Программирование - О командных строках TR-DOS. |
Приветы - Просьба передать сие послание адресатам, если это возможно... |
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3