* new system function for "send message"

* @panel: Alt+F4 sends close message rather than immediate kill

git-svn-id: svn://kolibrios.org@665 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Evgeny Grechnikov (Diamond)
2007-10-25 11:20:02 +00:00
parent 94cec78ecd
commit c1f806239d
6 changed files with 101 additions and 35 deletions

View File

@@ -213,6 +213,7 @@ iglobal
dd sys_debug_services ; 69-Debug dd sys_debug_services ; 69-Debug
dd file_system_lfn ; 70-Common file system interface, version 2 dd file_system_lfn ; 70-Common file system interface, version 2
dd syscall_windowsettings ; 71-Window settings dd syscall_windowsettings ; 71-Window settings
dd sys_sendwindowmsg ; 72-Send window message
times 255 - ( ($-servetable) /4 ) dd undefined_syscall times 255 - ( ($-servetable) /4 ) dd undefined_syscall

View File

@@ -2198,14 +2198,15 @@ dd 638
* eax = 47 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 * eax = 47 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* ebx = <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><20><><E2A5AA>: * ebx = <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><20><><E2A5AA>:
* bl = 0 - ecx ᮤ<><EFBFBD> <20><> * bl = 0 - ecx ᮤ<><EFBFBD> <20><>
* bl = 1 - ecx ᮤ<><EFBFBD><><E3AAA0><EFBFBD> <20><> dword-<2D><>᫮, <20><><EFBFBD><EFBFBD> qword-<2D><> * bl = 1 - ecx ᮤ<><EFBFBD><><E3AAA0><EFBFBD> <20><> dword/qword-<2D><>
* bh = 0 - <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD> * bh = 0 - <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD>
* bh = 1 - <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E2ADA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * bh = 1 - <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> <20> <20><><EFBFBD><EFBFBD><E2ADA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* bh = 2 - <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * bh = 2 - <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD> 16-21 = ᪮<><20><><EFBFBD><EFBFBD> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD> * <20><><EFBFBD><EFBFBD> 16-21 = ᪮<><20><><EFBFBD><EFBFBD> <20>⮡ࠦ<E2AEA1><E0A0A6><EFBFBD>
* <20><><EFBFBD><EFBFBD> 22-29 <20><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 0 * <20><><EFBFBD><EFBFBD> 22-29 <20><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 0
* <20><><EFBFBD> 30 - <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> 1, <20> <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> qword (64-<2D><><EFBFBD><EFBFBD>) <20><> * <20><><EFBFBD> 30 <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> = <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD> qword (64-<2D><><EFBFBD> <20><>᫮);
* <20><><EFBFBD> 31 - <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> <20> 1, <20><20><EFBFBD><E0A5A1><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD> <20><><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> bl = 1
* <20><><EFBFBD> 31 <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> = <20><> <20><EFBFBD><EBA2AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><20><>
* ecx = <20><>᫮ (<28><><EFBFBD> bl=0) <20><><EFBFBD><><E3AAA0><EFBFBD> (<28><><EFBFBD> bl=1) * ecx = <20><>᫮ (<28><><EFBFBD> bl=0) <20><><EFBFBD><><E3AAA0><EFBFBD> (<28><><EFBFBD> bl=1)
* edx = [<5B><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> x]*65536 + [<5B><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> y] * edx = [<5B><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> x]*65536 + [<5B><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> y]
* esi = 0xX0RRGGBB: * esi = 0xX0RRGGBB:
@@ -4592,6 +4593,20 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
<20><><EFBFBD>. <20><><EFBFBD>.
* <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD> NULL <20> ecx. * <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD> NULL <20> ecx.
======================================================================
================ <20><EFBFBD><E3ADAA><EFBFBD> 72 - <20><><EFBFBD><E1ABA0><><EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD>. ================
======================================================================
--- <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 1 - <20><><EFBFBD><E1ABA0><><EFBFBD><E9A5AD> <20> <20><><EFBFBD><E0A0AC><20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. ----
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 72 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* ebx = 1 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㭪樨
* ecx = <20><><EFBFBD><><E1AEA1><EFBFBD><EFBFBD>: 2 <20><><EFBFBD> 3
* edx = <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> ecx=2, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A8AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> ecx=3
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* eax = 0 - <20>ᯥ譮
* eax = 1 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
====================================================================== ======================================================================
========== <20><EFBFBD><E3ADAA><EFBFBD> -1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ========= ========== <20><EFBFBD><E3ADAA><EFBFBD> -1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =========
====================================================================== ======================================================================

View File

@@ -2169,14 +2169,14 @@ Parameters:
* eax = 47 - function number * eax = 47 - function number
* ebx = parameters of conversion number to text: * ebx = parameters of conversion number to text:
* bl = 0 - ecx contains number * bl = 0 - ecx contains number
* bl = 1 - ecx contains pointer to dword-number, or qword-number * bl = 1 - ecx contains pointer to dword/qword-number
* bh = 0 - display in decimal number system * bh = 0 - display in decimal number system
* bh = 1 - display in hexadecimal system * bh = 1 - display in hexadecimal system
* bh = 2 - display in binary system * bh = 2 - display in binary system
* bits 16-21 = how many digits to display * bits 16-21 = how many digits to display
* bits 22-29 reserved and must be set to 0 * bits 22-29 reserved and must be set to 0
* bit 30 - set in 1, if the output of qword (64-bites) number * bit 30 set = display qword (64-bit) number (must be bl=1)
* bit 31 - set in 1, if the output of number without empty zero in high bits is required * bit 31 set = do not display leading zeroes of the number
* ecx = number (if bl=0) or pointer (if bl=1) * ecx = number (if bl=0) or pointer (if bl=1)
* edx = [coordinate on axis x]*65536 + [coordinate on axis y] * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
* esi = 0xX0RRGGBB: * esi = 0xX0RRGGBB:
@@ -4547,6 +4547,20 @@ Remarks:
length, no more than 255 characters are drawn. length, no more than 255 characters are drawn.
* Pass NULL in ecx to remove caption. * Pass NULL in ecx to remove caption.
======================================================================
=============== Function 72 - send message to a window. ==============
======================================================================
- Subfunction 1 - send message with parameter to the active window. --
Parameters:
* eax = 72 - function number
* ebx = 1 - subfunction number
* ecx = event code: 2 or 3
* edx = parameter: key code for ecx=2, button identifier for ecx=3
Returned value:
* eax = 0 - success
* eax = 1 - buffer is full
====================================================================== ======================================================================
=============== Function -1 - terminate thread/process =============== =============== Function -1 - terminate thread/process ===============
====================================================================== ======================================================================

View File

@@ -493,6 +493,40 @@ eventoccur:
mov [esp+36], eax mov [esp+36], eax
ret ret
sys_sendwindowmsg:
dec eax
jnz .ret
cmp ebx, 3
jz .sendbtn
cmp ebx, 2
jnz .ret
.sendkey:
pushf
cli
movzx eax, byte [KEY_COUNT]
cmp al, 120
jae .overflow
inc eax
mov [KEY_COUNT], al
mov [KEY_COUNT+eax], cl
jmp .ok
.overflow:
popf
mov dword [esp+36], 1
ret
.sendbtn:
pushf
cli
cmp byte [BTN_COUNT], 0
jnz .overflow
mov byte [BTN_COUNT], 1
mov [BTN_BUFF], ecx
.ok:
popf
and dword [esp+36], 0
.ret:
ret
get_event_for_app: get_event_for_app:
pushad pushad

View File

@@ -1454,7 +1454,8 @@ normalize_number:
jne .continue jne .continue
dec eax dec eax
cmp eax,1 cmp eax,1
jne @r ja @r
mov al,1
.continue: .continue:
and eax,0x3f and eax,0x3f
ret ret

View File

@@ -91,34 +91,35 @@ begin_1:
jmp begin_1.ret jmp begin_1.ret
kill_active_application: kill_active_application:
mcall 18, 7 ; mcall 18, 7
mov ecx,eax ; mov ecx,eax
;
;//{SPraid.simba do not kill panel and icon ; ;//{SPraid.simba do not kill panel and icon
push eax ; push eax
mov eax,9 ; mov eax,9
mov ebx, process_info_buffer ; mov ebx, process_info_buffer
int 0x40 ; int 0x40
mov eax,process_info_buffer ; mov eax,process_info_buffer
add eax,10 ; add eax,10
mov ebx,[eax] ; mov ebx,[eax]
cmp ebx,'ICON' ; cmp ebx,'ICON'
je no_kill ; je no_kill
cmp ebx,'@PAN' ; cmp ebx,'@PAN'
jne kill_app ; jne kill_app
add eax,4 ; add eax,4
mov ebx,[eax] ; mov ebx,[eax]
and ebx,0x0000FFFF ; and ebx,0x0000FFFF
cmp ebx,'EL' ; cmp ebx,'EL'
je no_kill ; je no_kill
kill_app: ; kill_app:
pop ecx ; pop ecx
mcall 18, 2 ; mcall 18, 2
jmp if_kill ; jmp if_kill
no_kill: ; no_kill:
pop eax ; pop eax
if_kill: ; if_kill:
;// }SPraid.simba ; ;// }SPraid.simba
mcall 72,1,3,1
jmp begin_1.ret jmp begin_1.ret