Funeral #1.5
31 октября 1999

Code on - меню с бесконечной вложенностью.

<b>Code on</b> - меню с бесконечной вложенностью.
music: Midisoft/Energy Minds (C) Eraser/Delirium Tremens ---------------------------------FUNeral--
рочитав статейку в DJV#05 о
журнальной оболочке, у меня вкралось сомнение насчет "оптимизации". Енто куда же годно, господа!!! В журнале предлагают примерно такую шнягу: LD IX,Win1 ; основное окно CALL WIN ; нарисовали CALL SELECT ; опрос LD A,(OPC) ; номер опции LD HL,TABLICA_1 ; переход по JP JP_HL ; таблице Win1 DEFB x,у,len,high,еще че-нибудь DEFB "Шняга 1",13 DEFB "Шняга 2",13 DEFB "Шняга 3",13 DEFB "Шняга 4",13 DEFB "Шняга 5",0 TABLICA_1 DEFW OPC_1 ; таблица DEFW OPC_2 DEFW OPC_3 ... OPC_1 ... ; загружаем данные очень ; примитивным образом: LD A,1 ; к примеру, CALL RAM_PAGE ; музыку LD HL,ХХХХ LD DE,YYYY LD В,10 CALL LOAD CALL DEPACK_MUS LD A,3 ; текст CALL RAM_PAGE LD HL,ZZZZ LD DE,NNNN LD В,10 CALL LOAD CALL DEPACK_TXT ... JP VIEW ; запуск ; листалки... Люди! Ведь енто все полный вперед !!! Это ведь Lamerz Must Die!!! Или не так??? Подумав, что у автора статьи съехал чердак, я полез в оболочки журналов... и вижу - он съехал не только у него:( Так что опупев от съеxавшиx чердаков, Eraser решил их поправить... Вектор окна имеет следующий вид: Win1 DEFB x,у,len,high,... DEFW Txt1,Mus1,Spr1; можно и без ; этого DEFB "OPC_1",13 ; опция 1 DEFB "OPC_2",13 ; опция 2 DEFB "OPC_3",13 ; опция 3 DEFB "OPC_4",13 ; опция 4 DEFB "OPC_5",0 ; опция 5 ... ;описатель данных для текстов, к примеру: ; ; DEFW TrkSec1 ; DEFB Blk1 ; DEFW TrkSec2 ; DEFB Blk2 ; ... ;если Blk=#00, то данная опция имеет ;вложенность c описателем Win2, а если #FF ;(как во FUNearl'е), то это приложение... Txt1 DEFW #аааа ; TXT_LEN DEFB #аа ; TXT_BLK DEFW Win2 ; во 2 опции есть DEFB #00 ; вложенность DEFW #ЬЬЬЬ DEFB #ЬЬ DEFW #0000 ; а здесь у нас DEFB #FF ; приложение ... ;описатель музыки, аналoгични предыдущему, ;только если #00, то музыки нет... Mus1 DEFW #cccc DEFB #dd DEFW #hhhh DEFB #hh DEFW #ееее DEFB #ее DEFW #ffff DEFB #ff ... ;описатель cпарайтoв ;если Blk=0, то cпарйты absent... Spr1 DEFW #gggg DEFB #gg DEFW #mmmm DEFB #mm DEFW #nnnn DEFB #nn DEFW #oooo DEFB #oo ;.. Win2 DEFB x,у,len,high,... DEFW Txt2,Mus2,Spr2 DEFB "ZX_1",13 ; опция 1 DEFB "ZX_2",13 ; опция 2 DEFB "ZX_3",13 ; опция 3 DEFB "ZX_4",13 ; опция 4 DEFB "ZX_5",0 ; опция 5 Txt2 DEFW WinЗ DEFB #00 DEFW #аааа DEFB #аа DEFW #ЬЬЬЬ DEFB #ЬЬ DEFW #zzzz DEFB #zz Mus2 DEFW #cccc DEFB #dd DEFW #hhhh DEFB #hh DEFW #ееее DEFB #ее DEFW #ffff DEFB #ff Spr2 DEFW #gggg DEFB #gg DEFW #mmmm DEFB #mm DEFW #nnnn DEFB #nn DEFW #oooo DEFB #oo WinЗ .... ; и так далее... C описателем разобрались. Я думаю, что здесь все понятно , и для вас не составит труда сделать оболочку, поддерживающую данное окно. А теперь перейдем непосредственно к ядру оболочки... LD IX,MainWin ; описатель главного окна CALL OPEN_W ; запомнили вектор окна на стеке окон, ; для пocледующещегo доступа CALL DRAW_W ; нарисовали CONT_1 CALL WINSEL ; селектор LD A,(OPC) ; номер опции CP #FF ; если "ткнули" мимо опции, то закры- ; ваем JR Z,CLOSE_W ; пocледнне окно CALL INIT_DAT ; настраиваем данные для загрузки ; или открытия окна LD A,(TXT_BLK) ; если BLK=0, то, значит, есть OR A ; вложенность, JR NZ,LOAD ; иначе загружажеm данные CALL OPEN_W ; открываем okkho (в IX у нас адрес ; окна, взятый из описатель текущего ; окна CALL DRAW_W ; рисуем его JR CONT_1 ; селектор... DRAW_W рисуем окно RET OPEN_W заносим на стек окон вектор окна, для последую- щего доступа RET CLOSE_W закрытие окна - удаление вектора последнего окна Если последнее окно является matepuhckum, то переходим на адрес CONT_1, вызываем процедуру REFRESH RET REFRESH процедура берет последовательно все вектора (c самого первого до последнего) и строит их на экране (хотя если вы использу- ете буфер для окон, то восстанав- ливаем область под последним ок- ном) RET LOAD загрузка, настроенных предва- рительных данных ... CALL REFRESH JP CONT_1 Если вам нужна вложенность для проги, то описатель окна будет выглядить следую- щим образом: Win1 DEFB x,у,len,high,... DEFB "OPC_1",13 ; опция 1 DEFB "OPC_2",13 ; опция 2 DEFB "OPC_3",13 ; опция 3 DEFB "OPC_4",13 ; опция 4 DEFB "OPC_5",0 ; опция 5 ;описатель адресов для перехода в опциях DEFW #аааа ; переход на адрес #аааа, DEFB #00 ; т.к. здесь #00 DEFW #zzzz DEFB #00 ;описатель адресов для перехода в опциях DEFW #аааа ; переход на адрес #аааа, DEFB #00 ; т.к. здесь #00 DEFW #zzzz DEFB #00 DEFW Win2 ; есть вложенность, т.к. DEFB #01 ; здесь #01 DEFW #ЬЬЬЬ DEFB #ЬЬ ... Вроде бы все понятно. Ядро похоже на предыдущее, но только с той разницей, что процедура LOAD должна быть заменена на процедуру JP_HL, т.е. JP_HL должна брать из переменной JP_Adr, в которой содержится адрес перехода, взятого из описателя адресов перехода, и переходить на (JP_Adr). Ну вот вроде бы на сегодня и все...



Другие статьи номера:

От идиоторов - в следующем номере Вы обязательно встретите...

От идиоторов - управление в газете.

От идиоторов - авторы газеты.

От идиоторов - приветы.

Iron - Драйвера принтера для KAY-1024.

Iron - доработка 1Mb памяти для GRM.

Iron - доработка TURBO режим для GRM.

Iron - взлом телефонных карт для бесконечных звонков.

Iron - У ZX-Sрectrum объем оперативной памяти 48кб, а у современныx Пентиумов 32... 64 мегабайта. Причем занимает она одинаковую физическую площадь...

Iron - взлом телефонных карт для бесконечных звонков (вариант без кнопки).

Code on - меню с бесконечной вложенностью.

Code on - инструкция по использованию комманд процессора Z80.

Phantasmogore - злая мудрость: Афоризмы и изречения.

Phantasmogore - Samael (английский).

Phantasmogore - Samael (русский).

Phantasmogore - любовь до гроба.

ZX-Review - интервью с создателем программы для создания газет Page Maker.

ZX-Review - пособие "как сделать журнал на Спектруме".

ZX-Review - отчет с Сибирского пати CSP'99.

ZX-Review - история группы Delirium Tremens.

ZX-Review - обзор сайтов по ZX Spectrum.

ZX-Review - zx stars: интервью с Violator

Real fun - slide show.

Real fun - анекдоты.

Real fun - приколы: как снять девушку при помощи компьютера.

На халяву - перезентация нового графического редактора для Спектрума: Burial Graphics Editor.

Реклама - реклама и обьявления.

Реклама - IronMan CD.


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

Похожие статьи:
Сетевые новости - Устав сети SPbZXNet.
Ликбез - полное описание и диассемблер ПЗУ (часть 19).
Макросы - Язык программирования MACROS-текстового редактора IS-Edit.

В этот день...   26 июля