File-Manager/MOD0/OBJS/HMENU.ASM
2025-04-05 01:58:39 +10:00

1738 lines
32 KiB
NASM
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; Ž¡à ¡®â稪¨ ƒ®à¨§. ¬¥­î, Pull-¬¥­î, Œ¥­î ¢ë¡®à  ¤¨áª®¢.
; ’ ª¦¥ ᮤ¥à¦¨â ¯/¯à®£à ¬¬ã ­ áâனª¨ ¬¥â®ª "û" ¯ã­ªâ®¢ ¬¥­î.
;
; <20>®¬¥à  ¯ã­ªâ®¢
; Left
cmLBrief equ 0
cmLMed equ cmLBrief+1
cmLFull equ cmLMed+1
cmLInfo equ cmLFull+1
cmLQview equ cmLInfo+1
cmLName equ cmLQview+1
cmLExt equ cmLName+1
cmLDate equ cmLExt+1
cmLSize equ cmLDate+1
cmLUnsort equ cmLSize+1
cmLFilter equ cmLUnsort+1
cmLChangeDrv equ cmLFilter+1
; Files
cmHelp equ cmLChangeDrv+1
cmUsrMenu equ cmHelp+1
cmView equ cmUsrMenu+1
cmEdit equ cmView+1
cmCopy equ cmEdit+1
cmRename equ cmCopy+1
cmMkFolder equ cmRename+1
cmDelete equ cmMkFolder+1
cmAttrib equ cmDelete+1
cmSelGroup equ cmAttrib+1
cmUSelGroup equ cmSelGroup+1
cmQuit equ cmUSelGroup+1
; Commands
cmFind equ cmQuit+1
cmVolume equ cmFind+1
cmSwap equ cmVolume+1
cmPanelsOn equ cmSwap+1
cmNullTRD equ cmPanelsOn+1 ; á®§¤ âì ¯ãá⮩ TRD image
cmCopyTRD equ cmNullTRD+1 ; TRD image -> Disk
cmSaveTRD equ cmCopyTRD+1 ; Disk -> TRD image
; Options
cmInterface equ cmSaveTRD+1
cmConfirm equ cmInterface+1
cmColors equ cmConfirm+1
cmHighlight equ cmColors+1
cmViewSet equ cmHighlight+1
cmEditSet equ cmViewSet+1
cmSaveSetup equ cmEditSet+1
; Right
cmRBrief equ cmSaveSetup+1
cmRMed equ cmRBrief+1
cmRFull equ cmRMed+1
cmRInfo equ cmRFull+1
cmRQview equ cmRInfo+1
cmRName equ cmRQview+1
cmRExt equ cmRName+1
cmRDate equ cmRExt+1
cmRSize equ cmRDate+1
cmRUnsort equ cmRSize+1
cmRFilter equ cmRUnsort+1
cmRChangeDrv equ cmRFilter+1
; ä« £¨ ¬ àª¥à®¢ ¯ã­ªâ®¢ ¬¥­î
CTnodef equ 0 ; "¯®-㬮«ç ­¨î" ­¥ ¢ë¤¥«¥­®
CTdef equ 1 ; "¯®-㬮«ç ­¨î" ¢ë¤¥«¥­® "û"
LC000 equ 0C000h ;  ¤à¥á ¡ãä¥à  ®ª­ 
; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î
BoxData:
CurBox: dw 0 ;+0,+1
Xo: db 0
Xi: db 0
Ypos: db 0 ; ¯®«®¦.
Xlen: db 0 ; è¨à¨­ 
CurMenu:db 0 ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
CurMBox:db 0 ; Current mark MenuBox
BarFlag:db 0 ; Flag barinvert (0=­¥â, 1=¤ )
;-----------------------------------------------------------
; ’ ¡«¨æ  £®à¨§®­â «ì­®£® Œ¥­î
; ä®à¬ â: +0 - Xo coord
; +1 - Xi coord
; +2 - ª®¤ hot-ª« ¢¨è¨
; +3,4 -  ¤à¥á ®¯¨á â¥«ï ¢¥àâ. ¬¥­î
;-----------------------------------------------------------
BarTabl:ds 5*5 ; ¡«®ª ¯ã­ªâ  * ç¨á«® ¯ã­ªâ®¢ £®à. ¬¥­î
db 80h ; ª®­¥æ â ¡«¨æë
;-----------------------------------------------------------
; ’ ¡«¨æ  ¢¥à⨪ «ì­ëå ¬¥­î
; ä®à¬ â: <20>®«®¦¥­¨¥ ®ª­  ¬¥­î:
; +0 - Xo coord
; +1 - Xi coord
; +2 - Yo coord
; +3 - Yi coord
; +4 - <20>®«®¦¥­¨¥ ¯ã­ªâ  ¬¥­î:
; +0 - Xo coord
; +1 - Xi coords
; +2 - Y coords
; +3 - ­®¬¥à ª®¬ ­¤ë
; +4 - hot-ª« ¢¨è 
; +5 - ­®¬¥à ª®­â¥ªáâ 
;-----------------------------------------------------------
BoxTabl:ds 4 ; +0..+3
ds 6*26 ; ¡«®ª ¯ã­ªâ  * ¬ ªá. ç¨á«® ¯ã­ªâ®¢
db 0 ; ª®­¥æ â ¡«¨æë
;///////////////////////////////////////////////////////////
; ‚ë§®¢ ƒ®à¨§®­â «ì­®£® Œ¥­î
;///////////////////////////////////////////////////////////
main_menu:
in a,(SLOT3)
push af
ld a,(page_sys_screen) ; áâà. ¡ãä¥à  ®ª­  ¤¨ «®£ 
out (SLOT3),a
; á®åà. íªà ­ ¯®¤ áâப®© £®à¨§. ¬¥­î
ld ix,WinHMenuBuff ; address Box buffers
ld hl,0150h
ld de,0000h
ld a,(page_sys_screen) ; page buffer
ld c,0B2h ; ª®¯¨à. ¨§ ®ª­  ¢ ¡ãä¥à
call scrn4__
call init_hmenu ; ¯®¤£®â®¢ª  ¬¥­î
call menu_exec ; à ¡®â  ¢ ¬¥­î
call get_fire ; § é¨â  ®â "§ «¨¯ ­¨ï" ¬ë誨
; ¢®ááâ. íªà ­ ¯®¤ áâப®© £®à¨§. ¬¥­î
ld ix,WinHMenuBuff ; address Box buffers
ld hl,0150h
ld de,0000h
ld a,(page_sys_screen) ; page buffer
ld c,0B3h ; ª®¯¨à. ¨§ ¡ãä¥à  ¢ ®ª­®
call scrn4__
pop af
out (SLOT3),a
; ­  ¢ë¯®«­. ¯ã­ªâ®¢ pull-¬¥­î
jp pull_commands ; pullcmnd.asm
;-----------------------------------------------------------
; ˆ­¨æ¨ «¨§ æ¨ï áâப¨ £®à¨§. ¬¥­î ¨ â ¡«¨æë ¬ë誨
;-----------------------------------------------------------
init_hmenu:
; ª®à४⭮ ­ áâநâì ¯ ­¥«¥-§ ¢¨á¨¬ë¥ ï祩ª¨
ld a,(cur_panel) ; 0=«¥¢ ï, 80h=¯à ¢ ï
or a
push af
call nz,change_panel
call prep_default_puncts ; ãáâ. "û" ¬¥âª¨ ¯ã­ªâ®¢
pop af
call nz,change_panel
;
call InitEvent ; ¨­¨æ. ®¡à ¡®â稪  ᮡë⨩
xor a
ld (CurMBox),a
ld (BarFlag),a
inc a
ld (CurMenu),a ; ­ ç. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
; ¯®¤£®â. áâப㠬¥­î ¢® ¢à¥¬¥­­®¬ ¡ãä¥à¥
ld ix,BarTabl ; â ¡«¨æ  £®à¨§. ¬¥­î
ld hl,work_buffer ; ¢à¥¬. ¡ãä¥à
ld de,MenuTab ; ®¯¨á â¥«ì £®à¨§. Œ¥­î
ld b,1 ; ­ ç «® X ª®®à¤¨­ â
ld a,(color_array+12) ; 梥⠣®à¨§. ¬¥­î
ld c,a
ld (hl)," " ; ­ ç «ì­ë© ¯à®¡¥«
inc hl
ld (hl),c
inc hl
; 横« ¢ë¢®¤  ¢á¥å ¯ã­ªâ®¢
InBarL1__:
ld (hl)," " ; à §¤¥«. ¯ã­ªâ®¢
inc hl
ld (hl),c
inc hl
ld (ix+0),b ;+0 left X coords
inc ix
inc b
ld a,(de) ; Get name submenu
; 横« ¢ë¢®¤  ¯ã­ªâ 
InBarL2__:
inc de
cp "&"
call z,Bhotkey__ ; ãáâ. 梥⠤«ï hot-¡ãª¢ë
ld (hl),a
inc hl
ld (hl),c
inc hl
inc b
ld a,(de)
or a
jr nz,InBarL2__
ld (hl)," " ; ª®­æ®¢ª  ¯ã­ªâ 
inc hl
ld (hl),c
inc hl
inc b
ld (ix+0),b ;+1 Right X coords
inc ix
inc de
ld a,(de) ; ª®¤ hot-ª« ¢¨è¨
ld (ix+0),a ;+2
inc ix
inc de
ld a,(de)
ld (ix+0),a ;+3,+4 -  ¤à¥á ®¯¨á â¥«ï ¢¥àâ. ¬¥­î
inc ix
inc de
ld a,(de)
ld (ix+0),a ;+4
inc ix
inc de
ld a,(de)
or a
jr nz,InBarL1__
; ª®­¥æ ¯ã­ªâ®¢ £®à¨§. ¬¥­î
ld (ix+0),80h ; ª®­¥æ Mouse Table
ld a,80 ; è¨à¨­  íªà ­ 
sub b
jr z,InBarEx__
; § ¯®«­¨âì ®áâ â®ª áâப¨ ¤® ª®­æ  íªà ­ 
ld b,a
ld (hl)," "
inc hl
ld (hl),c
inc hl
djnz $-5
; ¢ë¢¥á⨠£®â®¢ãî áâப㠣®à¨§. ¬¥­î ­  íªà ­
InBarEx__:
ld ix,work_buffer ; ¡ãä¥à áâப¨
ld hl,0150h ; Y/X à §¬¥à ®ª­ 
ld de,0000h ; ¯®«®¦. ®ª­  (áâப¨)
in a,(SLOT3)
ld c,0B3h ; ª®¯¨à. ¨§ ¡ãä¥à  ­  íªà ­
call scrn4__
jp SetMBar ; ¢ë¢¥á⨠¢ë¤¥«. 㪠§ â¥«ì
;-------------------------------------------------
; “áâ ­®¢¨âì æ¢¥â hot-¡ãª¢ë £®à¨§. ¬¥­î
;-------------------------------------------------
Bhotkey__:
ld a,(de)
ld (hl),a ; hot-¡ãª¢ã ¢ ¡ãä¥à
inc hl
inc de
push de
ld a,(color_array+14) ; 梥â hot-¡ãª¢ë £®à¨§. ¬¥­î
and 0Fh
ld e,a
ld a,(color_array+12) ; 梥⠣®à¨§. ¬¥­î
and 0F0h
or e
ld (hl),a ;  âਡãâ
pop de
inc hl
ld a,(de)
inc de
inc b
ret
;-------------------------------------------------
; “áâ ­®¢¨âì ¢ë¤¥«. 㪠§ â¥«ì ¢ £®à¨§. Œ¥­î
;-------------------------------------------------
SetBarI:ld a,(BarFlag)
or a
ret nz
inc a
ld (BarFlag),a
ld hl,BarTabl ; à ¡®ç ï â ¡«¨æ  £®à¨§. ¬¥­î
ld a,(CurMenu) ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
dec a
ld c,a ; *5
add a,a
add a,a
add a,c
add a,l
ld l,a
jr nc,$+3
inc h
ld e,(hl) ; Xo
inc hl
ld d,0 ; Y = 0
ld a,(hl)
sub e ; Xi - Xo = è¨à¨­ 
ld l,a
ld h,1 ; ¢ëá®â 
ld (RBrIlen+1),hl
ld (RBrIpos+1),de
push af ; á®åà. è¨à¨­ã
ld ix,work_buffer
in a,(SLOT3)
ld c,0B2h ; ª®¯¨à. á ®ª­  ¢ ¡ãä¥à
call scrn4__
ld a,(color_array+13) ; 梥â 㪠§ â¥«ï £®à¨§. ¬¥­î
ld c,a
ld a,(color_array+14) ; 梥â hot-¡ãª¢ë £®à¨§. ¬¥­î
and 0Fh
ld b,a
pop af ;Reset LenX
; ¯®¤£®â®¢¨âì ¢ ¡ãä¥à¥ ¢ë¤¥«. 㪠§ â¥«ì
ld hl,work_buffer ; ¡ãä¥à
SetInvB__:
ex af,af'
inc hl
ld a,(hl)
and 0Fh
cp b ; hot-¡ãª¢ ?
ld a,c
jr nz,$+5
and 0F0h
or b
ld (hl),a
inc hl
ex af,af'
dec a
jr nz,SetInvB__
; ¢ë¢¥á⨠­  íªà ­ ¢ë¤¥«. ¯ã­ªâ (㪠§ â¥«ì)
ld ix,work_buffer ; ¡ãä¥à
ld hl,(RBrIlen+1) ; Y/X à §¬¥à ®ª­ 
ld de,(RBrIpos+1) ; ¯®«®¦. ®ª­ 
in a,(SLOT3)
ld c,0B3h ; ª®¯¨à. ¨§ ¡ãä¥à  ­  íªà ­
jp scrn4__
;-------------------------------------------------
; ‘¡à®á¨âì ¢ë¤¥«. 㪠§ â¥«ì ¢ £®à¨§. Œ¥­î
;-------------------------------------------------
ResBarI:ld a,(BarFlag)
or a
ret z
xor a
ld (BarFlag),a
; ᪮¯¨à. 㪠§ â¥«ì á íªà ­  ¢ ¡ãä¥à
ld ix,work_buffer
RBrIlen:ld hl,0 ; á®åà. è¨à¨­  㪠§ â¥«ï
RBrIpos:ld de,0 ; á®åà. ¯®«®¦. 㪠§ â¥«ï
ld a,l
push af
in a,(SLOT3) ; ¯®àâ
ld c,0B2h ; ª®¯¨à. á íªà ­  ¢ ¡ãä¥à
call scrn4__
ld a,(color_array+12) ; 梥⠣®à¨§. ¬¥­î
ld c,a
ld a,(color_array+14) ; 梥â hot-¡ãª¢ë £®à¨§. ¬¥­î
and 0Fh
ld b,a
pop af ;Reset LenX
; á¡à®á¨âì ¢ë¤¥«. 㪠§ â¥«ì ¢ ¡ãä¥à¥
ld hl,work_buffer ; ¡ãä¥à
ResInvB__:
ex af,af'
inc hl
ld a,(hl)
and 0Fh
cp b ; hot-¡ãª¢ ?
ld a,c
jr nz,$+5
and 0F0h
or b
ld (hl),a
inc hl
ex af,af'
dec a
jr nz,ResInvB__
; ¢ë¢¥á⨠á¡à®è¥­­ë© ¯ã­ªâ ­  íªà ­
ld ix,work_buffer
ld hl,(RBrIlen+1) ; à §¬¥àë ®ª­  (㪠§ â¥«ï)
ld de,(RBrIpos+1) ; Y/X ¯®«®¦.
in a,(SLOT3)
ld c,0B3h ; ª®¯¨à. ¨§ ¡ãä¥à  ­  íªà ­
jp scrn4__
;-------------------------------------------------
; “áâ ­®¢¨âì æ¢¥â hot-¡ãª¢ë ¢¥àâ. ¬¥­î
;-------------------------------------------------
Bhotkey1__:
ld a,(de)
ld (hl),a ; hot-¡ãª¢ã ¢ ¡ãä¥à
inc hl
inc de
push de
ld a,(color_array+17) ; 梥â hot-¡ãª¢ë ¬¥­î
and 0Fh
ld e,a
ld a,(color_array+15) ; 梥⠢¥àâ. ¬¥­î
and 0F0h
or e
ld (hl),a ;  âਡãâ
pop de
inc hl
ld a,(de)
inc de
inc b
ret
;-----------------------------------------------------------
; “áâ ­®¢¨âì ¢ë¤¥«. 㪠§ â¥«ì ¢¥àâ. ¬¥­î
;-----------------------------------------------------------
SetBoxI:ld a,(CurMBox)
dec a
;*6
add a,a ;1+1=2
ld c,a ;2
SetBoxI1:
add a,a ;2+2=4
add a,c ;4+2=6
ld hl,BoxTabl+4 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î + 4
add a,l
ld l,a
jr nc,$+3
inc h
ld e,(hl)
inc hl
ld a,(hl)
inc hl
ld d,(hl)
sub e ; Xi - Xo = LenX
ld l,a
ld h,1 ; ¢ëá®â 
ld (RBxIlen+1),hl
ld (RBxIpos+1),de
;
push af
ld ix,work_buffer
in a,(SLOT3)
ld c,0B2h
call scrn4__
ld a,(color_array+16) ; 梥â 㪠§ â¥«ï ¢¥àâ. ¬¥­î
ld c,a
ld a,(color_array+17) ; 梥â hot-¡ãª¢ë ¢¥àâ. ¬¥­î
and 0Fh
ld b,a
pop af ; LenX
; ¯®¤£®â®¢¨âì ¢ ¡ãä¥à¥ ¢ë¤¥«. 㪠§ â¥«ì
ld hl,work_buffer ; ¡ãä¥à
SetInvX__:
ex af,af'
inc hl
ld a,(hl)
and 0Fh
cp b ; hot-¡ãª¢ ?
ld a,c
jr nz,$+5
and 0F0h
or b
ld (hl),a
inc hl
ex af,af'
dec a
jr nz,SetInvX__
; ¢ë¢¥á⨠­  íªà ­ ¢ë¤¥«. ¯ã­ªâ ¬¥­î
ld ix,work_buffer ; ¡ãä¥à
ld hl,(RBxIlen+1)
ld de,(RBxIpos+1)
in a,(SLOT3)
ld c,0B3h
jp scrn4__
;-----------------------------------------------------------
; ‘¡à®á¨âì ¢ë¤¥«. 㪠§ â¥«ì ¢¥àâ. ¬¥­î
;-----------------------------------------------------------
ResBoxI:ld ix,work_buffer
RBxIlen:ld hl,0
RBxIpos:ld de,0
ld a,l
push af
in a,(SLOT3)
ld c,0B2h
call scrn4__
ld a,(color_array+15) ; 梥⠢¥àâ. ¬¥­î
ld c,a
ld a,(color_array+17) ; 梥â hot-¡ãª¢ë ¢¥àâ. ¬¥­î
and 0Fh
ld b,a
pop af
; á¡à®á¨âì 㪠§ â¥«ì ¢ ¡ãä¥à¥
ld hl,work_buffer ; ¡ãä¥à
ResInvX__:
ex af,af'
inc hl
ld a,(hl)
and 0Fh
cp b ; 梥â hot-¡ãª¢ë?
ld a,c
jr nz,$+5
and 0F0h
or b
ld (hl),a
inc hl
ex af,af'
dec a
jr nz,ResInvX__
; ¢ë¢¥á⨠á¡à®è¥­­ë© ¯ã­ªâ ­  íªà ­
ld ix,work_buffer
ld hl,(RBxIlen+1)
ld de,(RBxIpos+1)
in a,(SLOT3)
ld c,0B3h
jp scrn4__
;-----------------------------------------------------------
; ƒ« ¢­ë© 横« £®à¨§. Œ¥­î
;-----------------------------------------------------------
menu_exec:
call handle_event ; ç¨â ¥¬ ᮡë⨥
ld hl,what
ld de,menu_exec
push de
ld a,(hl) ;+0 ã§­ âì ᮡë⨥
inc hl
cp evMouseFr ; ­ ¦ âë ¡ãâ®­ë ¬ë誨
jp z,MBmouse
cp evKeyboard ; ­ ¦ âë ®¡ëç­ë¥ ª« ¢¨è¨
jr z,MBkeys
cp evCombKey ; ­ ¦ âë ªãàá. ª« ¢¨è¨ ¨ á«ã¦.
jr z,MBcbkey
ret
; ¢ë©â¨, ¥á«¨ ¬¥­î § ªàëâ®
MenuExt:ld a,(CurMBox) ; box open
or a
jp nz,CloseBx ; § ªàëâì ¢¥àâ. ¬¥­î
; ¢ë©â¨ ¨§ £®à¨§. ¬¥­î
MenuExit:
pop de ; ¢®ááâ. ¡ « ­á á⥪ 
ld hl,what
ld (hl),evNothing ; ãáâ. "­¥â ᮡë⨩"
ret
;-------------------------------------------------
; Ž¡ëç­ë¥ ª« ¢¨è¨ (¤«ï ¢¥àâ. ¬¥­î)
;-------------------------------------------------
MBkeys: ld a,(hl) ;+1 ª®¤ ª« ¢¨è¨
cp 1Bh ; Esc
jr z,MenuExt
cp 0Dh ; Enter
jr nz,MBkeysN
ld a,(CurMBox) ; if not box then open
or a
jp z,OpenBox ; ®âªàëâì ®ª­® ¢¥àâ. ¬¥­î
ld b,a
ld ix,BoxTabl-2 ; ¯®¨áª ¯ã­ªâ  ¢¥àâ. ¬¥­î
ld de,6
add ix,de
djnz $-2
jp BxEnter
;
MBkeysN:ld a,(CurMBox)
or a
ret z ; ¢¥àâ. ¬¥­î ­¥ ®âªàëâ®
inc hl
ld a,(hl) ;+2 ᪥­-ª®¤ ª« ¢¨è¨
ld ix,BoxTabl-2 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î - 2
ld bc,6
ld h,b
MBkeys1__:
inc h
add ix,bc
bit 7,(ix+0) ; ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
ret nz ; ¤ , hot-ª« ¢¨è  ­¥ ­ ©¤¥­ 
cp (ix+4) ; ᪥­-ª®¤ hot-ª« ¢¨è¨
jr nz,MBkeys1__
jp BxHotEx
;-----------------------------------------------------------
; Š« ¢¨è¨ ã¯à ¢«. ªãàá®à®¬ ¨ ª®¬¡¨­ æ¨¨ á hot-¡ãª¢ ¬¨
;-----------------------------------------------------------
MBcbkey:inc hl
ld a,(hl) ;+2 what
cp 58h ; ¢¢¥àå
jp z,MBup
cp 52h ; ¢­¨§
jp z,MBdown
cp 54h ; ¢«¥¢®
jp z,MBleft
cp 56h ; ¢¯à ¢®
jp z,MBright
cp 57h ; Home
jp z,MBhome
cp 51h ; End
jp z,MBend
cp 44h ; F10
jr z,MenuExt
; â¥áâ ­  ᪥­-ª®¤ë ¡ãª¢. ª« ¢¨è
ld ix,BarTabl-5 ; à ¡®ç ï â ¡«¨æ  £®à¨§. ¬¥­î
ld bc,5
ld h,b
MBcbLp: inc h ; ¯®¨áª hot-ª« ¢¨è¨
add ix,bc
bit 7,(ix+0) ; 80h ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
ret nz ; ­¥ ¢ë室¨âì ¨§ £®à¨§. ¬¥­î ¯® ­¥ ⮩ ª®¬¡. ª« ¢¨è
cp (ix+2) ; hot-ª« ¢¨è  ?
jr nz,MBcbLp ; ­¥â
ld a,(CurMenu) ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
cp h
jr nz,MBcbnxt
ld a,(CurMBox)
or a
ret nz ; ®ª­® ¬¥­î ®âªàëâ®
MBcbnxt:ld a,h
ld (CurMenu),a ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
call SetMBar
call ResBarI ; á¡à®á¨âì ¢ë¤¥«. 㪠§ â¥«ì
call SetBarI ; ¢ë¢¥á⨠¢ë¤¥«. 㪠§ â¥«ì
call ClosBox
jp OpenBox
; Šãàá®à ¢¢¥àå
MBup: ld a,(CurMBox)
or a
call z,OpenBox ; ®âªàëâì ¬¥­î
ld a,(CurMBox)
dec a
jr nz,MBupNxt
ld ix,BoxTabl-2 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î - 2
ld bc,6
ld a,b
dec a
MBupLp: inc a ; ¯®¨áª ¯®á«¥¤­¥£® í«¥¬¥­â 
add ix,bc
bit 7,(ix+0)
jr z,MBupLp
MBupNxt:ld (CurMBox),a
ld b,a
ld ix,BoxTabl-2 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î - 2
ld de,6
add ix,de
djnz $-2
push ix
call ResBoxI
call SetBoxI
pop ix
ret
; Šãàá®à ¢­¨§
MBdown: ld a,(CurMBox)
or a
jp z,OpenBox
inc a
ld ix,BoxTabl-2 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î - 2
ld bc,6
ld h,b ; â¥áâ ­  ¯®á«¥¤­¨© í«¥¬¥­â
MBdnLp: inc h
add ix,bc
bit 7,(ix+0)
jr z,MBdnLp
cp h
jr nz,$+4
ld a,1
jr MBupNxt
; Šãàá®à ¢«¥¢®
MBleft: ld a,(CurMenu) ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
dec a
jr nz,MBlfNxt
ld ix,BarTabl-5 ; à ¡®ç ï â ¡«¨æ  £®à¨§. ¬¥­î
ld bc,5
ld a,b
dec a
MBlfLp: inc a ; ¯®¨áª ¯®á«¥¤­¥£® ¯ã­ªâ 
add ix,bc
bit 7,(ix+0)
jr z,MBlfLp
MBlfNxt:ld (CurMenu),a ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
call ResBarI ; á¡à®á¨âì ¢ë¤¥«. 㪠§ â¥«ì
call SetBarI ; ¢ë¢¥á⨠¢ë¤¥«. 㪠§ â¥«ì
ld a,(CurMBox)
or a
ret z
call ClosBox
jp OpenBox
; Šãàá®à ¢¯à ¢®
MBright:ld a,(CurMenu) ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
inc a
ld ix,BarTabl-5 ; à ¡®ç ï â ¡«¨æ  £®à¨§. ¬¥­î
ld bc,5
ld h,b
MBrgLp: inc h ; ¯à®¢¥àª  ­  ¯®á«¥¤­¨© ¯ã­ªâ
add ix,bc
bit 7,(ix+0)
jr z,MBrgLp
cp h
jr nz,$+4
ld a,1
jr MBlfNxt
; Home
MBhome: ld a,(CurMBox)
or a
ret z
dec a
ret z
ld a,1
jp MBupNxt
; End
MBend: ld a,(CurMBox)
or a
ret z
ld h,a
ld ix,BoxTabl-2 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î - 2
ld bc,6
ld a,b
dec a
MBendLp:inc a ; ¯®¨áª ¯®á«¥¤­¥£® í«¥¬¥­â 
add ix,bc
bit 7,(ix+0)
jr z,MBendLp
cp h
ret z
jp MBupNxt
;-------------------------------------------------
; ‘®¡ëâ¨ï ¬ë誨
;-------------------------------------------------
MBmouse:ld e,(hl) ;+1 X coord
inc hl
ld d,(hl) ;+2 Y coord
ld a,d
or a
jr nz,MBmousB ; Y<>0 then test on Box Open
ld ix,BarTabl-5 ; à ¡®ç ï â ¡«¨æ  £®à¨§. ¬¥­î
ld bc,5
ld h,b
ld a,e ; ¯®¨áª ¯ã­ªâ  £®à¨§. ¬¥­î
MBmous1:inc h
add ix,bc
bit 7,(ix+0) ; ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
jp nz,CloseBx ; ¤ , § ªàëâì popup-¬¥­î
cp (ix+0)
jr c,MBmous1 ; < Xo
cp (ix+1)
jr nc,MBmous1 ; > Xi
ld a,(CurMenu) ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
cp h
jr nz,MBopenB
ld a,(CurMBox) ; Test on current open menu
or a
jp nz,SetMBar
MBopenB:ld a,h ; ¯ã­ªâ ­ ©¤¥­
ld (CurMenu),a ; ⥪. ¯®«®¦. 㪠§ â¥«ï £®à¨§. ¬¥­î
call SetMBar
call ClosBox
call ResBarI ; á¡à®á¨âì ¢ë¤¥«. 㪠§ â¥«ì
call SetBarI ; ¢ë¢¥á⨠¢ë¤¥«. 㪠§ â¥«ì
jp OpenBox
; <20>஢¥àª  ­  ª®®à¤¨­ âë ¬ë誨 ¨ ®ª­  ¢¥àâ. ¬¥­î
MBmousB:ld a,(CurMBox)
or a
jp z,MenuExit ; ­¥â ®âªà. popup-¬¥­î, ¢ë©â¨ ¢ ¬¥­¥¤¦¥à
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î
ld a,e
cp (ix+0)
jr c,MBoxExt ; < Xo
cp (ix+1)
jr nc,MBoxExt ; > Xi
ld a,d
cp (ix+2)
jr c,MBoxExt ; < Yo
cp (ix+3)
jr nc,MBoxExt ; > Yi
dec ix
dec ix
ld bc,6
ld h,b
MBloopB:inc h
add ix,bc
bit 7,(ix+0) ; ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
ret nz ; ¤ 
ld a,d
cp (ix+2)
jr nz,MBloopB
ld a,e ; ¯®¨áª ¯ã­ªâ  ¬¥­î
cp (ix+0)
jr c,MBloopB ; < Xo
cp (ix+1)
jr nc,MBloopB ; > Xi
BxHotEx:ld a,(CurMBox)
cp h
jr z,BxEnter ; ãáâ. ¯ã­ªâ ¬¥­î
ld a,h
ld (CurMBox),a
push ix
call ResBoxI
call SetBoxI
pop ix
halt
halt
halt
halt
; ¢ë¯®«­. ¯ã­ªâ  Pop-¬¥­î ¯® <Enter> ¨«¨ ¬ë誥
BxEnter:ld hl,what
ld (hl),evCommand ; ãáâ. ᮡë⨥ "ª®¬ ­¤ "
inc hl
ld a,(ix+3)
ld (hl),a ;+1 ­®¬¥à ª®¬ ­¤ë
call CloseBx ; § ªàëâì ¢¥àâ. ¬¥­î
pop de
ret ; ¢ë©â¨ ¨§ £®à¨§. ¬¥­î
MBoxExt:call ClosBox ; § ªàëâì ¢¥àâ. ¬¥­î
jp MenuExit ; ¢ë©â¨ ¢ ¬¥­¥¤¦¥à
;
CloseBx:call ClosBox ; § ªàëâì ¢¥àâ. ¬¥­î
jp get_fire
SetMBar:ld a,(BarFlag)
or a
ret nz
;call ResCurs
jp SetBarI
ResMBar:ld a,(BarFlag)
or a
ret z
jp ResBarI
;-----------------------------------------------------------
; Žâªàëâì ®ª­® ¢¥à⨪ «ì­®£® Œ¥­î
;
; ¢å®¤. ¯ à ¬¥âàë: (CurMenu) - Number MenuBox
;-----------------------------------------------------------
OpenBox:ld a,1
ld (CurMBox),a ; ­®¬¥à ¯ã­ªâ  ¢¥àâ. ¬¥­î
ld b,a ; ­ ç. ¢¥àå­ïï áâப  ®ª­ 
ld hl,BarTabl ; â ¡«. £®à¨§. ¬¥­î (¯®¨áª ­ ç «  ¬¥­î)
ld a,(CurMenu)
dec a
ld c,a ; *5
add a,a
add a,a
add a,c
add a,l
ld l,a
jr nc,$+3
inc h
;
PutMenu:push iy
ld iy,BoxTabl ; Generes MenuBox mouse table
ld ix,BoxData
ld a,(hl)
dec a
inc hl
ld (iy+0),a ; Xo position MenuBox
inc a
ld (ix+2),a ; Xo for element box
ld (iy+2),b ; Yo position MenuBox
ld (ix+4),b ; Temp Y posit for element box
inc hl
inc hl
ld a,(hl) ;  ¤à¥á ®¯¨á â¥«ï ⥪. ¬¥­î
ld (ix+0),a ; á®åà.  ¤à¥á ®¯¨á â¥«ï
inc hl
ld h,(hl)
ld (ix+1),h
ld l,a
call GetLenB ; get in DE len Y,X MenuBox
ld a,e ; Xi position MenuBox
sub 2
ld (ix+5),a ; è¨à¨­  ®ª­  ¡¥§ à ¬ª¨
ld a,e
add a,(iy+0)
ld (iy+1),a
dec a
ld (ix+3),a ; Xi for element box
ld a,d
add a,(iy+2) ; Yi position MenuBox
ld (iy+3),a
call SaveBox ; á®åà. íªà ­ ¯®¤ ¡ã¤ã騬 ®ª­®¬
;
in a,(SLOT3)
push af
ld a,(page_dial_screen) ; Page buffer
out (SLOT3),a
; ­ ç «® ¢áâ ¢ª¨ ®ª­  á ⥭ìî ¢ ¡ãä¥à
ld hl,LC000+MaxDialWin
ld bc,4
add iy,bc ;  ¤à¥á ®¯¨á â¥«ï ¢¥àâ. ¬¥­î
exx
ld hl,LC000
ld a,(ix+5) ; è¨à¨­  ®ª­ 
inc a
inc a
add a,a
ld e,a
ld d,0
add hl,de
exx
ld a,(color_array+15) ; 梥⠢¥àâ. ¬¥­î
ld c,a
; à ¬ª  ®ª­ 
ld (hl),"Ú" ; «¥¢ë© ¢¥àå. 㣮«
inc hl
ld (hl),c ; 梥â
inc hl
ld b,(ix+5) ; è¨à¨­  ®ª­ 
ld a,"Ä"
ld (hl),a
inc hl
ld (hl),c
inc hl
djnz $-4
ld (hl),"¿" ; ¯à ¢ë© ¢¥àå. 㣮«
inc hl
ld (hl),c
inc hl
ld b,3
call copy_cell
exx
ld a,(hl)
inc hl
add hl,de
exx
ld (hl),a
inc hl
ld e,(ix+0)
ld d,(ix+1)
; –¨ª« ¢ë¢®¤  ¯ã­ªâ®¢ ¬¥­î
MainPutBox:
inc (ix+4) ; 㢥«¨ç¨âì Y-¯®«®¦. ¯ã­ªâ  ¬¥­î
ld a,(de)
inc de
cp -2 ; à §¤¥«¨â¥«ì ?
jr nz,PutBln2
; ¢áâ ¢¨âì à §¤¥«¨â¥«ì ¯ã­ªâ®¢
ld (hl),"Ã"
inc hl
ld (hl),c
inc hl
ld b,(ix+5)
ld a,"Ä"
ld (hl),a
inc hl
ld (hl),c
inc hl
djnz $-4
ld (hl),"´"
jr PutBln51
;
PutBln2:cp -1 ; ª®­¥æ ®¯¨á â¥«ï ?
jp z,BoxExit ; ¤ 
ld b,a
ld a,(ix+2)
ld (iy+0),a
inc iy
ld a,(ix+3)
ld (iy+0),a
inc iy
ld a,(ix+4)
ld (iy+0),a
inc iy
ld a,b
ld (iy+0),a
inc iy
ld (hl),"³"
inc hl
ld (hl),c
inc hl
ld (PutBln4+1),hl ;  ¤à¥á ¬¥áâ  ¯®¤ ¬¥âªã "û"
ld b,2 ; 2 ¯à®¡¥«  ¢ ­ ç «¥ ¯ã­ªâ 
ld (hl)," "
inc hl
ld (hl),c
inc hl
djnz $-5
inc b ; b=1
ld a,(de)
PutBln3:inc de
cp "&"
call z,Bhotkey1__ ; ¢áâ ¢¨âì hot-¡ãª¢ã
ld (hl),a ; Put name element
inc hl
ld (hl),c
inc hl
inc b
ld a,(de)
or a ; ª®­¥æ ¨¬¥­¨ ?
jr nz,PutBln3
inc de
ld a,(de) ; ï祩ª  ᪥­-ª®¤  ¯ã­ªâ 
ld (iy+0),a ; ᪥­-ª®¤ hot-ª« ¢¨èë ¢ â ¡«¨æã
inc iy
inc de
ld a,(de) ; ï祩ª  ª®­â¥ªáâ 
inc de
ld (iy+0),a ; ¢áâ ¢¨âì ª®¤ ª®­â¥ªáâ 
; ¢áâ ¢¨âì ¬¥âªã ¯ã­ªâ  "û" (¥á«¨ ­ ¤®)
push hl
PutBln4:ld hl,0
or a
jr z,PutBln5
ld (hl),"û" ; ¯ã­ªâ "¯®-㬮«ç ­¨î"
PutBln5:pop hl
inc iy
ld a,(ix+5) ; è¨à¨­  ⥪. ¯ã­ªâ 
dec a
sub b
ld b,a
ld (hl)," " ; § ¯®«­¨âì ®áâ â®ª ¯ã­ªâ 
inc hl
ld (hl),c
inc hl
djnz $-5
ld (hl),"³"
PutBln51:
inc hl
ld (hl),c
inc hl
exx
ld a,(hl)
inc hl
inc hl
exx
ld (hl),a
inc hl
ld (hl),color_shadow ; 梥â ⥭¨
inc hl
exx
ld a,(hl)
inc hl
inc hl
add hl,de
exx
ld (hl),a
inc hl
ld (hl),color_shadow ; 梥â ⥭¨
inc hl
jp MainPutBox ; ­ § ¤ ¢ 横«
BoxExit:ld (iy+0),80h ; ª®­¥æ â ¡«¨æë
ld (hl),"À"
inc hl
ld (hl),c
inc hl
ld b,(ix+5)
ld a,"Ä"
ld (hl),a
inc hl
ld (hl),c
inc hl
djnz $-4
ld (hl),"Ù"
BoxExit__:
inc hl
ld (hl),c
inc hl
; ¢áâ ¢¨âì 2 ⥭¨ 㣫  "Ù"
ld b,2
call print_shadow
; ¢áâ ¢¨âì ­¨¦­îî ⥭ì
ld b,4
call copy_cell ; ᪮¯¨à. ï祩ª¨
ld b,(ix+5) ; Full Len box
inc b
inc b
call print_shadow
pop af
out (SLOT3),a
call PutBox
pop iy
jp SetBoxI ; Set box invert
; ᪮¯¨à®¢ âì ï祩ª¨ (b=áç¥â稪)
copy_cell:
exx
ld a,(hl)
inc hl
exx
ld (hl),a
inc hl
djnz copy_cell
ret
; ¢áâ ¢¨âì ⥭ì
print_shadow:
exx
ld a,(hl)
inc hl
inc hl
exx
ld (hl),a
inc hl
ld (hl),color_shadow ; 梥â ⥭¨
inc hl
djnz print_shadow
ret
;-----------------------------------------------------------
; ‚ëç¨á«¨âì è¨à¨­ã ⥪ã饣® ®ª­  ¢¥àâ. ¬¥­î
;
; ¢å®¤: hl=®¯¨á â¥«ì ¬¥­î
; ¢ë室: de=¢ëá®â /è¨à¨­  ®ª­ 
; (¤®à ¡®â ­ ª "è¨à¨­ +2" ¤«ï ¤®¯®«­. ªà ©­¨å ¯à®¡¥«®¢)
;----------------------------------------------------------
GetLenB:ld de,0206h
ld b,e
dec b
GetLnL1:ld a,(hl)
inc hl
cp -1 ; ª®­¥æ ®¯¨á â¥«ï ?
ret z
cp -2 ; à §¤¥«¨â¥«ì ¯ã­ªâ®¢ ?
jr z,AddLine
GetLnL2:inc b
GetLnL3:ld a,(hl)
inc hl
cp "&" ; ª ¢ë窠 hot-¡ãª¢ë ?
jr z,GetLnL3
or a ; ª®­¥æ ­ §¢ ­¨ï ¯ã­ªâ  ?
jr nz,GetLnL2 ; ­¥â
inc hl
inc hl ; ¯à®©â¨ ᪥­-ª®¤
ld a,b
cp e
jr c,AddLine
ld e,b
AddLine:inc d
ld b,5
jr GetLnL1
;-------------------------------------------------
; ‘®åà ­¨âì íªà ­ ¯®¤ ¡ã¤ã騬 ®ª­®¬
;-------------------------------------------------
SaveBox:push ix
inc e ; á ⥭ìî
inc e
inc d
ld l,(iy+0) ; ¯®§¨æ¨ï ®ª­ 
ld h,(iy+2)
ld a,l
add a,e
cp 80+2 ; §  ¯à¥¤¥«®¬ íªà ­  ?
jr c,GetBnxt
sub 80+2
ld l,a
ld a,(ix+2)
sub l
ld (ix+2),a
ld a,(ix+3)
sub l
ld (ix+3),a
ld a,(iy+0)
sub l
ld (iy+0),a
ld a,(iy+1)
sub l
ld (iy+1),a
ld a,80+2
sub e
ld l,a
GetBnxt:ld ix,LC000 ; Address Box buffers
ex de,hl
ld (BoxLen+1),hl
ld (BoxPos+1),de
ld a,(page_dial_screen) ; áâà. ¡ãä¥à 
ld c,0B2h
call scrn4__
pop ix
ret
;-------------------------------------------------
; ‚뢥á⨠®ª­® ¬¥­î ­  íªà ­
;-------------------------------------------------
PutBox: push ix
ld ix,LC000+MaxDialWin ; address Box buffers
BoxLen: ld hl,0 ; len box
BoxPos: ld de,0 ; pos box
ld a,(page_dial_screen) ; áâà. ¡ãä¥à 
ld c,0B3h
call scrn4__
pop ix
ret
;-------------------------------------------------
; ‡ ªàëâì ®ª­® ¬¥­î ¨ ¢®ááâ. íªà ­
;-------------------------------------------------
ClosBox:ld a,(CurMBox)
or a
ret z
ld ix,LC000 ; Address Box buffers
ld hl,(BoxLen+1) ; len box
ld de,(BoxPos+1) ; pos box
ld a,(page_dial_screen) ; Page buffer
ld c,0B3h
call scrn4__
xor a
ld (CurMBox),a
ret
; ”ã­ªæ¨ï ¢ë¢®¤  Œ¥­î ¢ë¡®à . Ž¡à ¡®â稪 ᮡë⨩ Œ¥­î ¢ë¡®à .
;-----------------------------------------------------------
; Žâà¨á®¢ª  ¬¥­î ¢ë¡®à 
;
; ¢å®¤: hl=â ¡«¨æ  ¬¥­î
; a=¯®«®¦. ¯ã­ªâ  ¬¥­î
;-----------------------------------------------------------
put_menu_select:
ld (CurMBox),a ; ­®¬¥à ¯ã­ªâ  ¬¥­î
push iy
ld iy,BoxTabl ; Generes MenuBox mouse table
ld ix,BoxData
ld a,(hl)
dec a
inc hl
ld b,(hl)
inc hl
ld (iy+0),a ; Xo position MenuBox
inc a
ld (ix+2),a ; Xo for element box
ld (iy+2),b ; Yo position MenuBox
ld (ix+4),b ; Temp Y posit for element box
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld (selmenu_title+1),de ;  ¤à¥á § £®«®¢ª  ®ª­ 
ld a,(hl) ;  ¤à¥á ®¯¨á â¥«ï ⥪. ¬¥­î
ld (ix+0),a ; á®åà.  ¤à¥á ®¯¨á â¥«ï
inc hl
ld h,(hl)
ld (ix+1),h
ld l,a
call GetLenB ; get in DE len Y,X MenuBox
inc e; ; ᤥ« âì ¯®-è¨à¥
ld a,e ; Xi position MenuBox
sub 2
ld (ix+5),a ; è¨à¨­  ®ª­  ¡¥§ à ¬ª¨
ld a,e
add a,(iy+0)
ld (iy+1),a
dec a
ld (ix+3),a ; Xi for element box
ld a,d
add a,(iy+2) ; Yi position MenuBox
ld (iy+3),a
call SaveBox ; á®åà. íªà ­ ¯®¤ ¡ã¤ã騬 ®ª­®¬
in a,(SLOT3)
push af
ld a,(page_dial_screen) ; Page buffer
out (SLOT3),a
; ­ ç «® ¢áâ ¢ª¨ ®ª­  á ⥭ìî ¢ ¡ãä¥à
ld hl,LC000+MaxDialWin
ld bc,4
add iy,bc ;  ¤à¥á ®¯¨á â¥«ï ¢¥àâ. ¬¥­î
exx
ld hl,LC000
ld a,(ix+5) ; è¨à¨­  ®ª­ 
inc a
inc a
add a,a
ld e,a
ld d,0
add hl,de
exx
ld a,(color_array+15) ; 梥⠢¥àâ. ¬¥­î
ld c,a
; 業â஢ª  § £®«®¢ª 
push hl
ld de,(selmenu_title+1) ;  ¤à¥á § £®«®¢ª  ®ª­ 
ld a,(de) ; ¤«¨­  § £®«®¢ª 
ld b,a
ld a,(ix+5) ; è¨à¨­  ®ª­ 
sub b
srl a ; /2
add a,a ; ãç¥áâì  âਡãâë (१ã«ìâ â ¢á¥£¤  ç¥â­ë©)
ld e,a
ld d,0
add hl,de
ld (selmenu_addr+1),hl ;  ¤à¥á ¢áâ ¢ª¨
pop hl
; à ¬ª  ®ª­ 
ld (hl),"É" ; «¥¢ë© ¢¥àå. 㣮«
inc hl
ld (hl),c ; 梥â
inc hl
ld b,(ix+5) ; è¨à¨­  ®ª­ 
ld a,"Í"
ld (hl),a
inc hl
ld (hl),c
inc hl
djnz $-4
ld (hl),"»" ; ¯à ¢ë© ¢¥àå. 㣮«
inc hl
ld (hl),c
inc hl
;
push hl
selmenu_title:
ld de,0 ;  ¤à¥á â¨â«  ®ª­ 
selmenu_addr:
ld hl,0 ;  ¤à¥á ¢áâ ¢ª¨
ld a,(de)
ld b,a ; ¤«¨­  áâப¨
inc de
ld (hl)," "
inc hl
inc hl
ld a,(de)
ld (hl),a
inc hl
inc hl ;  âਡãâ
inc de
djnz $-5
ld (hl)," "
pop hl
;
ld b,3
call copy_cell
exx
ld a,(hl)
inc hl
add hl,de
exx
ld (hl),a
inc hl
ld e,(ix+0)
ld d,(ix+1)
; 横« ¢ë¢®¤  ¯ã­ªâ®¢ ¬¥­î
selmenu_loop:
inc (ix+4) ; 㢥«¨ç¨âì Y-¯®«®¦. ¯ã­ªâ  ¬¥­î
ld a,(de)
inc de
cp -2 ; à §¤¥«¨â¥«ì
jr nz,selmenu1__
; ¢áâ ¢¨âì à §¤¥«¨â¥«ì ¯ã­ªâ®¢
ld (hl),"Ç"
inc hl
ld (hl),c
inc hl
ld b,(ix+5) ; è¨à¨­  ¯ã­ªâ 
ld a,"Ä"
ld (hl),a
inc hl
ld (hl),c
inc hl
djnz $-4
ld (hl),"¶"
jr selmenu3__
selmenu1__:
cp -1 ; ª®­¥æ ®¯¨á â¥«ï ?
jp z,selmenu4__ ; ¤ 
ld b,a
ld a,(ix+2)
ld (iy+0),a
inc iy
ld a,(ix+3)
ld (iy+0),a
inc iy
ld a,(ix+4)
ld (iy+0),a
inc iy
ld a,b
ld (iy+0),a
inc iy
ld (hl),"º"
inc hl
ld (hl),c
inc hl
ld b,2 ; 2 ¯à®¡¥«  ¢ ­ ç «¥ ¯ã­ªâ 
ld (hl)," "
inc hl
ld (hl),c
inc hl
djnz $-5
inc b ; b=1
ld a,(de)
selmenu2__:
inc de
cp "&"
call z,Bhotkey1__ ; ¢áâ ¢¨âì hot-¡ãª¢ã
ld (hl),a ; Put name element
inc hl
ld (hl),c
inc hl
inc b
ld a,(de)
or a ; ª®­¥æ ¨¬¥­¨ ?
jr nz,selmenu2__
inc de
ld a,(de) ; ï祩ª  ᪥­-ª®¤  ¯ã­ªâ 
ld (iy+0),a ; ᪥­-ª®¤ hot-ª« ¢¨èë ¢ â ¡«¨æã
inc iy
inc de
inc de ; ­¥ ¨á¯. ï祩ªã ª®­â¥ªáâ 
inc iy ;
ld a,(ix+5) ; è¨à¨­  ⥪. ¯ã­ªâ 
dec a
sub b
ld b,a
ld (hl)," " ; § ¯®«­¨âì ®áâ â®ª ¯ã­ªâ 
inc hl
ld (hl),c
inc hl
djnz $-5
ld (hl),"º"
selmenu3__:
inc hl
ld (hl),c
inc hl
exx
ld a,(hl)
inc hl
inc hl
exx
ld (hl),a
inc hl
ld (hl),color_shadow ; 梥â ⥭¨
inc hl
exx
ld a,(hl)
inc hl
inc hl
add hl,de
exx
ld (hl),a
inc hl
ld (hl),color_shadow ; 梥â ⥭¨
inc hl
jp selmenu_loop ; ­ § ¤ ¢ 横«
;
selmenu4__:
ld (iy+0),80h ; ª®­¥æ â ¡«¨æë
ld (hl),"È"
inc hl
ld (hl),c
inc hl
ld b,(ix+5)
ld a,"Í"
ld (hl),a
inc hl
ld (hl),c
inc hl
djnz $-4
ld (hl),"¼"
jp BoxExit__
;-----------------------------------------------------------
;
; Ž¡à ¡®â稪 ᮡë⨩ Œ¥­î ¢ë¡®à 
;
;-----------------------------------------------------------
event_menu_select:
call handle_event ; ç¨â ¥¬ ᮡë⨥
ld hl,what
ld de,event_menu_select
push de
ld a,(hl) ;+0 ã§­ âì ᮡë⨥
inc hl
cp evMouseFr ; ­ ¦ âë ¡ãâ®­ë ¬ë誨
jp z,sel_menu_mouse
cp evKeyboard ; ­ ¦ âë ®¡ëç­ë¥ ª« ¢¨è¨
jr z,sel_menu_keys
cp evCombKey ; ­ ¦ âë ªãàá. ª« ¢¨è¨ ¨ á«ã¦.
jr z,sel_menu_ckeys
ret
;
sel_menu_exit:
call CloseBx ; § ªàëâì ¬¥­î
pop de ; ¢®ááâ. ¡ « ­á á⥪ 
ld hl,what
ld (hl),evNothing ; "­¥â ᮡë⨩"
ret
;-------------------------------------------------
; Ž¡ëç­ë¥ ª« ¢¨è¨
;-------------------------------------------------
sel_menu_keys:
ld a,(hl) ;+1 ª®¤ ª« ¢¨è¨
cp 1Bh ; Esc
jr z,sel_menu_exit
cp 0Dh ; Enter
jr nz,sel_menu_keys1
ld a,(CurMBox) ; if not box then open
ld b,a
ld ix,BoxTabl-2 ; ¯®¨áª ¯ã­ªâ  ¢¥àâ. ¬¥­î
ld de,6
add ix,de
djnz $-2
jp BxEnter
;
sel_menu_keys1:
inc hl
ld a,(hl) ;+2 ᪥­-ª®¤ ª« ¢¨è¨
ld ix,BoxTabl-2 ; à ¡®ç ï â ¡«¨æ  ¢¥àâ. ¬¥­î - 2
ld bc,6
ld h,b
sel_menu_keys2:
inc h
add ix,bc
bit 7,(ix+0) ; ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
ret nz ; ¤ , hot-ª« ¢¨è  ­¥ ­ ©¤¥­ 
cp (ix+4) ; ᪥­-ª®¤ hot-ª« ¢¨è¨
jr nz,sel_menu_keys2
jp BxHotEx
;-------------------------------------------------
; Š« ¢¨è¨ ã¯à ¢«. ªãàá®à®¬ ¨ F10
;-------------------------------------------------
sel_menu_ckeys:
inc hl
ld a,(hl) ;+2 what
cp 44h ; F10
jr z,sel_menu_exit
cp 58h ; ¢¢¥àå
jp z,MBup
cp 52h ; ¢­¨§
jp z,MBdown
cp 54h ; ¢«¥¢®
jp z,MBup
cp 56h ; ¢¯à ¢®
jp z,MBdown
cp 57h ; Home
jp z,MBhome
cp 51h ; End
jp z,MBend
ret
;-------------------------------------------------
; ‘®¡ëâ¨ï ¬ë誨
;-------------------------------------------------
sel_menu_mouse:
ld e,(hl) ;+1 X coord
inc hl
ld d,(hl) ;+2 Y coord
; ¯à®¢¥àª  ­  ª®®à¤. ¬ë誨 ¨ ®ª­ 
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ 
ld a,e
cp (ix+0)
jp c,sel_menu_exit ; < Xo
cp (ix+1)
jp nc,sel_menu_exit ; > Xi
ld a,d
cp (ix+2)
jp c,sel_menu_exit ; < Yo
cp (ix+3)
jp nc,sel_menu_exit ; > Yi
dec ix
dec ix
ld bc,6
ld h,b
selmenu_mouse_loop:
inc h
add ix,bc
bit 7,(ix+0) ; ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
ret nz ; ¤ 
ld a,d
cp (ix+2)
jr nz,selmenu_mouse_loop
ld a,e ; ¯®¨áª ¯ã­ªâ  ¬¥­î
cp (ix+0)
jr c,selmenu_mouse_loop ; < Xo
cp (ix+1)
jr nc,selmenu_mouse_loop ; > Xi
jp BxHotEx
;-------------------------------------------------
; <20> áâனª  "û" ¬¥â®ª ¯ã­ªâ®¢ ¬¥­î
;-------------------------------------------------
prep_default_puncts:
ld c,CTdef ; "û" ¯®-㬮«ç ­¨î ¢ë¤¥«¥­®
ld a,CTnodef ; " " ¯®-㬮«ç ­¨î ­¥ ¢ë¤¥«¥­®
; ‘¡à®á¨âì ¯ã­ªâë
; Left-¬¥­î
ld (LBrief),a
ld (LMed),a
ld (LFull),a
ld (LInfo),a
ld (LQview),a
; á®àâ¨à®¢ª 
ld (LName),a
ld (LExt),a
ld (LDate),a
ld (LSize),a
ld (LUnsort),a
; Right-¬¥­î
ld (RBrief),a
ld (RMed),a
ld (RFull),a
ld (RInfo),a
ld (RQview),a
; á®àâ¨à®¢ª 
ld (RName),a
ld (RExt),a
ld (RDate),a
ld (RSize),a
ld (RUnsort),a
; <20> áâநâì ¯ã­ªâë
ld hl,LFull
ld a,(format_mode) ; ä®à¬ â  ªâ. ¯ ­¥«¨
bit 0,a ; full
jr nz,prep_default1__
ld hl,LMed
bit 1,a ; medium
jr nz,prep_default1__
ld hl,LBrief
bit 2,a ; brief
jr nz,prep_default1__
ld hl,LInfo
bit 3,a ; info
jr nz,prep_default1__
ld hl,LQview ; qview
prep_default1__:
ld (hl),c
; á®àâ¨à®¢ª 
ld hl,LName
ld a,(sort_type) ; á®àâ.  ªâ. ¯ ­¥«¨
cp "n"
jr z,prep_default2__
ld hl,LExt
cp "x"
jr z,prep_default2__
ld hl,LDate
cp "d"
jr z,prep_default2__
ld hl,LSize
cp "s"
jr z,prep_default2__
ld hl,LUnsort
prep_default2__:
ld (hl),c
; Right-¬¥­î
ld hl,RFull
ld a,(format_mode1) ; ä®à¬ â ¯ áá. ¯ ­¥«¨
bit 0,a ; full
jr nz,prep_default3__
ld hl,RMed
bit 1,a ; medium
jr nz,prep_default3__
ld hl,RBrief
bit 2,a ; brief
jr nz,prep_default3__
ld hl,RInfo
bit 3,a ; info
jr nz,prep_default3__
ld hl,RQview ; qview
prep_default3__:
ld (hl),c
; á®àâ¨à®¢ª 
ld hl,RName
ld a,(sort_type1) ; á®àâ. ¯ áá. ¯ ­¥«¨
cp "n"
jr z,prep_default4__
ld hl,RExt
cp "x"
jr z,prep_default4__
ld hl,RDate
cp "d"
jr z,prep_default4__
ld hl,RSize
cp "s"
jr z,prep_default4__
ld hl,RUnsort
prep_default4__:
ld (hl),c
ret