📄 guikeys.inc
字号:
cmp al,'A'
jae .letter
sub al,'0'
jmp .num
.lowletter
sub al,'a'-10
jmp .num
.letter
sub al,'A'-10
.num
mov ah,[GUICheatText9+1]
cmp ah,'a'
jae .lowletter2
cmp ah,'A'
jae .letter2
sub ah,'0'
jmp .num2
.lowletter2
sub ah,'a'-10
jmp .num2
.letter2
sub ah,'A'-10
.num2
shl al,4
and ah,0Fh
or al,ah
mov [esi+1],al
mov word[GUICheatText9],0
pushad
call EnableCheatCodeNoPrevMod
popad
jmp .noret
.nocodemod
inc dword[GUIcurrentcheatwin]
mov byte[GUICCFlash],0
.noret
cmp dh,8
jne .nobacksp
mov byte[GUICCFlash],0
dec byte[GUICheatPosA]
xor eax,eax
mov al,[GUICheatPosA]
mov byte[GUICheatText9+eax],'_'
mov byte[GUICheatText9+eax+1],0
ret
.nobacksp
cmp dh,0
je .nochar
cmp dh,13
je .nochar
cmp dh,8
je .nochar
cmp dh,9
je .nochar
cmp byte[GUICheatPosA],14
je .nochar
mov byte[GUICCFlash],0
xor eax,eax
mov al,[GUICheatPosA]
mov byte[GUICheatText9+eax],dh
mov byte[GUICheatText9+eax+1],'_'
mov byte[GUICheatText9+eax+2],0
inc byte[GUICheatPosA]
.nochar
ret
.textboxb
cmp dh,13
jne .noretb
mov byte[GUICCFlash],0
jmp ProcessCheatCode
.noretb
cmp byte[GUICheatPosB],0
je .nobackspb
cmp dh,8
jne .nobackspb
mov byte[GUICCFlash],0
dec byte[GUICheatPosB]
xor eax,eax
mov al,[GUICheatPosB]
mov byte[GUICheatTextA+eax],'_'
mov byte[GUICheatTextA+eax+1],0
ret
.nobackspb
cmp dh,0
je .nocharb
cmp dh,13
je .nocharb
cmp dh,8
je .nocharb
cmp byte[GUICheatPosB],18
je .nocharb
xor eax,eax
mov byte[GUICCFlash],0
mov al,[GUICheatPosB]
mov byte[GUICheatTextA+eax],dh
mov byte[GUICheatTextA+eax+1],'_'
mov byte[GUICheatTextA+eax+2],0
inc byte[GUICheatPosB]
.nocharb
ret
%macro CompareKeyMacro 3
cmp dh,%1
jne %%skip
mov byte[%2],%3
%%skip
%endmacro
InsertSearchCharacter:
push edx
push eax
; Send character into CSInputDisplay
; Find location
mov ecx,CSInputDisplay
.next
cmp byte[ecx],0
je .found
cmp byte[ecx],'_'
je .found
inc ecx
jmp .next
.found
; Delete if necessary
cmp dh,8
jne .notdelete
cmp ecx,CSInputDisplay
je near .done
dec ecx
jmp .placecursor
.notdelete
cmp ecx,CSInputDisplay+10
je near .done
; Add character if necessary
cmp dh,'0'
jb near .done
cmp dh,'9'
jbe .okay
cmp byte[CheatSrcByteBase],0
je near .done
cmp dh,'F'
ja near .done
cmp dh,'A'
jb near .done
.okay
mov byte[ecx],dh
inc ecx
; Process cursor if over the window
.placecursor
mov byte[ecx],'_'
mov byte[ecx+1],0
mov byte[CSOverValue],0
; Find overall value and delete if over
mov ecx,CSInputDisplay
mov ebx,10
cmp byte[CheatSrcByteBase],0
je .dec
mov ebx,16
.dec
xor eax,eax
.next2
cmp byte[ecx],0
je .found2
cmp byte[ecx],'_'
je .found2
mul ebx
or edx,edx
jz .notoverflow
mov byte[CSOverValue],1
.notoverflow
xor edx,edx
mov dl,[ecx]
cmp dl,'A'
jb .below
sub dl,'A'-10-'0'
.below
sub dl,'0'
add eax,edx
jnc .notoverflowb
mov byte[CSOverValue],1
.notoverflowb
inc ecx
jmp .next2
.found2
xor ebx,ebx
mov bl,[CheatSrcByteSize]
mov ebx,[SrcMask+ebx*4]
mov [CSCurValue],eax
cmp eax,ebx
jbe .done
mov byte[CSOverValue],1
.done
pop eax
pop edx
ret
CSOverValue db 0
CSCurValue dd 0
InsertSearchDescription:
mov eax,CSDescDisplay
xor dl,dl
.next
cmp byte[eax],0
je .fin
inc eax
inc dl
jmp .next
.fin
or dl,dl
jz .nobackspb
cmp dh,8
jne .nobackspb
mov byte[eax-1],0
ret
.nobackspb
cmp dh,0
je .nocharb
cmp dh,13
je .nocharb
cmp dh,8
je .nocharb
cmp dl,18
je .nocharb
mov byte[eax],dh
mov byte[eax+1],0
.nocharb
ret
GUICheatSearchKeys:
cmp dh,'a'
jb .nocap
cmp dh,'z'
ja .nocap
sub dh,'z'-'Z'
.nocap
cmp byte[CheatWinMode],3
je near .add
cmp byte[CheatWinMode],2
je near .view
cmp byte[CheatWinMode],1
je near .search
CompareKeyMacro '1',CheatSrcByteSize,0
CompareKeyMacro '2',CheatSrcByteSize,1
CompareKeyMacro '3',CheatSrcByteSize,2
CompareKeyMacro '4',CheatSrcByteSize,3
CompareKeyMacro 'D',CheatSrcByteBase,0
CompareKeyMacro 'H',CheatSrcByteBase,1
CompareKeyMacro 'E',CheatSrcSearchType,0
CompareKeyMacro 'C',CheatSrcSearchType,1
cmp dh,13
je .start
cmp dh,'S'
jne .notstart
.start
call CheatCodeSearchInit
ret
.notstart
ret
.search
cmp byte[CheatSrcSearchType],1
je .compare
call InsertSearchCharacter
jmp .nomovedown
.compare
cmp dh,','
je .lessthan
cmp dh,'<'
jne .notlessthan
.lessthan
mov byte[CheatCompareValue],0
.notlessthan
cmp dh,'.'
je .greaterthan
cmp dh,'>'
jne .notgreaterthan
.greaterthan
mov byte[CheatCompareValue],1
.notgreaterthan
cmp dh,'='
je .equalthan
cmp dh,'+'
jne .notequalthan
.equalthan
mov byte[CheatCompareValue],2
.notequalthan
cmp dh,'N'
jne .notnotequalthan
mov byte[CheatCompareValue],3
.notnotequalthan
%ifdef __LINUX__
cmp al,90
je .yesmoveup
cmp dword[numlockptr],1
je .nomoveup
cmp al,72
jne .nomoveup
.yesmoveup
%else
cmp al,72
jne .nomoveup
%endif
cmp byte[CheatCompareValue],0
je .nomoveup
dec byte[CheatCompareValue]
.nomoveup
%ifdef __LINUX__
cmp al,96
je .yesmovedown
cmp dword[numlockptr],1
je .nomovedown
cmp al,80
jne .nomovedown
.yesmovedown
%else
cmp al,80
jne .nomovedown
%endif
cmp byte[CheatCompareValue],3
je .nomovedown
inc byte[CheatCompareValue]
.nomovedown
cmp dh,'R'
jne .notrestart
mov byte[CheatWinMode],0
mov byte[CheatSearchStatus],0
.notrestart
cmp dh,'V'
jne .notview
mov byte[CheatWinMode],2
.notview
cmp dh,13
je .searchprocess
cmp dh,'S'
jne .nosearchprocess
.searchprocess
cmp byte[CheatSearchStatus],1
je .nosearchprocess
call CheatCodeSearchProcess
.nosearchprocess
ret
.view
cmp dword[NumCheatSrc],0
jne .nozero
cmp dh,27
je .yesret
cmp dh,'R'
jne .notreturnb
.yesret
mov byte[CheatWinMode],1
.notreturnb
ret
.nozero
%ifdef __LINUX__
cmp al,89
je .yeshome
cmp dword[numlockptr],1
je .nohome
cmp al,71
jne .nohome
.yeshome
%else
cmp al,71
jne .nohome
%endif
mov dword[GUIcurrentchtsrccursloc],0
mov dword[GUIcurrentchtsrcviewloc],0
ret
.nohome
%ifdef __LINUX__
cmp al,95
je .yesendp
cmp dword[numlockptr],1
je .noendp
cmp al,79
jne .noendp
.yesendp
%else
cmp al,79
jne .noendp
%endif
mov eax,[NumCheatSrc]
dec eax
mov dword[GUIcurrentchtsrccursloc],eax
sub eax,11
mov dword[GUIcurrentchtsrcviewloc],eax
test dword[GUIcurrentchtsrcviewloc],8000000h
jz .posve
mov dword[GUIcurrentchtsrcviewloc],0
.posve
ret
.noendp
%ifdef __LINUX__
cmp al,90
je .up
cmp dword[numlockptr],1
je .noup
cmp al,72
jne .noup
%else
cmp al,72
jne .noup
%endif
.up
cmp dword[GUIcurrentchtsrccursloc],0
je .noup
mov ebx,[GUIcurrentchtsrccursloc]
cmp [GUIcurrentchtsrcviewloc],ebx
jne .noviewdec
dec dword[GUIcurrentchtsrcviewloc]
.noviewdec
dec dword[GUIcurrentchtsrccursloc]
.noup
%ifdef __LINUX__
cmp al,96
je .yesdown
cmp dword[numlockptr],1
je .nodown
cmp al,80
jne .nodown
.yesdown
%else
cmp al,80
jne .nodown
%endif
mov ebx,[GUIcurrentchtsrccursloc]
inc ebx
cmp ebx,[NumCheatSrc]
jae .noviewinc
inc dword[GUIcurrentchtsrccursloc]
sub ebx,12
cmp ebx,[GUIcurrentchtsrcviewloc]
jne .noviewinc
inc dword[GUIcurrentchtsrcviewloc]
.noviewinc
.nodown
%ifdef __LINUX__
cmp al,91
je .yespgup
cmp dword[numlockptr],1
je .nopageup
cmp al,73
jne .nopageup
.yespgup
%else
cmp al,73
jne .nopageup
%endif
sub dword[GUIcurrentchtsrcviewloc],12
sub dword[GUIcurrentchtsrccursloc],12
test dword[GUIcurrentchtsrcviewloc],8000000h
jz .posv
mov dword[GUIcurrentchtsrcviewloc],0
.posv
test dword[GUIcurrentchtsrccursloc],8000000h
jz .posc
mov dword[GUIcurrentchtsrccursloc],0
.posc
.nopageup
%ifdef __LINUX__
cmp al,97
je .yespgdn
cmp dword[numlockptr],1
je .nopagedown
cmp al,81
jne .nopagedown
.yespgdn
%else
cmp al,81
jne .nopagedown
%endif
add dword[GUIcurrentchtsrcviewloc],12
add dword[GUIcurrentchtsrccursloc],12
mov ebx,[NumCheatSrc]
dec ebx
cmp dword[GUIcurrentchtsrccursloc],ebx
jb .poscd
mov dword[GUIcurrentchtsrccursloc],ebx
.poscd
sub ebx,11
cmp dword[GUIcurrentchtsrcviewloc],ebx
jl .posvd
test ebx,8000000h
jz .noneg
mov ebx,0
.noneg
mov dword[GUIcurrentchtsrcviewloc],ebx
.posvd
.nopagedown
cmp dh,27
je .yesretb
cmp dh,'R'
jne .notreturn
.yesretb
mov byte[CheatWinMode],1
.notreturn
cmp dh,13
je .yesadd
cmp dh,'A'
jne .notadd
.yesadd
mov byte[CheatWinMode],3
mov byte[CurCStextpos],0
mov byte[CSInputDisplay],'_'
mov byte[CSInputDisplay+1],0
mov byte[CSDescDisplay],0
.notadd
ret
.add
cmp dh,27
je .yesretc
cmp byte[CurCStextpos],1
je .notreturnc
cmp dh,'R'
jne .notreturnc
.yesretc
mov byte[CheatWinMode],2
.notreturnc
cmp byte[CurCStextpos],0
jne near .nofirstbox
cmp dh,9
je .yestab
cmp byte[CSOverValue],1
je .noret
cmp dh,13
jne .noret
.yestab
mov byte[CurCStextpos],1
.noret
call InsertSearchCharacter
ret
.nofirstbox
cmp byte[CurCStextpos],1
jne near .nosecondbox
cmp dh,9
jne .notab
mov byte[CurCStextpos],0
.notab
cmp dh,13
jne .noenter
jmp AddCSCheatCode
.noenter
call InsertSearchDescription
ret
.nosecondbox
ret
GUIStateSelKeys:
cmp al,13
jne .noenter
xor eax,eax
mov al,[GUIwinptr]
dec eax
mov byte[GUIwinactiv+2],0
mov byte[GUIwinorder+eax],0
dec byte[GUIwinptr]
mov al,[GUIpmenupos]
mov [GUIcmenupos],al
ret
.noenter
%ifdef __LINUX__
cmp al,92
je .yesleft
cmp dword[numlockptr],1
je .noleft
cmp al,75
jne .noleft
.yesleft
%else
cmp al,75
jne .noleft
%endif
mov ebx,[statefileloc]
mov cl,[fnamest+ebx]
cmp cl,'T'
jne .no1st
mov cl,'4'
jmp .done
.no1st
cmp cl,'1'
jne .no2nd
mov cl,'T'
jmp .done
.no2nd
cmp cl,'5'
jne .no5th
mov cl,'9'
jmp .done
.no5th
dec cl
jmp .done
.noleft
%ifdef __LINUX__
cmp al,94
je .yesright
cmp dword[numlockptr],1
je .noright
cmp al,77
jne .noright
.yesright
%else
cmp al,77
jne .noright
%endif
mov ebx,[statefileloc]
mov cl,[fnamest+ebx]
cmp cl,'T'
jne .noT
mov cl,'1'
jmp .done
.noT
cmp cl,'4'
jne .no4th
mov cl,'T'
jmp .done
.no4th
cmp cl,'9'
jne .no9th
mov cl,'5'
jmp .done
.no9th
inc cl
jmp .done
.noright
%ifdef __LINUX__
cmp al,90
je .vert
cmp dword[numlockptr],1
je .novert
%endif
cmp al,72
je .vert
%ifdef __LINUX__
cmp al,96
je .vert
cmp dword[numlockptr],1
je .novert
%endif
cmp al,80
jne .novert
.vert
mov ebx,[statefileloc]
mov cl,[fnamest+ebx]
cmp cl,'T'
jne .noTv
mov cl,'5'
jmp .done
.noTv
cmp cl,'5'
jne .no5v
mov cl,'T'
jmp .done
.no5v
cmp cl,'5'
jb .noabove
sub cl,5
jmp .done
.noabove
add cl,5
jmp .done
.novert
ret
.done
mov [fnamest+ebx],cl
ret
GUIResetKeys:
%ifdef __LINUX__
cmp al,92
je .yesleft
cmp dword[numlockptr],1
je .noleft
cmp al,75
jne .noleft
.yesleft
%else
cmp al,75
jne .noleft
%endif
mov byte[GUICResetPos],0
.noleft
%ifdef __LINUX__
cmp al,94
je .yesright
cmp dword[numlockptr],1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -