⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guimouse.inc

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 INC
📖 第 1 页 / 共 5 页
字号:

%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 + -