File-Manager/OBJS/UMENU.ASM
2025-04-04 00:37:36 +10:00

615 lines
12 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.

; #C000+#2800=#E800
; <20>ãä¥àë User-¤ ­­ëå
array_user1 equ 0E800h ; 26*2 ¬ áᨢ 㪠§. ­  ª®¬-áâப¨
array_user2 equ array_user1+(26*2) ; 72*56 ®¯¨á â¥«ì ¯ã­ªâ®¢ ¬¥­î
; + 1 ¡ ©â ¯®¤ ª®­¥æ ®¯¨á â¥«ï
array_user3 equ array_user2+(72*26)+1 ; 71*26 ¬ áᨢ ª®¬-áâப
; ®áâ â®ª ¡ ­ª¨ ¯®á«¥ ¢á¥£® ¬ áᨢ  #0944 ¡ ©â.
;-----------------------------------------------------------
; ‚ë§®¢ Œ¥­î <20>®«ì§®¢ â¥«ï
;-----------------------------------------------------------
user_menu:
ld a,(enable_mnu_file) ; ä« £ ­ «¨ç¨ï mnu-ä ©« 
or a
ret z ; ­¥â
ld hl,user_table ; ®¯¨á â¥«ì ¬¥­î (mod1)
call put_user_menu ; ®âà¨á®¢ª  ¬¥­î
call get_fire ; § é¨â  ®â "§ «¨¯ ­¨ï" ¡ãâ®­®¢
call event_user_menu ; ®¡à ¡®â稪 ᮡë⨩ ¬¥­î
;
ld hl,what
ld a,(hl)
cp evCommand
ret nz
ld (hl),evRunComLine ; ᮡë⨥ "®âà ¡®â âì ª®¬-áâபã"
jp get_fire
;-----------------------------------------------------------
; <20>à®à¨á®¢ª  ¬¥­î ¯®«ì§®¢ â¥«ï.
; <20>®«®¦¥­¨¥ ¬¥­î ®¯à¥¤¥«ï¥âáï è¨à¨­®© ¨ ç¨á«®¬ ¯ã­ªâ®¢.
; ’ ¡«¨æ  ¬¥­î:
; <20>®«®¦¥­¨¥ ®ª­  ¬¥­î:
; +0 - Xo «¥¢ë© ªà ©
; +1 - Xi ¯à ¢ë© ªà ©
; +2 - Yo «¥¢ë© 㣮«
; +3 - Yi ¯à ¢ë© 㣮«
; +4 - <20>®«®¦¥­¨¥ ¯ã­ªâ  ¬¥­î:
; +0 - Xo «¥¢®¥
; +1 - Xi ¯à ¢®¥
; +2 - Y ¯®«®¦.
; +3 - hot-¡ãª¢ 
;-----------------------------------------------------------
; ¢å®¤: hl=®¯¨á â¥«ì ¬¥­î
;-----------------------------------------------------------
put_user_menu:
ld a,1
ld (CurMBox),a ; ­®¬¥à ¯ã­ªâ  ¬¥­î
push iy
ld iy,BoxTabl ; Generes MenuBox mouse table
ld ix,BoxData
ld a,(page_sys_screen) ; áâà. user-¤ ­­ëå
out (SLOT3),a
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld (usermenu_title+1),de ;  ¤à¥á § £®«®¢ª  ®ª­ 
ld a,(hl) ;  ¤à¥á ®¯¨á â¥«ï ⥪. ¬¥­î
ld (ix+0),a ; á®åà.  ¤à¥á ®¯¨á â¥«ï
inc hl
ld h,(hl)
ld (ix+1),h ;
ld l,a
call GetLenB1 ; get in DE len Y,X MenuBox
; X 業â஢ª  ¬¥­î
ld a,80 ; è¨à¨­  ®ª­ 
sub e
srl a ; /2
ld (iy+0),a ; Xo ¯®«®¦. ®ª­  ¬¥­î
ld b,a
inc a
ld (ix+2),a ; Xo ¯®«®¦. ¯ã­ªâ  ¬¥­î
ld a,e ; è¨à¨­  ®ª­  (¡¥§ ⥭¨)
sub 2
ld (ix+5),a ; è¨à¨­  ®ª­  ¡¥§ à ¬ª¨
ld a,e
add a,b ; + Xo ¯®«®¦. ®ª­  ¬¥­î
ld (iy+1),a ; X ¯à ¢ë© ªà © ®ª­  ¬¥­î
dec a
ld (ix+3),a ; Xi ¯à ¢ë© ªà © ¯ã­ªâ  ¬¥­î
; Y 業â஢ª  ¬¥­î
ld a,30 ; ¢ëá®â  ®ª­ 
sub d
srl a ; /2
ld (iy+2),a ; Yo ¯®«®¦. ®ª­  ¬¥­î
ld (ix+4),a ; Temp Y posit for element box
ld b,a
ld a,d ; ¢ëá®â  ®ª­  (¡¥§ ⥭¨)
add a,b ; Yi (+ Y ¯®«®¦. ®ª­  ¬¥­î)
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,(usermenu_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 (usermenu_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
usermenu_title:
ld de,0 ;  ¤à¥á â¨â«  ®ª­ 
usermenu_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) ;; de= ¤à¥á ᯨ᪠ ¯ã­ªâ®¢
ld d,(ix+1)
; 横« ¢ë¢®¤  ¯ã­ªâ®¢ ¬¥­î
usermenu_loop:
inc (ix+4) ; 㢥«¨ç¨âì Y-¯®«®¦. ¯ã­ªâ  ¬¥­î
call get_user_byte ; ¢§ïâì ¡ ©â ¨§ áâà. user-¤ ­­ëå
cp -2 ; à §¤¥«¨â¥«ì
jr nz,usermenu1__
; ¢áâ ¢¨âì à §¤¥«¨â¥«ì ¯ã­ªâ®¢
inc de
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 usermenu3__
usermenu1__:
cp -1 ; ª®­¥æ ®¯¨á â¥«ï ?
jp z,usermenu4__ ; ¤ 
ld a,(ix+2)
ld (iy+0),a ;+0 Xo coord
inc iy
ld a,(ix+3)
ld (iy+0),a ;+1 Xi coords
inc iy
ld a,(ix+4)
ld (iy+0),a ;+2 Y coords
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
call get_user_byte ; ¢§ïâì ¡ ©â ¨§ áâà. user-¤ ­­ëå
usermenu2__:
inc de
cp "&"
call z,Bhotkey2__ ; ¢áâ ¢¨âì hot-¡ãª¢ã
ld (hl),a ; Put name element
inc hl
ld (hl),c
inc hl
inc b
call get_user_byte ; ¢§ïâì ¡ ©â ¨§ áâà. user-¤ ­­ëå
or a ; ª®­¥æ ¨¬¥­¨ ?
jr nz,usermenu2__
inc de ; de=ï祩ª  ᪥­-ª®¤  ¯ã­ªâ 
call get_user_byte ; ¢§ïâì ¡ ©â ¨§ áâà. user-¤ ­­ëå
ld (iy+0),a ;+3 ᪥­-ª®¤ hot-ª« ¢¨è¨
inc iy
inc de
ld a,(ix+5) ; è¨à¨­  ⥪. ¯ã­ªâ 
dec a
sub b
ld b,a
ld (hl)," " ; § ¯®«­¨âì ®áâ â®ª ¯ã­ªâ 
inc hl
ld (hl),c
inc hl
djnz $-5
ld (hl),"º"
usermenu3__:
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 usermenu_loop ; ­ § ¤ ¢ 横«
;
usermenu4__:
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),"¼"
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 USetBoxI ; Set box invert
;-------------------------------------------------
; “áâ ­®¢¨âì æ¢¥â hot-¡ãª¢ë ¯ã­ªâ  user-¬¥­î
;-------------------------------------------------
Bhotkey2__:
call get_user_byte ; ¢§ïâì ¡ ©â ¨§ áâà. user-¤ ­­ëå
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
call get_user_byte ; ¢§ïâì ¡ ©â ¨§ áâà. user-¤ ­­ëå
inc de
inc b
ret
;-----------------------------------------------------------
; ‚ëç¨á«¨âì è¨à¨­ã ⥪ã饣® ®ª­  ¢¥àâ. ¬¥­î
;
; ¢å®¤: hl=®¯¨á â¥«ì ¬¥­î
; ¢ë室: de=¢ëá®â /è¨à¨­  ®ª­ 
;----------------------------------------------------------
GetLenB1:
ld de,0207h ; Y/X à §¬¥àë
ld b,e
dec b
GetL1: ld a,(hl)
inc hl
cp -1 ; ª®­¥æ ®¯¨á â¥«ï ?
ret z
cp -2 ; à §¤¥«¨â¥«ì ¯ã­ªâ®¢ ?
jr z,AddLn
GetL2: inc b
GetL3: ld a,(hl)
inc hl
cp "&" ; hot-¡ãª¢ 
jr z,GetL3
or a ; ª®­¥æ ­ §¢ ­¨ï ¯ã­ªâ  ?
jr nz,GetL2 ; ­¥â
inc hl ; ¯à®©â¨ ᪥­-ª®¤
ld a,b
cp e
jr c,AddLn
ld e,b
AddLn: inc d
ld b,6 ; b=e-1
jr GetL1
; ‚§ïâì ¡ ©â ¨§ áâà ­¨æë user-¤ ­­ëå
; ¢å®¤: de= ¤à¥á ¤ ­­ëå
get_user_byte:
in a,(SLOT3)
push af
ld a,(page_sys_screen) ; áâà. user-¤ ­­ëå
out (SLOT3),a
ld a,(de)
ex af,af'
pop af
out (SLOT3),a ; ¢®ááâ. áâà.
ex af,af'
ret
;-----------------------------------------------------------
;
; Ž¡à ¡®â稪 ᮡë⨩ Œ¥­î <20>®«ì§®¢ â¥«ï
;
;-----------------------------------------------------------
event_user_menu:
call handle_event ; ç¨â ¥¬ ᮡë⨥
ld hl,what
ld de,event_user_menu
push de
ld a,(hl) ;+0 ã§­ âì ᮡë⨥
inc hl
cp evMouseFr ; ­ ¦ âë ¡ãâ®­ë ¬ë誨
jp z,user_menu_mouse
cp evKeyboard ; ­ ¦ âë ®¡ëç­ë¥ ª« ¢¨è¨
jr z,user_menu_keys
cp evCombKey ; ­ ¦ âë ªãàá. ª« ¢¨è¨ ¨ á«ã¦.
jr z,user_menu_ckeys
ret
;
user_menu_exit:
call CloseBx ; § ªàëâì ¬¥­î
pop de ; ¢®ááâ. ¡ « ­á á⥪ 
ld hl,what
ld (hl),evNothing ; "­¥â ᮡë⨩"
ret
;-------------------------------------------------
; Ž¡ëç­ë¥ ª« ¢¨è¨
;-------------------------------------------------
user_menu_keys:
ld a,(hl) ;+1 ª®¤ ª« ¢¨è¨
cp 1Bh ; Esc
jr z,user_menu_exit
cp 0Dh ; Enter
jr nz,user_menu_keys1
ld a,(CurMBox)
ld b,a
ld ix,BoxTabl ; ¯®¨áª ¯ã­ªâ  ¬¥­î
ld de,4
add ix,de
djnz $-2
jp UBxEnt
;
user_menu_keys1:
inc hl
ld a,(hl) ;+2 ᪥­-ª®¤ ª« ¢¨è¨
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ  ¬¥­î
ld bc,4
ld h,b
user_menu_keys2:
inc h
add ix,bc
bit 7,(ix+0)
ret nz ; ª®­¥æ â ¡«¨æë ¯ã­ªâ®¢
cp (ix+3) ; ᪥­-ª®¤ hot-ª« ¢¨è¨
jr nz,user_menu_keys2
jp UBxHotEx
;-------------------------------------------------
; Šãàá®à­ë¥ ª« ¢¨è¨ ¨ F10
;-------------------------------------------------
user_menu_ckeys:
inc hl
ld a,(hl) ;+2 what
cp 44h ; F10
jr z,user_menu_exit
cp 58h ; ¢¢¥àå
jr z,UMBup
cp 52h ; ¢­¨§
jr z,UMBdown
cp 54h ; ¢«¥¢®
jr z,UMBhome
cp 56h ; ¢¯à ¢®
jr z,UMBend
cp 59h ; PageUp
jr z,UMBhome
cp 53h ; PageDown
jr z,UMBend
cp 57h ; Home
jr z,UMBhome
cp 51h ; End
jr z,UMBend
ret
; Šãàá®à ¢¢¥àå
UMBup: ld a,(CurMBox)
dec a
jr nz,UMBupNxt
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ  ¬¥­î
ld bc,4
ld a,b
dec a
UMBupLp:inc a ; ¯®¨áª ¯®á«¥¤­¥£® í«¥¬¥­â 
add ix,bc
bit 7,(ix+0)
jr z,UMBupLp
UMBupNxt:
ld (CurMBox),a
ld b,a
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ  ¬¥­î
ld de,4
add ix,de
djnz $-2
push ix
call ResBoxI
call USetBoxI
pop ix
ret
; Šãàá®à ¢­¨§
UMBdown:ld a,(CurMBox)
inc a
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ  ¬¥­î
ld bc,4
ld h,b ; â¥áâ ­  ¯®á«¥¤­¨© í«¥¬¥­â
UMBdnLp:inc h
add ix,bc
bit 7,(ix+0)
jr z,UMBdnLp
cp h
jr nz,$+4
; Home ¢ ­ ç «® ᯨ᪠
UMBhome:ld a,1
jr UMBupNxt
; End ¢ ª®­¥æ ᯨ᪠
UMBend: ld a,(CurMBox)
ld h,a
ld ix,BoxTabl ; à ¡®ç ï â ¡«¨æ  ¬¥­î
ld bc,4
ld a,b
dec a
UMBendLp:
inc a ; ¯®¨áª ¯®á«¥¤­¥£® í«¥¬¥­â 
add ix,bc
bit 7,(ix+0)
jr z,UMBendLp
cp h
jr nz,UMBupNxt
ret
;-------------------------------------------------
; ‘®¡ëâ¨ï ¬ë誨
;-------------------------------------------------
user_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,user_menu_exit ; < Xo
cp (ix+1)
jp nc,user_menu_exit ; > Xi
ld a,d
cp (ix+2)
jp c,user_menu_exit ; < Yo
cp (ix+3)
jp nc,user_menu_exit ; > Yi
ld bc,4
ld h,b
usermenu_mouse_loop:
inc h
add ix,bc
bit 7,(ix+0) ; ª®­¥æ ®¯¨á â¥«ï ¬¥­î ?
ret nz ; ¤ 
ld a,d
cp (ix+2)
jr nz,usermenu_mouse_loop
ld a,e ; ¯®¨áª ¯ã­ªâ  ¬¥­î
cp (ix+0)
jr c,usermenu_mouse_loop ; < Xo
cp (ix+1)
jr nc,usermenu_mouse_loop ; > Xi
UBxHotEx:
ld a,(CurMBox)
cp h
jr z,UBxEnt ; ãáâ. ¯ã­ªâ ¬¥­î
ld a,h
ld (CurMBox),a
push af
call ResBoxI
call USetBoxI
pop af
halt
halt
halt
halt
; ¢ë¯®«­. ¯ã­ªâ  ¯® <Enter> ¨«¨ ¬ë誥
UBxEnt: dec a
ld hl,what
ld (hl),evCommand ; ãáâ. ᮡë⨥ "ª®¬ ­¤ "
; ᪮¯¨à. ª®¬-áâப㠢 ¡ãä¥à
add a,a
ld e,a
ld d,0
ld a,(page_sys_screen);; ; áâà. user-¤ ­­ëå
out (SLOT3),a;;
ld hl,array_user1 ; â ¡«¨æ  㪠§ â¥«¥© ­  ª®¬-áâப¨
add hl,de
ld e,(hl)
inc hl
ld d,(hl)
ex de,hl ; hl=®âªã¤ 
ld de,work_buffer+127;255 ; ªã¤ 
call copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; § ªàëâì ¬¥­î
call CloseBx
pop de
ret ; ¢ë©â¨ ¨§ ¬¥­î
;-------------------------------------------------
; ˆ­¢¥àâ¨à®¢ ­¨¥ ¯ã­ªâ  ¬¥­î
;-------------------------------------------------
USetBoxI:
ld c,0
ld a,(CurMBox)
dec a
add a,a ;1+1=2
jp SetBoxI1