📄 guiwindp.inc
字号:
;Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either
;version 2 of the License, or (at your option) any later
;version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;GNU General Public License for more details.
;
;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
; Window Display Routines
; Last button value used = 65
GUIStringGreater:
; compares string at esi to edi and returns 1 to al if esi is >, else 0
push esi
cmp word[esi],'.'
je .less
cmp word[esi+32],'.'
je .greater
cmp word[esi],'..'
je .less
cmp word[esi+32],'..'
je .greater
.nextchar
cmp byte[esi],0
je .less
cmp byte[esi+32],0
je .greater
mov al,[esi]
mov cl,[esi+32]
cmp al,'a'
jb .noucase1
cmp al,'z'
ja .noucase1
sub al,'z'-'Z'
.noucase1
cmp cl,'a'
jb .noucase2
cmp cl,'z'
ja .noucase2
sub cl,'z'-'Z'
.noucase2
cmp al,cl
jb .less
ja .greater
inc esi
jmp .nextchar
.less
mov al,0
jmp .skip
.greater
mov al,1
.skip
pop esi
ret
GUIStringGreater2:
; compares string at ebx to edx and returns 1 to al if esi is >, else 0
push edx
push ebx
cmp word[ebx],'.'
je .less
cmp word[edx],'.'
je .greater
cmp word[ebx],'..'
je .less
cmp word[ebx],'..'
je .greater
.nextchar
cmp byte[ebx],0
je .less
cmp byte[edx],0
je .greater
mov al,[ebx]
mov cl,[edx]
cmp al,'a'
jb .noucase1
cmp al,'z'
ja .noucase1
sub al,'z'-'Z'
.noucase1
cmp cl,'a'
jb .noucase2
cmp cl,'z'
ja .noucase2
sub cl,'z'-'Z'
.noucase2
cmp al,cl
jb .less
ja .greater
inc ebx
inc edx
jmp .nextchar
.less
mov al,0
jmp .skip
.greater
mov al,1
.skip
pop ebx
pop edx
ret
%Macro DrawGUILineSc 2
mov dword[GUIcolscaleval],%2
mov edx,%1
push eax
push ecx
call GUIHLines
pop ecx
pop eax
inc ebx
%Endmacro
%Macro DrawGUILine 0
push eax
push ecx
call GUIHLine
pop ecx
pop eax
inc ebx
%Endmacro
%macro DrawTitleBar 0
mov edx,46+157+6
sub edx,[GUIWincoladd]
DrawGUILine
mov edx,42+157+4+4
sub edx,[GUIWincoladd]
DrawGUILine
dec edx
DrawGUILine
dec edx
DrawGUILine
dec edx
DrawGUILine
dec edx
DrawGUILine
dec edx
DrawGUILine
dec edx
DrawGUILine
dec edx
DrawGUILine
mov edx,38+157+4
sub edx,[GUIWincoladd]
DrawGUILine
sub ebx,10
mov edx,44+157+4
sub edx,[GUIWincoladd]
mov esi,9
push ecx
mov ecx,eax
%%loop2
DrawGUILine
dec esi
jnz %%loop2
pop ecx
sub ebx,8
mov edx,40+157+4
sub edx,[GUIWincoladd]
mov esi,9
push eax
mov eax,ecx
%%loop3
DrawGUILine
dec esi
jnz %%loop3
pop eax
%endmacro
%macro drawshadow2 3
mov edx,[GUIwinposy+%1*4]
cmp edx,223
jg near .noshadow
cmp edx,0
jge .noshadclip
mov edx,0
.noshadclip
mov ebx,edx
add ebx,%3
add ebx,9
cmp ebx,0
jl near .noshadow
cmp ebx,223
jng .noshadclip2
mov ebx,223
.noshadclip2
sub ebx,edx
inc ebx
mov edi,edx
shl edi,8
mov eax,edx
shl eax,5
add edi,eax
mov edx,[GUIwinposx+%1*4]
mov ecx,edx
cmp edx,255
jg .noshadow
cmp edx,-3
jnl .noshadclip3
mov edx,-3
.noshadclip3
add ecx,%2
cmp ecx,0
jl .noshadow
cmp ecx,255
jng .noshadclip4
mov ecx,255
.noshadclip4
sub ecx,edx
inc ecx
add edi,edx
add edi,[vidbuffer]
add edi,288*3+3+16
call GUIDrawShadow2
.noshadow
%endmacro
%macro GUIDrawWindowBox 2
mov dword[GUIWincoladd],4
mov dword[GUIWincol],148+10
cmp byte[cwindrawn],1
jne .noone
mov dword[GUIWincol],148+5
.noone
cmp byte[cwindrawn],0
jne .nozero
mov dword[GUIWincoladd],0
mov dword[GUIWincol],148
.nozero
drawshadow2 %1,dword[GUIwinsizex+%1*4],dword[GUIwinsizey+%1*4]
mov eax,dword[GUIwinposx+%1*4]
mov ebx,dword[GUIwinposy+%1*4]
mov ecx,eax
add ecx,dword[GUIwinsizex+%1*4]
DrawTitleBar
mov esi,dword[GUIwinsizey+%1*4]
dec esi
mov edx,dword[GUIWincol]
add edx,2
.loop
DrawGUILine
dec esi
jnz .loop
mov edx,dword[GUIWincol]
DrawGUILine
mov eax,dword[GUIwinposx+%1*4]
mov ebx,dword[GUIwinposy+%1*4]
add ebx,10
mov ecx,eax
mov esi,dword[GUIwinsizey+%1*4]
mov edx,dword[GUIWincol]
add edx,3
dec esi
.loop2
DrawGUILine
dec esi
jnz .loop2
mov eax,dword[GUIwinposx+%1*4]
mov ebx,dword[GUIwinposy+%1*4]
add ebx,10
add eax,dword[GUIwinsizex+%1*4]
mov ecx,eax
mov esi,dword[GUIwinsizey+%1*4]
mov edx,dword[GUIWincol]
add edx,1
.loop3
DrawGUILine
dec esi
jnz .loop3
mov ebx,dword[GUIwinposy+%1*4]
add ebx,3
mov edx,dword[GUIwinposx+%1*4]
add edx,3
mov byte[GUItextcolor],184
GUIOuttextwin %2
mov ebx,dword[GUIwinposy+%1*4]
add ebx,2
mov edx,dword[GUIwinposx+%1*4]
add edx,2
mov byte[GUItextcolor],220
cmp byte[GUIWincoladd],0
je .zero2
sub byte[GUItextcolor],6
.zero2
GUIOuttextwin %2
mov eax,dword[GUIwinposx+%1*4]
mov ebx,dword[GUIwinposy+%1*4]
add eax,dword[GUIwinsizex+%1*4]
sub eax,10
GUIDisplayIcon GUIIconDataClose
%endmacro
%macro DrawGUIWinBox 6
mov eax,dword[GUIwinposx+%1*4]
mov ebx,dword[GUIwinposy+%1*4]
add eax,%2
add ebx,%3
mov ecx,eax
add ecx,%4-%2+1
mov dl,%6
mov esi,%5-%3+1
%%loop
DrawGUILine
dec esi
jnz %%loop
%endmacro
%macro DrawGUIWinBox2 5
mov eax,dword[GUIwinposx+%1*4]
add eax,%2
mov ecx,eax
add ecx,%3-%2+1
mov dl,%5
cmp byte[GUIWincoladd],0
je %%zero
inc dl
%%zero
mov esi,%4
add ebx,dword[GUIwinposy+%1*4]
%%loop
DrawGUILine
dec esi
jnz %%loop
%endmacro
%macro DrawGUIWinBox3 6
mov ecx,%4
mov eax,dword[GUIwinposx+%1*4]
mov ebx,dword[GUIwinposy+%1*4]
add eax,%2
add ebx,%3
add ecx,eax
sub ecx,%2
inc ecx
mov dl,%6
mov esi,%5-%3+1
%%loop
DrawGUILine
dec esi
jnz %%loop
%endmacro
%macro DrawGUIButton 9
mov dl,byte[GUItextcolor]
sub dl,5
cmp byte[GUICBHold],%7
jne %%noa
sub dl,13
%%noa
DrawGUIWinBox %1,%2,%3,%4,%3,dl
sub dl,3
cmp byte[GUICBHold],%7
jne %%nob
add dl,5
%%nob
DrawGUIWinBox %1,%2,%3,%2,%5,dl
sub dl,3
cmp byte[GUICBHold],%7
jne %%noc
add dl,5
%%noc
DrawGUIWinBox %1,%2+1,%3+1,%4-2,%5-2,dl
sub dl,3
cmp byte[GUICBHold],%7
jne %%nod
add dl,5
%%nod
DrawGUIWinBox %1,%4+1,%3+1,%4-2,%5-2,dl
sub dl,3
cmp byte[GUICBHold],%7
jne %%noe
add dl,5
%%noe
DrawGUIWinBox %1,%2,%5,%4-1,%5,dl
cmp byte[GUICBHold],%7
je near %%no2
sub byte[GUItextcolor],15
GUIOuttextwin2 %1,%2+5+%8,%3+4+%9,%6
add byte[GUItextcolor],15
GUIOuttextwin2 %1,%2+4+%8,%3+3+%9,%6
jmp %%yes
%%no2
sub byte[GUItextcolor],18
GUIOuttextwin2 %1,%2+6+%8,%3+5+%9,%6
add byte[GUItextcolor],15
GUIOuttextwin2 %1,%2+5+%8,%3+4+%9,%6
add byte[GUItextcolor],3
%%yes
%endmacro
%macro GUIOuttextwin2load 3
test dword[cloadnleft],80000000h
jnz %%skip
cmp byte[GUIloadfntype],0
jne %%nottype0
mov eax,[cloadnposb]
mov eax,[spcRamcmp+eax*4]
inc eax
mov [cloadnpos],eax
inc dword[cloadnposb]
%%nottype0
GUIOuttextwin2l %1,%2,%3,[cloadnpos]
add dword[cloadnpos],32
dec dword[cloadnleft]
%%skip
%endmacro
%macro GUIDisplayButtonHole 5
mov dword[GUITemp],GUIIconDataButtonHole
cmp %4,%5
jne %%nofill
mov dword[GUITemp],GUIIconDataButtonFill
%%nofill
GUIDisplayIconWin %1,%2,%3,[GUITemp]
%endmacro
; DGUIDisplay
DisplayGUILoad:
GUIDrawWindowBox 1,GUILoadDisp
cmp byte[GUIWincoladd],0
je .zero
mov byte[GUItextcolor],211
.zero
sub byte[GUItextcolor],15
; cmp byte[OSPort],2
; jae near .noloadtypeb
%ifdef __MSDOS__
GUIOuttextwin2 1,21,166,GUILoadText3
GUIOuttextwin2 1,21,174,GUILoadText4
GUIOuttextwin2 1,21,182,GUILoadText5
%endif
.noloadtypeb
GUIOuttextwin2 1,21,192,GUILoadText6
GUIOuttextwin2 1,6,16,GUILoadText7
GUIOuttextwin2 1,161,16,GUILoadText8
GUIOuttextwin2 1,6,138,GUIcurrentdir
mov dword[cloadmaxlen],39
cmp dword[GUIcurrentfilewin],0
jne .nofiles
; cmp byte[OSPort],2
; jb .nofiles
%ifndef __MSDOS__
mov eax,[GUIcurrentcursloc]
mov eax,[spcRamcmp+eax*4]
inc eax
mov [cloadnpos],eax
GUIOuttextwin2l 1,6,158,[cloadnpos]
%endif
.nofiles
add byte[GUItextcolor],15
; cmp byte[OSPort],2
; jae near .noloadtypec
%ifdef __MSDOS__
GUIOuttextwin2 1,20,165,GUILoadText3
GUIOuttextwin2 1,20,173,GUILoadText4
GUIOuttextwin2 1,20,181,GUILoadText5
%endif
.noloadtypec
GUIOuttextwin2 1,20,191,GUILoadText6
GUIOuttextwin2 1,5,15,GUILoadText7
GUIOuttextwin2 1,160,15,GUILoadText8
GUIOuttextwin2 1,5,137,GUIcurrentdir
mov dword[cloadmaxlen],39
cmp dword[GUIcurrentfilewin],0
jne .nofilesb
; cmp byte[OSPort],2
; jb .nofilesb
%ifndef __MSDOS__
mov eax,[GUIcurrentcursloc]
mov eax,[spcRamcmp+eax*4]
inc eax
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -