Funeral #1.5
31 октября 1999 |
![]() |

music: Midisoft/Energy Minds (C) Eraser/Delirium Tremens ---------------------------------FUNeral--![]()
![]()
![]()
![]()
![]()
журнальной оболочке, у меня вкралось сомнение насчет "оптимизации". Енто куда же годно, господа!!! В журнале предлагают примерно такую шнягу: 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). Ну вот вроде бы на сегодня и все...![]()
рочитав статейку в DJV#05 о
Other articles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 1 April
Info Guide #13,
ACNews #50,
Avro News #01,
ACNews #47,
ACNews #40,
ACNews #29,
Black Metall #01,
ACNews #16,
Adventurer #13,
Polesse #19,
Subliminal Extacy #03,
ZX Pilot #37,
Always #03,
Born Dead #0G,
Odyssey paper #08,
Optron #26,
City #08,
Zodiac #02,
Polesse #05,
Nicron #108,
X-Magazine #10,
Nicron #82,
Energy #01,
Sorrow News #03,
Sorrow News #02,
Proton #27,
Think #08,
Wallpaper #01,
Spectrum Progress #03,
Spectrum Expert #02,
Micro #01,
X-Files #02,
Gorodok #05,
Deja Vu #04,
Anecdotes #01,
X-Files #02,
Maximum #35,
Impulse #01,
Spectrofun #01,
Faultless #07,
Breeze #06,
Nicron #27,
Echo #03,
Oberon #01,
Spectrofon #19,
On-Line #30,
Sinclair Town #01,
Sinclair Classic #04,
Spectrofon #04