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...
----------------------------------------------------------------




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вступление - вышедший на прошлой недел 24 номер газеты ФАЛЬШИВЫЙ!
Вступление - Вот и вышел первый номер газеты "RED PRESS".
Анкета - Sрессуfаn.

В этот день...   22 сентября