📄 guikeys.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.
; GUI Keyboard Routines
%macro GUIqcheckkeys 1
cmp byte[pressed+%1],1
jne %%skip
mov dword[GUIfirstkey],1
%%skip
%endmacro
%macro GUIqcheckkeys2 2
mov eax,%1
cmp byte[pressed+eax],1
jne %%skip
cmp byte[GUIJoyPadnk+%2],2
je %%skip
mov dword[GUIfirstkey],1
%%skip
%endmacro
%macro GUIgetprkeys 2
cmp byte[pressed+%1],1
je %%okay
cmp byte[pressed+%1],2
jne %%nopr
cmp dword[GUIfirstkey],1
je %%nopr
cmp dword[GUIlastkey],%1
jne %%nopr
jmp %%skipnext
%%okay
mov dword[GUInextkeydelay],10
%%skipnext
mov dword[GUIlastkey],%1
mov byte[pressed+%1],2
cmp dword[GUIkeydelay],0
jne near .done
mov eax,[GUInextkeydelay]
mov [GUIkeydelay],eax
mov dword[GUInextkeydelay],2
mov eax,%2
jmp .done
%%nopr
%endmacro
%macro GUIgetprkeysb 2
cmp byte[pressed+%1],1
jne %%nopr
cmp byte[GUIescpress],1
je %%nopr2
mov byte[pressed+%1],2
mov eax,%2
jmp .done
%%nopr
cmp byte[pressed+%1],0
jne %%nopr2
mov byte[GUIescpress],0
%%nopr2
%endmacro
%macro GUIgetprkeys2 3
mov ebx,%1
cmp byte[pressed+ebx],0
jne %%pressed
mov byte[GUIJoyPadnk+%3],0
jmp %%nopr
%%pressed
cmp byte[GUIJoyPadnk+%3],2
je %%secondpress
cmp byte[pressed+ebx],1
je %%okay
%%secondpress
cmp dword[GUIfirstkey],1
je %%nopr
cmp dword[GUIlastkey],ebx
jne %%nopr
jmp %%skipnext
%%okay
mov dword[GUInextkeydelay],10
%%skipnext
mov [GUIlastkey],ebx
mov byte[GUIJoyPadnk+%3],2
cmp dword[GUIkeydelay],0
jne near .done
mov eax,[GUInextkeydelay]
mov [GUIkeydelay],eax
mov byte[GUIDelayB],5
mov dword[GUInextkeydelay],2
mov eax,%2
jmp .done
%%nopr
%endmacro
GUIfirstkey dd 0
GUIlastkey dd 0
NEWSYM GUIkeydelay, dd 0
NEWSYM GUIkeydelay2, dd 0
GUInextkeydelay dd 0
GUIJoyPadnk db 0,0,0,0,0,0,0,0
NEWSYM GUIDelayB, db 0
UseExtKey db 0
GUIgetcurrentinput:
cmp byte[HoldCommand],2
jne .nohold
ret
.nohold
mov byte[UseExtKey],0
xor ch,ch
xor cl,cl
.getnextkey
call Check_Key
or al,al
jz .nokeyd
call Get_Key
cmp cl,0
jne .nostorekey
mov ch,al
.nostorekey
xor cl,cl
cmp al,0
jne .noextkey
call Get_Key
mov [UseExtKey],al
xor al,al
mov ch,al
mov cl,1
.noextkey
; jmp .getnextkey
.nokeyd
mov dh,ch
mov byte[GUIDelayB],0
; Convert pressed to keys
mov dword[GUIfirstkey],0
%ifdef __LINUX___
GUIqcheckkeys 90 ; UP
GUIqcheckkeys 96 ; DOWN
GUIqcheckkeys 92 ; LEFT
GUIqcheckkeys 94 ; RIGHT
GUIqcheckkeys 89 ; HOME
GUIqcheckkeys 91 ; PGUP
GUIqcheckkeys 95 ; END
GUIqcheckkeys 97 ; PGDOWN
%endif
GUIqcheckkeys 72 ; NUMPAD STUFF
GUIqcheckkeys 80
GUIqcheckkeys 75
GUIqcheckkeys 77
GUIqcheckkeys 73
GUIqcheckkeys 81
GUIqcheckkeys 71
GUIqcheckkeys 79
GUIqcheckkeys 1
GUIqcheckkeys 1Ch
; cmp byte[OSPort],3
; jne near .notwinport
%ifndef __MSDOS__
GUIqcheckkeys 0C8h
GUIqcheckkeys 0D0h
GUIqcheckkeys 0CBh
GUIqcheckkeys 0CDh
GUIqcheckkeys 0C9h
GUIqcheckkeys 0D1h
GUIqcheckkeys 0C7h
GUIqcheckkeys 0CFh
GUIqcheckkeys 09Ch
%endif
.notwinport
cmp byte[JoyPad1Move],0
je near .nopad1
push edx
call JoyRead
pop edx
GUIqcheckkeys2 [pl1upk],0
GUIqcheckkeys2 [pl1downk],1
GUIqcheckkeys2 [pl1leftk],2
GUIqcheckkeys2 [pl1rightk],3
GUIqcheckkeys2 [pl1Lk],4
GUIqcheckkeys2 [pl1Rk],5
GUIqcheckkeys2 [pl1Bk],6
GUIqcheckkeys2 [pl1Ak],7
.nopad1
xor al,al
%ifdef __LINUX__
GUIgetprkeys 90,90 ; UP
GUIgetprkeys 96,96 ; DOWN
GUIgetprkeys 92,92 ; LEFT
GUIgetprkeys 94,94 ; RIGHT
GUIgetprkeys 89,89 ; HOME
GUIgetprkeys 91,91 ; PGUP
GUIgetprkeys 95,95 ; END
GUIgetprkeys 97,97 ; PGDOWN
GUIgetprkeys 72,72 ; KP8
GUIgetprkeys 80,80 ; KP2
GUIgetprkeys 75,75 ; KP4
GUIgetprkeys 77,77 ; KP6
GUIgetprkeys 71,71 ; KP7
GUIgetprkeys 79,79 ; KP9
GUIgetprkeys 81,81 ; KP1
GUIgetprkeys 73,73 ; KP3
%else
; GUIgetprkeys 72,72
; GUIgetprkeys 80,80
GUIgetprkeys 75,75
GUIgetprkeys 77,77
GUIgetprkeys 71,71
GUIgetprkeys 79,79
GUIgetprkeys 81,81
GUIgetprkeys 73,73
%endif
GUIgetprkeysb 1,27
GUIgetprkeys 1Ch,13
mov cl,[UseExtKey]
cmp cl,72
je .okayextk
cmp cl,80
jne .notextkb
.okayextk
mov al,cl
.notextkb
; cmp byte[OSPort],3
; jne near .notwinport2
%ifdef __LINUX__
GUIgetprkeys 90,90 ; UP
GUIgetprkeys 96,96 ; DOWN
GUIgetprkeys 92,92 ; LEFT
GUIgetprkeys 94,94 ; RIGHT
GUIgetprkeys 89,89 ; HOME
GUIgetprkeys 91,91 ; PGUP
GUIgetprkeys 95,95 ; END
GUIgetprkeys 97,97 ; PGDOWN
GUIgetprkeys 72,72 ; KP8
GUIgetprkeys 80,80 ; KP2
GUIgetprkeys 75,75 ; KP4
GUIgetprkeys 77,77 ; KP6
GUIgetprkeys 71,71 ; KP7
GUIgetprkeys 79,79 ; KP9
GUIgetprkeys 81,81 ; KP1
GUIgetprkeys 73,73 ; KP3
GUIgetprkeys 09Ch,13 ; ENTER
%endif
%ifdef __WIN32__
GUIgetprkeys 0CBh,75
GUIgetprkeys 0CDh,77
GUIgetprkeys 0C9h,73
GUIgetprkeys 0D1h,81
GUIgetprkeys 0C7h,71
GUIgetprkeys 0CFh,79
GUIgetprkeys 09Ch,13
%endif
;.notwinport2
cmp byte[JoyPad1Move],0
je near .nopad1b
GUIgetprkeys2 [pl1upk],72,0
GUIgetprkeys2 [pl1downk],80,1
GUIgetprkeys2 [pl1leftk],75,2
GUIgetprkeys2 [pl1rightk],77,3
GUIgetprkeys2 [pl1Lk],73,4
GUIgetprkeys2 [pl1Rk],81,5
GUIgetprkeys2 [pl1Bk],27,6
GUIgetprkeys2 [pl1Ak],13,7
.nopad1b
cmp dh,' '
jne .notspace
mov al,' '
.notspace
mov dword[GUInextkeydelay],10
mov dword[GUIkeydelay],0
.done
cmp byte[GUIcmenupos],0
jne near .processmenu
mov dl,al
xor eax,eax
mov al,[GUIwinptr]
cmp dl,27
jne .noclosewin
or eax,eax
jz near .runprog
.noclosewin
dec eax
xor ebx,ebx
mov bl,[GUIwinorder+eax]
cmp ebx,8
jne near .nonetwin
cmp byte[CNetType],12
jne .noprocess7
cmp byte[ModemProcess],7
jne .noprocess7
cmp dh,13
je .ret
cmp dh,32
jb .noprocess7
.ret
mov al,dh
call ModemSendChar
ret
.noprocess7
cmp dl,27
jne .nonetwin
cmp byte[CNetType],2
je .yesnetwin
cmp byte[CNetType],3
je .yesnetwin
cmp byte[CNetType],10
je .yesnetwin
cmp byte[CNetType],11
je .yesnetwin
cmp byte[CNetType],12
je .yesnetwin
cmp byte[CNetType],15
je .yesnet15
jmp .nonetwin
.yesnet15
mov byte[CNetType],0
; cmp byte[OSPort],1
; je .nodeinitipx
call deinitipx
.nodeinitipx
jmp .closewin
.yesnetwin
cmp byte[ModemInitStat],0
je .nodeinitmodem
call DeInitModemC
mov byte[ModemInitStat],0
.nodeinitmodem
mov byte[CNetType],1
ret
.nonetwin
cmp ebx,13
jne .notcskeys
cmp byte[CheatWinMode],1
ja .avoidesc
.notcskeys
cmp dl,27
je near .closewin
.avoidesc
mov al,dl
cmp ebx,1
je near GUILoadKeys
cmp ebx,2
je near GUIStateSelKeys
cmp ebx,4
je near GUIOptionKeys
cmp ebx,6
je near GUISoundKeys
cmp ebx,7
je near GUICheatKeys
cmp ebx,10
je near GUIGUIOptnsKeys
cmp ebx,12
je near GUIResetKeys
cmp ebx,13
je near GUICheatSearchKeys
cmp ebx,14
je near GUIStateKeys
cmp ebx,16
je near GUIComboKeys
cmp ebx,8
jne .notstartmenu
cmp byte[CNetType],4
jne .notcpip
jmp GUITCPIPKeys
.notcpip
cmp byte[CNetType],1
jne .notstartmenu
jmp GUINetMenuKeys1
.notstartmenu
cmp ebx,8
je near GUIGetInputLine
ret
.runprog
cmp byte[romloadskip],0
jne .noquit
mov byte[GUIQuit],2
.noquit
ret
.closewin
; close window
mov byte[GUIwinorder+eax],0
mov byte[GUIwinactiv+ebx],0
dec byte[GUIwinptr]
cmp byte[GUIwinptr],0
jne .nowinopen
mov al,[GUIpmenupos]
mov [GUIcmenupos],al
.nowinopen
ret
.processmenu
cmp dh,'a'
jb .nolower
cmp dh,'z'
ja .nolower
sub dh,'a'-'A'
.nolower
cmp byte[GUIcmenupos],1
jne near .noquickmenu
cmp dh,'1'
jne .no1
mov byte[GUIcrowpos],0
.no1
cmp dh,'2'
jne .no2
mov byte[GUIcrowpos],1
.no2
cmp dh,'3'
jne .no3
mov byte[GUIcrowpos],2
.no3
cmp dh,'4'
jne .no4
mov byte[GUIcrowpos],3
.no4
cmp dh,'5'
jne .no5
mov byte[GUIcrowpos],4
.no5
cmp dh,'6'
jne .no6
mov byte[GUIcrowpos],5
.no6
cmp dh,'7'
jne .no7
mov byte[GUIcrowpos],6
.no7
cmp dh,'8'
jne .no8
mov byte[GUIcrowpos],7
.no8
cmp dh,'9'
jne .no9
mov byte[GUIcrowpos],8
.no9
cmp dh,'0'
jne .no0
mov byte[GUIcrowpos],9
.no0
cmp dh,'F'
jne .nof
mov byte[GUIcrowpos],11
.nof
cmp dh,'C'
jne .noc
mov byte[GUIcrowpos],12
.noc
.noquickmenu
cmp byte[GUIcmenupos],2
jne near .noloadmenu
cmp dh,'L'
jne .nol
mov byte[GUIcrowpos],0
.nol
cmp dh,'R'
jne .nor
mov byte[GUIcrowpos],2
.nor
cmp dh,'S'
jne .nos
mov byte[GUIcrowpos],4
.nos
cmp dh,'O'
jne .noo
mov byte[GUIcrowpos],5
.noo
cmp dh,'P'
jne .nop
mov byte[GUIcrowpos],6
.nop
cmp dh,'Q'
jne .noq
mov byte[GUIcrowpos],8
.noq
.noloadmenu
cmp byte[GUIcmenupos],4
jne near .nocheatmenu
cmp dh,'A'
jne .noa
mov byte[GUIcrowpos],0
.noa
cmp dh,'B'
jne .nob
mov byte[GUIcrowpos],1
.nob
cmp dh,'S'
jne .nos2
mov byte[GUIcrowpos],2
.nos2
.nocheatmenu
cmp byte[romloadskip],0
jne .dontquit
cmp al,27
jne .noexit
mov byte[GUIQuit],2
.noexit
.dontquit
cmp al,13
jne .noenter
call GUITryMenuItem
.noenter
%ifdef __LINUX__
cmp al,92
je .leftpressed
cmp dword[numlockptr],1
je .noleft
cmp al,75
jne .noleft
.leftpressed
%else
cmp al,75
jne .noleft
%endif
mov byte[GUIcrowpos],0
cmp byte[GUIcmenupos],1
jbe .left
dec byte[GUIcmenupos]
jmp .noleft
.left
mov byte[GUIcmenupos],6
.noleft
%ifdef __LINUX__
cmp al,94
je .rightpressed
cmp dword[numlockptr],1
je .noright
cmp al,77
jne .noright
.rightpressed
%else
cmp al,77
jne .noright
%endif
mov byte[GUIcrowpos],0
inc byte[GUIcmenupos]
cmp byte[GUIcmenupos],7
jne .noright
mov byte[GUIcmenupos],1
.noright
cmp byte[GUIcmenupos],0
je near .noupdown
%ifdef __LINUX__
cmp al,96
je .downpressed
cmp dword[numlockptr],1
je .nodown
cmp al,80
jne .nodown
.downpressed
%else
cmp al,80
jne .nodown
%endif
xor eax,eax
mov al,[GUIcrowpos]
mov ebx,[GUICYLocPtr]
cmp byte[eax+ebx+1],2
jne .nobottom
mov byte[GUIcrowpos],0
jmp .nokey
.nobottom
inc eax
cmp byte[eax+ebx+1],0
je .nobottom
mov [GUIcrowpos],al
jmp .nokey
.nodown
%ifdef __LINUX__
cmp al, 90
je .uppressed
cmp dword[numlockptr],1
je .noup
cmp al,72
jne .noup
.uppressed
%else
cmp al,72
jne .noup
%endif
xor eax,eax
mov al,[GUIcrowpos]
mov ebx,[GUICYLocPtr]
or al,al
jz .top
cmp byte[eax+ebx+1],3
jne .notop
.top
mov al,[ebx]
mov byte[GUIcrowpos],al
jmp .nokey
.notop
dec eax
cmp byte[eax+ebx+1],0
je .notop
mov [GUIcrowpos],al
jmp .nokey
.noup
.noupdown
.nokey
ret
GUITCPIPKeys:
;GUINetTextk2 db ' 0. 0. 0. 0',0
;GUINetTextl2 db '7845',0
;GUINetTextm2 db 0,0,0
cmp byte[GUINetTextm2],1
je near .section2
mov edi,GUINetTextk2
mov esi,26
cmp byte[GUINetTextm2],2
jne .notsecondstring
mov edi,ChatNick
mov esi,9
.notsecondstring
mov ebx,edi
.next
cmp byte[ebx],0
je .done2
inc ebx
jmp .next
.done2
sub ebx,edi
mov [GUINetTextm2+1],bl
xor eax,eax
mov al,[GUINetTextm2+1]
shl al,2
add al,2
cmp dh,32
jbe .notnum2
cmp byte[GUINetTextm2],0
je .notsecondstringb
cmp dh,'_'
je .notsecondstringb
cmp dh,'-'
je .notsecondstringb
cmp dh,'^'
je .notsecondstringb
cmp dh,'='
je .notsecondstringb
cmp dh,'+'
je .notsecondstringb
cmp dh,'['
je .notsecondstringb
cmp dh,']'
je .notsecondstringb
cmp dh,'0'
jb .notnum2
cmp dh,'9'
jbe .notsecondstringb
cmp dh,'A'
jb .notnum2
cmp dh,'Z'
jbe .notsecondstringb
cmp dh,'a'
jb .notnum2
cmp dh,'z'
jbe .notsecondstringb
.notsecondstringb
cmp ebx,esi
jae near .donesection1
add ebx,edi
mov byte[ebx],dh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -