📄 guimouse.inc
字号:
%macro GUIClickCButton2 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
ret
%%noclick
%endmacro
%macro GUIClickCButton3 5
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor %3,%5
mov al,%3
mov %4,al
call ClearScreen
push eax
push ecx
mov eax,[vidbufferofsb]
mov ecx,288*128
%%loop
mov dword[eax],0
add eax,4
loop %%loop
pop ecx
pop eax
ret
%%noclick
%endmacro
%macro GUIClickCButton5 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp %3,%4
jne %%set
xor %3,%4
jmp %%clear
%%set
mov %3,%4
%%clear
ret
%%noclick
%endmacro
%macro GUIClickCButton6 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp %3,%4
jne %%set
xor %3,%4
jmp %%clear
%%set
mov %3,%4
push eax
push ecx
mov eax,[vidbufferofsb]
mov ecx,288*128
%%loop
mov dword[eax],0
add eax,4
loop %%loop
pop ecx
pop eax
%%clear
ret
%%noclick
%endmacro
%macro GUIClickCButton4 5
cmp eax,%1+1
jl near %%noclick
cmp edx,%2+3
jl near %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
cmp %3,%5
jne %%set
xor %3,%5
jmp %%done
%%set
mov %3,%5
%%done
mov al,%3
mov %4,al
cmp byte[En2xSaI],0
jne %%nomodeq
call ClearScreen
; cmp byte[OSPort],2
; jae %%nomodeq
%ifdef __MSDOS__
cmp byte[cvidmode],1
jne %%nomodeq
mov byte[cbitmode],1
call initvideo2
mov byte[cbitmode],0
call GUISetPal
%endif
%%nomodeq
ret
%%noclick
%endmacro
%macro GUIClickCButtonfr 3
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
mov byte[FPSOn],0
cmp %3,0
je %%zero
mov %3,0
jmp %%notzero
%%zero
mov %3,2
%%notzero
%%noclick
%endmacro
%macro GUIClickCButtonL 2
cmp eax,%1+1
jl %%noclick
cmp edx,%2+3
jl %%noclick
cmp eax,%1+6
jg %%noclick
cmp edx,%2+8
jg %%noclick
xor byte[showallext],1
xor byte[GUIshowallext],1
call GetLoadData
ret
%%noclick
%endmacro
%macro GUISlidebarPostImpl 13 ; x1,y1,x2,y2,upjump,downjump,holdpos,scsize,view,cur,listsize
cmp dword[%11],0
je near %%nolower
cmp dword[GUIdispmode],1
je near %%slidebar
cmp eax,%1
jl near %%noupper
cmp edx,%2-7
jl near %%noupper
cmp eax,%3
jg near %%noupper
cmp edx,%2-1
jg near %%noupper
mov byte[%12],%13
mov byte[GUICHold],%7
jmp %5
%%noupper
cmp eax,%1
jl near %%nolower
cmp edx,%4+1
jl near %%nolower
cmp eax,%3
jg near %%nolower
cmp edx,%4+7
jg near %%nolower
mov byte[%12],%13
mov byte[GUICHold],%7+1
jmp %6
%%slidebar
cmp eax,%1
jl near %%nolower
cmp edx,%2
jl near %%nolower
cmp eax,%3
jg near %%nolower
cmp edx,%4
jg near %%nolower
mov byte[%12],%13
; displacement = (GUIdispmode * pixeldisp. / (listsize-scsize))
mov eax,[%11]
sub eax,%8
mov ebx,edx
sub ebx,[GUIlastypos]
imul ebx
mov ebx,[GUIlastdispval]
or ebx,ebx
jz near %%zerodiv
test ebx,80000000h
jnz near %%zerodiv
idiv ebx
mov ebx,[GUIlastvpos]
add ebx,eax
mov [%9],ebx
mov ebx,[GUIlastcpos]
add ebx,eax
mov [%10],ebx
test dword[%9],8000000h
jz %%noneg
mov dword[%9],0
%%noneg
test dword[%10],8000000h
jz %%noneg2
mov dword[%10],0
%%noneg2
mov eax,[%11]
dec eax
cmp [%10],eax
jb %%notover
mov [%10],eax
%%notover
sub eax,%8-1
cmp [%9],eax
jb %%notover2
mov [%9],eax
%%notover2
%%zerodiv
ret
%%nolower
%endmacro
GUIlastdispval dd 0
GUIdispmode dd 0
GUIlastypos dd 0
GUIlastcpos dd 0
GUIlastvpos dd 0
%macro GUISlidebarImpl 10 ; x1,y1,x2,y2,GUI?StA,ScrnSize,ViewLoc,CursLoc,Entries,win#
mov dword[GUIdispmode],0
cmp eax,%1
jl near %%nobar
cmp edx,%2
jl near %%nobar
cmp eax,%3
jg near %%nobar
cmp edx,%4
jg near %%nobar
sub edx,%2
cmp [%5+4],edx
ja near %%above
cmp [%5+8],edx
jb near %%below
add edx,%2
mov [GUIlastypos],edx
mov dword[GUIdispmode],1
mov eax,[GUIwinposy+%10*4]
add eax,%2
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%10*4]
add eax,%4
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%10*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%10*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov eax,[%5]
mov [GUIlastdispval],eax
mov eax,dword[%8]
mov [GUIlastcpos],eax
mov eax,dword[%7]
mov [GUIlastvpos],eax
mov byte[GUIHold],3
ret
%%above
sub dword[%7],%6
sub dword[%8],%6
test dword[%7],8000000h
jz %%noneg
mov dword[%7],0
mov dword[%8],0
%%noneg
ret
%%below
add dword[%7],%6
add dword[%8],%6
mov ebx,[%9]
dec ebx
cmp [%8],ebx
jb %%notoverflow
mov [%8],ebx
sub ebx,%6-1
mov [%7],ebx
%%notoverflow
mov ebx,[%9]
sub ebx,%6
cmp [%7],ebx
jb %%notoverflow2
mov [%7],ebx
%%notoverflow2
ret
%%nobar
; upper arrow
cmp eax,%1
jl near %%noupper
cmp edx,%2-7
jl near %%noupper
cmp eax,%3
jg near %%noupper
cmp edx,%2-1
jg near %%noupper
mov eax,[GUIwinposy+%10*4]
add eax,%2-7
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%10*4]
add eax,%2-1
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%10*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%10*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov byte[GUIHold],3
ret
%%noupper
; lower arrow
cmp eax,%1
jl near %%nolower
cmp edx,%4+1
jl near %%nolower
cmp eax,%3
jg near %%nolower
cmp edx,%4+7
jg near %%nolower
mov eax,[GUIwinposy+%10*4]
add eax,%4+1
mov [GUIHoldYlim],eax
mov eax,[GUIwinposy+%10*4]
add eax,%4+7
mov [GUIHoldYlimR],eax
mov eax,[GUIwinposx+%10*4]
add eax,%1
mov [GUIHoldXlimL],eax
mov eax,[GUIwinposx+%10*4]
add eax,%3
mov [GUIHoldXlimR],eax
mov byte[GUIHold],3
ret
%%nolower
%endmacro
%macro GUIPostWinBoxMove 11 ;x1,y1,x2,y2,view,curs,num,.scru,.scrd,jumpto,sizeofscreen
cmp eax,%1
jl near %%noload
cmp eax,%3
jg near %%noload
cmp edx,%2
je near %%scrollup
cmp edx,%4
jne near %%noload
; Scroll Down
cmp dword[%7],%11
jbe %9
mov ebx,[%5]
add ebx,%11-1
mov [%6],ebx
%9
cmp dword[GUIScrolTim1],0
jne near %%donescrol
mov ebx,[%7]
dec ebx
cmp ebx,[%6]
jbe %%donescrolldown
inc dword[%6]
cmp dword[%7],%11
jbe near %%donescrol
inc dword[%5]
mov ebx,[%7]
sub ebx,%11
cmp ebx,[%5]
ja near %%donescrolldown
mov [%5],ebx
jmp %%donescrolldown
%%scrollup
mov ebx,[%5]
mov [%6],ebx
%8
cmp dword[GUIScrolTim1],0
jne near %%donescrol
cmp dword[%6],0
je %%donescrolldown
dec dword[%6]
cmp dword[%5],0
je %%donescrolldown
dec dword[%5]
%%donescrolldown
mov dword[GUIScrolTim1],1
cmp dword[GUIScrolTim2],4
jb %%noscrol1
inc dword[GUIScrolTim1]
%%noscrol1
cmp dword[GUIScrolTim2],0
je %%noscrol2
inc dword[GUIScrolTim1]
dec dword[GUIScrolTim2]
%%noscrol2
%%donescrol
jmp %10
%%noload
%endmacro
%macro GUIPHoldbutton 5
cmp eax,%1
jl near %%nohold
cmp edx,%2
jl near %%nohold
cmp eax,%3
jg near %%nohold
cmp edx,%4
jg near %%nohold
mov dword[GUIHoldXlimL],%1
mov dword[GUIHoldXlimR],%3
mov dword[GUIHoldYlim],%2
mov dword[GUIHoldYlimR],%4
mov byte[GUICBHold2],%5
mov byte[GUIHold],4
%%nohold
%endmacro
%macro GUIPHoldbutton2 8
cmp eax,%1
jl near %%nohold
cmp edx,%2
jl near %%nohold
cmp eax,%3
jg near %%nohold
cmp edx,%4
jg near %%nohold
cmp byte[GUIHold],0
jne %%nohold
mov dword[GUIHoldXlimL],%1
mov dword[GUIHoldXlimR],%3
mov dword[GUIHoldYlim],%2
mov dword[GUIHoldYlimR],%4
mov byte[GUICBHold2],%5
mov byte[GUIHold],4
cmp %6,%8
je %%nohold
add %6,%7
%%nohold
%endmacro
%macro GUITextBoxInput 6
cmp eax,%1
jl %%noclick
cmp edx,%2
jl %%noclick
cmp eax,%3
jg %%noclick
cmp edx,%4
jg %%noclick
mov dword[GUIEditString],%5
mov dword[GUIEditStringmLen],%6
mov dword[GUIEditStringLTxt],0
mov dword[GUIEditStringcWin],1
%%noclick
%endmacro
%macro GUITextBoxInputB 5
cmp eax,%1
jl %%noclick
cmp edx,%2
jl %%noclick
cmp eax,%3
jg %%noclick
cmp edx,%4
jg %%noclick
mov byte[GUINetTextm2],%5
%%noclick
%endmacro
%macro GUIPButtonHole 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+1
jl %%noclick
cmp eax,%1+7
jg %%noclick
cmp edx,%2+7
jg %%noclick
mov %3,%4
%%noclick
%endmacro
%macro GUIPButtonHole2 6
cmp eax,%1+1
jl %%noclick
cmp edx,%2+1
jl %%noclick
cmp eax,%1+7
jg %%noclick
cmp edx,%2+7
jg %%noclick
mov %3,%4
mov %5,%6
%%noclick
%endmacro
%macro GUIPButtonHoleLoad 4
cmp eax,%1+1
jl %%noclick
cmp edx,%2+1
jl %%noclick
cmp eax,%1+7
jg %%noclick
cmp edx,%2+7
jg %%noclick
mov %3,%4
call GetLoadData
ret
%%noclick
%endmacro
%macro GUIWinControl 13 ;x,y,x2,y2,currentwin,vpos,#entries,starty,y/entry,cpos,winval,win#,dclicktick#
cmp eax,%1
jl near %%noload
cmp edx,%2
jl near %%noload
cmp eax,%3
jg near %%noload
cmp edx,%4
jg near %%noload
cmp dword[%7],0
je near %%noload
mov dword[%5],%11
mov eax,edx
sub eax,%8
xor edx,edx
mov ebx,%9
div ebx
add eax,[%6]
mov ebx,[%7]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -