Hotkeys are now supported
git-svn-id: svn://kolibrios.org@92 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c1783c769f
commit
56d23ae060
@ -733,6 +733,40 @@ terminate: ; terminate application
|
|||||||
mov [0xf500],byte 0 ; empty button buffer
|
mov [0xf500],byte 0 ; empty button buffer
|
||||||
|
|
||||||
|
|
||||||
|
; remove defined hotkeys
|
||||||
|
mov eax, hotkey_list
|
||||||
|
.loop:
|
||||||
|
cmp [eax+8], esi
|
||||||
|
jnz .cont
|
||||||
|
mov ecx, [eax]
|
||||||
|
jecxz @f
|
||||||
|
push dword [eax+12]
|
||||||
|
pop dword [ecx+12]
|
||||||
|
@@:
|
||||||
|
mov ecx, [eax+12]
|
||||||
|
push dword [eax]
|
||||||
|
pop dword [ecx]
|
||||||
|
xor ecx, ecx
|
||||||
|
mov [eax], ecx
|
||||||
|
mov [eax+4], ecx
|
||||||
|
mov [eax+8], ecx
|
||||||
|
mov [eax+12], ecx
|
||||||
|
.cont:
|
||||||
|
add eax, 16
|
||||||
|
cmp eax, hotkey_list+256*16
|
||||||
|
jb .loop
|
||||||
|
; remove hotkeys in buffer
|
||||||
|
mov eax, hotkey_buffer
|
||||||
|
.loop2:
|
||||||
|
cmp [eax], esi
|
||||||
|
jnz .cont2
|
||||||
|
and dword [eax+4], 0
|
||||||
|
and dword [eax], 0
|
||||||
|
.cont2:
|
||||||
|
add eax, 8
|
||||||
|
cmp eax, hotkey_buffer+120*8
|
||||||
|
jb .loop2
|
||||||
|
|
||||||
mov ecx,esi ; remove buttons
|
mov ecx,esi ; remove buttons
|
||||||
bnewba2:
|
bnewba2:
|
||||||
mov edi,[0xfe88]
|
mov edi,[0xfe88]
|
||||||
@ -764,13 +798,11 @@ terminate: ; terminate application
|
|||||||
add esi,window_data
|
add esi,window_data
|
||||||
mov ax,[esi+0]
|
mov ax,[esi+0]
|
||||||
mov word [dlx],ax
|
mov word [dlx],ax
|
||||||
mov bx,[esi+8]
|
add ax,[esi+8]
|
||||||
add ax,bx
|
|
||||||
mov word [dlxe],ax
|
mov word [dlxe],ax
|
||||||
mov ax,[esi+4]
|
mov ax,[esi+4]
|
||||||
mov word [dly],ax
|
mov word [dly],ax
|
||||||
mov bx,[esi+12]
|
add ax,[esi+12]
|
||||||
add ax,bx
|
|
||||||
mov word [dlye],ax
|
mov word [dlye],ax
|
||||||
mov [esi+0],word 0
|
mov [esi+0],word 0
|
||||||
mov [esi+8],word 5
|
mov [esi+8],word 5
|
||||||
@ -798,18 +830,11 @@ terminate: ; terminate application
|
|||||||
|
|
||||||
mov edi,esi
|
mov edi,esi
|
||||||
shl edi,5
|
shl edi,5
|
||||||
add edi,window_data
|
mov [edi+4+window_data],eax
|
||||||
mov [edi+4],eax
|
|
||||||
|
|
||||||
popa
|
|
||||||
|
|
||||||
pusha
|
|
||||||
mov edi,esi
|
|
||||||
shl edi,5
|
|
||||||
add edi,draw_data
|
add edi,draw_data
|
||||||
mov ecx,32/4
|
mov ecx,32/4
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
; cld
|
|
||||||
rep stosd
|
rep stosd
|
||||||
popa
|
popa
|
||||||
|
|
||||||
@ -864,30 +889,34 @@ terminate: ; terminate application
|
|||||||
nlc41:
|
nlc41:
|
||||||
popa
|
popa
|
||||||
|
|
||||||
pusha ; remove hd1 reservation
|
push esi ; remove hd1 & cd & flp reservation
|
||||||
mov edx,esi
|
shl esi, 5
|
||||||
shl edx, 5 ;imul edx,0x20
|
mov esi, [esi+0x3004]
|
||||||
add edx,0x3000
|
cmp [hd1_status], esi
|
||||||
mov edx,[edx+4]
|
jnz @f
|
||||||
cmp [hd1_status],edx
|
mov [hd1_status], 0
|
||||||
jne no_hd1_s_remove
|
@@:
|
||||||
mov [hd1_status],0
|
cmp [cd_status], esi
|
||||||
no_hd1_s_remove:
|
jnz @f
|
||||||
popa
|
mov [cd_status], 0
|
||||||
|
@@:
|
||||||
|
cmp [flp_status], esi
|
||||||
|
jnz @f
|
||||||
|
mov [flp_status], 0
|
||||||
|
@@:
|
||||||
|
pop esi
|
||||||
|
|
||||||
pusha ; remove all irq reservations
|
pusha ; remove all irq reservations
|
||||||
mov edx,esi
|
mov eax,esi
|
||||||
shl edx, 5 ;imul edx,0x20
|
shl eax, 5 ;imul edx,0x20
|
||||||
add edx,0x3000
|
mov eax,[edx+0x3000+4]
|
||||||
mov edx,[edx+4]
|
|
||||||
mov edi,irq_owner
|
mov edi,irq_owner
|
||||||
mov ecx,16
|
mov ecx,16
|
||||||
newirqfree:
|
newirqfree:
|
||||||
cmp [edi],edx
|
scasd
|
||||||
jne nofreeirq
|
jne nofreeirq
|
||||||
mov [edi],dword 0
|
mov [edi-4],dword 0
|
||||||
nofreeirq:
|
nofreeirq:
|
||||||
add edi,4
|
|
||||||
loop newirqfree
|
loop newirqfree
|
||||||
popa
|
popa
|
||||||
|
|
||||||
|
@ -127,15 +127,19 @@
|
|||||||
* ¥á«¨ ¡ãä¥à ¯ãáâ, ¢®§¢à é ¥âáï eax=1
|
* ¥á«¨ ¡ãä¥à ¯ãáâ, ¢®§¢à é ¥âáï eax=1
|
||||||
* ¥á«¨ ¡ãä¥à ¥¯ãáâ, â® ¢®§¢à é ¥âáï al=0, ah=ª®¤ ¦ ⮩ ª« ¢¨è¨,
|
* ¥á«¨ ¡ãä¥à ¥¯ãáâ, â® ¢®§¢à é ¥âáï al=0, ah=ª®¤ ¦ ⮩ ª« ¢¨è¨,
|
||||||
áâ à襥 á«®¢® ॣ¨áâà eax ®¡ã«¥®
|
áâ à襥 á«®¢® ॣ¨áâà eax ®¡ã«¥®
|
||||||
|
* ¥á«¨ ¥áâì "£®àïç ï ª« ¢¨è ", â® ¢®§¢à é ¥âáï
|
||||||
|
al=2, ah=᪠ª®¤ ¦ ⮩ ª« ¢¨è¨ (0 ¤«ï ã¯à ¢«ïîé¨å ª« ¢¨è),
|
||||||
|
áâ à襥 á«®¢® ॣ¨áâà eax ᮤ¥à¦¨â á®áâ®ï¨¥ ã¯à ¢«ïîé¨å ª« ¢¨è
|
||||||
|
¢ ¬®¬¥â ¦ â¨ï £®àï祩 ª« ¢¨è¨
|
||||||
‡ ¬¥ç ¨ï:
|
‡ ¬¥ç ¨ï:
|
||||||
* ‘ãé¥áâ¢ã¥â ®¡é¥á¨áâ¥¬ë© ¡ãä¥à ¦ âëå ª« ¢¨è à §¬¥à®¬ 120 ¡ ©â,
|
* ‘ãé¥áâ¢ã¥â ®¡é¥á¨áâ¥¬ë© ¡ãä¥à ¦ âëå ª« ¢¨è à §¬¥à®¬ 120 ¡ ©â,
|
||||||
®à£ ¨§®¢ ë© ª ª ®ç¥à¥¤ì.
|
®à£ ¨§®¢ ë© ª ª ®ç¥à¥¤ì.
|
||||||
|
* ‘ãé¥áâ¢ã¥â ¥éñ ®¤¨ ®¡é¥á¨áâ¥¬ë© ¡ãä¥à 120 "£®àïç¨å ª« ¢¨è".
|
||||||
* <20>ਠ¢ë§®¢¥ í⮩ äãªæ¨¨ ¯à¨«®¦¥¨¥¬ á ¥ ªâ¨¢ë¬ ®ª®¬
|
* <20>ਠ¢ë§®¢¥ í⮩ äãªæ¨¨ ¯à¨«®¦¥¨¥¬ á ¥ ªâ¨¢ë¬ ®ª®¬
|
||||||
¢®§¢à é ¥âáï ®â¢¥â "¡ãä¥à ¯ãáâ".
|
áç¨â ¥âáï, çâ® ¡ãä¥à ¦ âëå ª« ¢¨è ¯ãáâ.
|
||||||
* <20>â äãªæ¨ï ¥ á®®¡é ¥â ® ª« ¢¨è å, ¦ âëå ¢ ª®¬¡¨ 樨 á Alt,
|
|
||||||
¤«ï â ª¨å á«ãç ¥¢ ¥áâì ¯®¤äãªæ¨ï 12 äãªæ¨¨ 18.
|
|
||||||
* <20>® 㬮«ç ¨î íâ äãªæ¨ï ¢®§¢à é ¥â ASCII-ª®¤ë; ¯¥à¥ª«îç¨âìáï
|
* <20>® 㬮«ç ¨î íâ äãªæ¨ï ¢®§¢à é ¥â ASCII-ª®¤ë; ¯¥à¥ª«îç¨âìáï
|
||||||
०¨¬ ᪠ª®¤®¢ (¨ § ¤) ¬®¦® á ¨á¯®«ì§®¢ ¨¥¬ äãªæ¨¨ 66.
|
०¨¬ ᪠ª®¤®¢ (¨ § ¤) ¬®¦® á ¨á¯®«ì§®¢ ¨¥¬ äãªæ¨¨ 66.
|
||||||
|
Ž¤ ª®, £®àï稥 ª« ¢¨è¨ ¢á¥£¤ ¢®§¢à é îâáï ª ª ᪠ª®¤ë.
|
||||||
* “§ âì, ª ª¨¥ ª®¬¡¨ 樨 ª« ¢¨è ᮮ⢥âáâ¢ãîâ ª ª¨¬ ª®¤ ¬, ¬®¦®,
|
* “§ âì, ª ª¨¥ ª®¬¡¨ 樨 ª« ¢¨è ᮮ⢥âáâ¢ãîâ ª ª¨¬ ª®¤ ¬, ¬®¦®,
|
||||||
§ ¯ãá⨢ ¯à¨«®¦¥¨ï keyascii ¨ scancode.
|
§ ¯ãá⨢ ¯à¨«®¦¥¨ï keyascii ¨ scancode.
|
||||||
* ‘ª ª®¤ë ¢®§¢à é îâáï ¥¯®á।á⢥® ª« ¢¨ âãன ¨ 䨪á¨à®¢ ë;
|
* ‘ª ª®¤ë ¢®§¢à é îâáï ¥¯®á।á⢥® ª« ¢¨ âãன ¨ 䨪á¨à®¢ ë;
|
||||||
@ -144,6 +148,8 @@
|
|||||||
¯®¤äãªæ¨¥© 2 äãªæ¨¨ 26.
|
¯®¤äãªæ¨¥© 2 äãªæ¨¨ 26.
|
||||||
* Š ª á«¥¤á⢨¥, ASCII-ª®¤ë ãç¨âë¢ îâ ⥪ãéãî à ᪫ ¤ªã ª« ¢¨ âãàë
|
* Š ª á«¥¤á⢨¥, ASCII-ª®¤ë ãç¨âë¢ îâ ⥪ãéãî à ᪫ ¤ªã ª« ¢¨ âãàë
|
||||||
(rus/en) ¢ ®â«¨ç¨¥ ®â ᪠ª®¤®¢.
|
(rus/en) ¢ ®â«¨ç¨¥ ®â ᪠ª®¤®¢.
|
||||||
|
* <20>®áâ㯠¥â ¨ä®à¬ æ¨ï ⮫쪮 ® â¥å £®àïç¨å ª« ¢¨è å, ª®â®àë¥ ¡ë«¨
|
||||||
|
®¯à¥¤¥«¥ë í⨬ ¯®â®ª®¬ ¯®¤äãªæ¨¥© 4 äãªæ¨¨ 66.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
================ ”ãªæ¨ï 3 - ¯®«ãç¨âì á¨á⥬®¥ ¢à¥¬ï. ===============
|
================ ”ãªæ¨ï 3 - ¯®«ãç¨âì á¨á⥬®¥ ¢à¥¬ï. ===============
|
||||||
@ -826,48 +832,6 @@
|
|||||||
¥áâ¥á⢥®, ¡ã¤¥â ¤à㣮©, ® ¯¥à¢ë¥ ¤¢ ¯®«ï
|
¥áâ¥á⢥®, ¡ã¤¥â ¤à㣮©, ® ¯¥à¢ë¥ ¤¢ ¯®«ï
|
||||||
á®åà ïâáï ¥¨§¬¥ë¬¨.
|
á®åà ïâáï ¥¨§¬¥ë¬¨.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
=== ”ãªæ¨ï 18, ¯®¤äãªæ¨ï 12 - ¯®«ãç¨âì ¯®á«¥¤îî ¦ âãî ª« ¢¨èã. ==
|
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 18 - ®¬¥à äãªæ¨¨
|
|
||||||
* ebx = 12 - ®¬¥à ¯®¤äãªæ¨¨
|
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
|
||||||
* al = ०¨¬ ¢¢®¤ á ª« ¢¨ âãàë (0=ASCII,1=᪠ª®¤ë), ª®â®àë©
|
|
||||||
¨¬¥« ¬¥áâ® ¯à¨ ®¡à ¡®âª¥ ¦ â¨ï ¯®á«¥¤¥© ª« ¢¨è¨ ª« ¢¨ âãà¥
|
|
||||||
* ah = ª®¤ ¯®á«¥¤¥© ¦ ⮩ ª« ¢¨è¨
|
|
||||||
* áâ à襥 á«®¢® ॣ¨áâà eax ®¡ã«¥®
|
|
||||||
‡ ¬¥ç ¨ï:
|
|
||||||
* ’®«ìª® íâ äãªæ¨ï ¯®§¢®«ï¥â áç¨âë¢ âì ª« ¢¨è¨, ¢® ¢à¥¬ï
|
|
||||||
áç¨âë¢ ¨ï ª®â®àëå ¨§ ¡ãä¥à ¡ë« ¦ â ª« ¢¨è Alt, äãªæ¨ï 2
|
|
||||||
¢ á«ãç ¥, ª®£¤ ¯à¨ ¥ñ ¢ë§®¢¥ ¡ë« ¦ â Alt, ¢®§¢à é ¥â
|
|
||||||
"¡ãä¥à ¯ãáâ", ⥬ ¥ ¬¥¥¥ áç¨âë¢ ï ª« ¢¨èã ¨§ ®ç¥à¥¤¨ ¢
|
|
||||||
£«®¡ «ìãî á¨á⥬ãî ¯¥à¥¬¥ãî last_key_press ¨ ¯à®¤¢¨£ ï ®ç¥à¥¤ì
|
|
||||||
¢¯¥àñ¤.
|
|
||||||
* <20>®á«¥ áç¨âë¢ ¨ï ª®¤ ¯®á«¥¤¥© ¦ ⮩ ª« ¢¨è¨ á¡à áë¢ ¥âáï ¢ 0.
|
|
||||||
‘«¥¤®¢ ⥫ì®, ¥ á⮨⠨ᯮ«ì§®¢ âì íâã äãªæ¨î ¢ ¤¢ãå à §«¨çëå
|
|
||||||
¯à®£à ¬¬ å (¨ ¤ ¦¥ ¤¢ à § ¢ ®¤®© ¯à®£à ¬¬¥).
|
|
||||||
* <20>ਫ®¦¥¨¥ @panel ¨á¯®«ì§ã¥â íâã äãªæ¨î ¤«ï ॠ£¨à®¢ ¨ï
|
|
||||||
Alt+F4, Alt+Win, Alt+Ctrl+F12.
|
|
||||||
* last_key_press ®¡®¢«ï¥âáï ¢ â®ç®á⨠¢ á«¥¤ãîé¨å á«ãç ïå:
|
|
||||||
* Ž¡ã«ï¥âáï ¯à¨ ¢ë§®¢¥ ®¯¨áë¢ ¥¬®© äãªæ¨¨.
|
|
||||||
* Š®£¤ ã¯à ¢«¥¨¥ ¯®«ãç ¥â ¥ª®â®à ï ¯à®æ¥¤ãà
|
|
||||||
(main_loop_sys_getkey) £« ¢®£® 横« ®¯¥à 樮®© á¨á⥬ë:
|
|
||||||
¥á«¨ ¡ãä¥à ¥¯ãáâ, â® ¯¥à¢ ï ª« ¢¨è ¡ãä¥à ª®¯¨àã¥âáï ¢
|
|
||||||
last_key_press (¨ ¥ § ¡¨à ¥âáï ¨§ ®ç¥à¥¤¨).
|
|
||||||
* <20>ਠ¢ë§®¢¥ äãªæ¨¨ 2: ¥á«¨ ¡ãä¥à ¥¯ãáâ, â® áç¨â ï ª« ¢¨è
|
|
||||||
ª®¯¨àã¥âáï ¢ last_key_press (¨ ¢®§¢à é ¥âáï ¯à¨«®¦¥¨î,
|
|
||||||
¢ë§¢ ¢è¥¬ã äãªæ¨î 2, ® ⮫쪮 ¥á«¨ ¢ ¬®¬¥â áç¨âë¢ ¨ï
|
|
||||||
¥ ¦ â Alt).
|
|
||||||
* <20>®áª®«ìªã ¯à¨ ªâ¨¢¨§ 樨 ®ª á¡à áë¢ îâáï ®ç¥à¥¤¨ ª« ¢¨è ¨
|
|
||||||
ª®¯®ª, â® ¢ ¡®«ìè¨á⢥ á«ãç ¥¢ ¨â¥à¯à¥â æ¨ï ah ᮮ⢥âáâ¢ã¥â al
|
|
||||||
(â.¥. ¯®ïâ®, çâ® åà ¨âáï ¢ ah - ASCII-ª®¤ ¨«¨ ᪠ª®¤).
|
|
||||||
’¥¬ ¥ ¬¥¥¥ ¢®§¬®¦ë ¥¯à¨ïâë¥ á«ãç ¨, ª®£¤ ªâ¨¢®¥ ®ª®,
|
|
||||||
¥ § ¡®âïáì ®¡ ®áâ ¢è¨åáï ¢ ¡ãä¥à¥ ª« ¢¨è å, ¢ë§ë¢ ¥â äãªæ¨î 66,
|
|
||||||
¯¥à¥ª«îç ïáì ¬¥¦¤ã ०¨¬ ¬¨; ¥á«¨ ¯®á«¥ í⮣® ¯®«ì§®¢ â¥«ì ¦¬ñâ
|
|
||||||
ª« ¢¨èã, â® § 票¥ ¯¥à¥¬¥®©, ᮮ⢥âáâ¢ãî饩 al, ¨§¬¥¨âáï,
|
|
||||||
ç «ìë¥ ª« ¢¨è¨ ¢ ¡ãä¥à¥ ®áâ ãâáï ¢ áâ ஬ ०¨¬¥.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
========== ”ãªæ¨ï 18, ¯®¤äãªæ¨ï 13 - ¯®«ãç¨âì ¢¥àá¨î ï¤à . =========
|
========== ”ãªæ¨ï 18, ¯®¤äãªæ¨ï 13 - ¯®«ãç¨âì ¢¥àá¨î ï¤à . =========
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -1028,9 +992,6 @@ db 'Kolibri',0
|
|||||||
®à¬ «ì ï à ᪫ ¤ª , ¯®á«¥ 祣® ¨§ ª®¤ ¢ëç¨â ¥âáï 0x60;
|
®à¬ «ì ï à ᪫ ¤ª , ¯®á«¥ 祣® ¨§ ª®¤ ¢ëç¨â ¥âáï 0x60;
|
||||||
¥á«¨ ¥ ¦ â ¨ ®¤ ¨§ ã¯à ¢«ïîé¨å ª« ¢¨è, â® ¨á¯®«ì§ã¥âáï
|
¥á«¨ ¥ ¦ â ¨ ®¤ ¨§ ã¯à ¢«ïîé¨å ª« ¢¨è, â® ¨á¯®«ì§ã¥âáï
|
||||||
®à¬ «ì ï à ᪫ ¤ª .
|
®à¬ «ì ï à ᪫ ¤ª .
|
||||||
* –¥®áâì ãáâ ®¢ª¨ à ᪫ ¤ª¨ á Alt ¯à¥¤áâ ¢«ï¥âáï ᮬ¨â¥«ì®©,
|
|
||||||
¯®áª®«ìªã ¢áñ à ¢® äãªæ¨ï 2 ¥ ¢®§¢à é ¥â ª« ¢¨è¨ ¯à¨
|
|
||||||
¦ ⮬ Alt.
|
|
||||||
* <20>®«ãç¨âì à ᪫ ¤ª¨ ¨ ¨¤¥â¨ä¨ª â®à áâà ë ¬®¦® á ¯®¬®éìî
|
* <20>®«ãç¨âì à ᪫ ¤ª¨ ¨ ¨¤¥â¨ä¨ª â®à áâà ë ¬®¦® á ¯®¬®éìî
|
||||||
¯®¤äãªæ¨¨ 2 äãªæ¨¨ 26.
|
¯®¤äãªæ¨¨ 2 äãªæ¨¨ 26.
|
||||||
* ˆ¤¥â¨ä¨ª â®à áâà ë - £«®¡ «ì ï á¨á⥬ ï ¯¥à¥¬¥ ï, ª®â®à ï
|
* ˆ¤¥â¨ä¨ª â®à áâà ë - £«®¡ «ì ï á¨á⥬ ï ¯¥à¥¬¥ ï, ª®â®à ï
|
||||||
@ -3188,6 +3149,55 @@ dword-
|
|||||||
¢ § ¬®à®¦¥®¬ á®áâ®ï¨¨; ¤«ï § ¯ã᪠¨á¯®«ì§ã©â¥
|
¢ § ¬®à®¦¥®¬ á®áâ®ï¨¨; ¤«ï § ¯ã᪠¨á¯®«ì§ã©â¥
|
||||||
¯®¤äãªæ¨î 5 äãªæ¨¨ 69.
|
¯®¤äãªæ¨î 5 äãªæ¨¨ 69.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
=== ”ãªæ¨ï 59 - ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ¯®á«¥¤¨å á¨á⥬ëå ¢ë§®¢ å. ==
|
||||||
|
======================================================================
|
||||||
|
<EFBFBD>®«ãç ¥â ¤ ë¥ ® ¢á¥å á¨á⥬ëå ¢ë§®¢ å ¢á¥å ¯à®æ¥áᮢ.
|
||||||
|
<EFBFBD> à ¬¥âàë:
|
||||||
|
* eax = 59 - ®¬¥à äãªæ¨¨
|
||||||
|
* ebx = 0 - ¥¤¨á⢥ ï ¯®¤äãªæ¨ï
|
||||||
|
* ecx = 㪠§ â¥«ì ¡ãä¥à
|
||||||
|
* edx = à §¬¥à ¡ãä¥à
|
||||||
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
|
* eax = ®¡é¥¥ ç¨á«® á¨á⥬ëå ¢ë§®¢®¢,
|
||||||
|
ᤥ« ëå á ¬®¬¥â § £à㧪¨ á¨á⥬ë (¯® ¬®¤ã«î 2^32)
|
||||||
|
* ebx = 0
|
||||||
|
”®à¬ â ¨ä®à¬ 樨 ®¡ ®¤®¬ ¢ë§®¢¥: (à §¬¥à = 0x40 = 64 ¡ ©â )
|
||||||
|
* +0: dword: PID ¯à®æ¥áá /¯®â®ª
|
||||||
|
* +4: 7*dword: ¬ãá®à
|
||||||
|
* +32 = +0x20: dword: § 票¥ edi ¯à¨ ¢ë§®¢¥
|
||||||
|
* +36 = +0x24: dword: esi
|
||||||
|
* +40 = +0x28: dword: ebp
|
||||||
|
* +44 = +0x2C: dword: 㪠§ ⥫ì áâíª ®¡à ¡®â稪 ï¤à
|
||||||
|
* +48 = +0x30: dword: ebx
|
||||||
|
* +52 = +0x34: dword: edx
|
||||||
|
* +56 = +0x38: dword: ecx
|
||||||
|
* +60 = +0x3C: dword: eax (=®¬¥à á¨á⥬®© äãªæ¨¨)
|
||||||
|
‡ ¬¥ç ¨ï:
|
||||||
|
* ”ãªæ¨ï ¨á¯®«ì§ã¥âáï ⮫쪮 ¢ ¯à¨«®¦¥¨¨ systrace.
|
||||||
|
„®¢®«ì® âà㤮 ¯à¥¤áâ ¢¨âì á¨âã æ¨î, ¢ ª®â®à®© íâ® ¯à¨«®¦¥¨¥
|
||||||
|
¨«¨ íâ äãªæ¨ï ¤¥©áâ¢¨â¥«ì® ¯®«¥§ë, ¢®â ¢á¥ á¨áâ¥¬ë¥ ¢ë§®¢ë
|
||||||
|
¤«ï ¯®¤¤¥à¦ª¨ í⮩ äãªæ¨¨ ¥áª®«ìª® § ¬¥¤«ïîâáï
|
||||||
|
(å®âï ¨ ¥ ¬®£®)...
|
||||||
|
* ‚ á¢ï§¨ á í⨬ ¥áâì ¯à¥¤«®¦¥¨¥ ¯®¤¤¥à¦ªã í⮩ äãªæ¨¨
|
||||||
|
¨§ ï¤à ã¡à âì ᮢᥬ, ¢¬¥áâ¥ á ¯à¨«®¦¥¨¥¬ systrace.
|
||||||
|
* ˆä®à¬ æ¨ï ® á¨á⥬ëå ¢ë§®¢ å á®åà ï¥âáï ¢
|
||||||
|
á¨á⥬®¬ ª®«ì楢®¬ ¡ãä¥à¥ 0x10 ¢å®¤®¢.
|
||||||
|
<20>â äãªæ¨ï ¯à®áâ® ª®¯¨àã¥â 㪠§ ë© ®¡êñ¬ ¤ ëå
|
||||||
|
¨§ 㯮¬ïã⮣® ¡ãä¥à ¯® 㪠§ ®¬ã ¤à¥áã.
|
||||||
|
* Š ª®© ¨§ ¢å®¤®¢ ¢ ¡ãä¥à¥ ᮮ⢥âáâ¢ã¥â ¯®á«¥¤¥¬ã ¢ë§®¢ã,
|
||||||
|
¬®¦® ®¯à¥¤¥«¨âì ¯® § 票î eax, ¨¬¥®,
|
||||||
|
¢å®¤ (eax and 0xF) (¯® ᬥ饨î (eax and 0xF)*0x40).
|
||||||
|
* ‚ ⥪ã饩 ॠ«¨§ 樨 ¢®§¬®¦ë ।ª® ¢áâà¥ç î騥áï
|
||||||
|
¯à®¡«¥¬ë à áá¨åந§ 樨, ª®£¤ ® ¥ª®â®àëå ¢ë§®¢ å
|
||||||
|
¨ä®à¬ æ¨ï ãáâ ॢ ¥â.
|
||||||
|
* <20>®¤ á¨áâ¥¬ë© ¡ãä¥à ¢ë¤¥«¥ áâà ¨æ , 4Š¡.
|
||||||
|
<20> §¬¥à ¢å®¤ = 64 ¡ ©â .
|
||||||
|
<20>®ç¥¬ã ¨á¯®«ì§ã¥âáï ⮫쪮 16 ¢å®¤®¢ - ¥¯®ïâ®.
|
||||||
|
* ‡ 票¥ esp ¢ ¬®¬¥â á¨á⥬®£® ¢ë§®¢
|
||||||
|
í⮩ äãªæ¨¥© 㧠âì ¥«ì§ï.
|
||||||
|
* <20>஢¥àª¨ ª®à४â®á⨠edx ¢ ⥪ã饩 ॠ«¨§ 樨 ¥ ¤¥« ¥âáï.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=========== ”ãªæ¨ï 60 - Inter Process Communication (IPC). ==========
|
=========== ”ãªæ¨ï 60 - Inter Process Communication (IPC). ==========
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -3392,6 +3402,8 @@ IPC
|
|||||||
fff = ®¬¥à äãªæ¨¨ ãáâனáâ¢
|
fff = ®¬¥à äãªæ¨¨ ãáâனáâ¢
|
||||||
* cl = ®¬¥à ॣ¨áâà (¤®«¦¥ ¡ëâì çñâë¬ ¤«ï bl=9,
|
* cl = ®¬¥à ॣ¨áâà (¤®«¦¥ ¡ëâì çñâë¬ ¤«ï bl=9,
|
||||||
¤¥«¨âìáï 4 ¤«ï bl=10)
|
¤¥«¨âìáï 4 ¤«ï bl=10)
|
||||||
|
* dl/dx/edx (¢ § ¢¨á¨¬®á⨠®â § ¯à®è¥®£® à §¬¥à ) ᮤ¥à¦¨â
|
||||||
|
¤ ë¥ ¤«ï § ¯¨á¨
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
* eax = -1 - ®è¨¡ª (§ ¯à¥éñ ¤®áâ㯠ª PCI ¨«¨
|
* eax = -1 - ®è¨¡ª (§ ¯à¥éñ ¤®áâ㯠ª PCI ¨«¨
|
||||||
¥¯®¤¤¥à¦¨¢ ¥¬ë¥ ¯ à ¬¥âàë)
|
¥¯®¤¤¥à¦¨¢ ¥¬ë¥ ¯ à ¬¥âàë)
|
||||||
@ -3468,13 +3480,12 @@ IPC
|
|||||||
¤¨ ¬¨ç¥áª®£® ¢ë¤¥«¥¨ï/®á¢®¡®¦¤¥¨ï ¯ ¬ï⨠¯à¨«®¦¥¨ï.
|
¤¨ ¬¨ç¥áª®£® ¢ë¤¥«¥¨ï/®á¢®¡®¦¤¥¨ï ¯ ¬ï⨠¯à¨«®¦¥¨ï.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=========== ”ãªæ¨ï 66 - ०¨¬ ¯®«ãç¥¨ï ¤ ëå ª« ¢¨ âãàë. ==========
|
================= ”ãªæ¨ï 66 - à ¡®â á ª« ¢¨ âãன. =================
|
||||||
======================================================================
|
======================================================================
|
||||||
<EFBFBD>¥¦¨¬ ¢¢®¤ ¢«¨ï¥â १ã«ìâ âë çâ¥¨ï ª« ¢¨è äãªæ¨¥© 2
|
<EFBFBD>¥¦¨¬ ¢¢®¤ ¢«¨ï¥â १ã«ìâ âë çâ¥¨ï ª« ¢¨è äãªæ¨¥© 2.
|
||||||
¨ ¯®«ãç¥¨ï ¯®á«¥¤¥© ¦ ⮩ ª« ¢¨è¨ ¯®¤äãªæ¨¥© 12 äãªæ¨¨ 18.
|
|
||||||
<EFBFBD>ਠ§ £à㧪¥ ¯à®£à ¬¬ë ¤«ï ¥ñ ãáâ ¢«¨¢ ¥âáï ASCII-०¨¬ ¢¢®¤ .
|
<EFBFBD>ਠ§ £à㧪¥ ¯à®£à ¬¬ë ¤«ï ¥ñ ãáâ ¢«¨¢ ¥âáï ASCII-०¨¬ ¢¢®¤ .
|
||||||
|
|
||||||
------------------ <20>®¤äãªæ¨ï 1 - ãáâ ®¢¨âì ०¨¬. ------------------
|
-------- <20>®¤äãªæ¨ï 1 - ãáâ ®¢¨âì ०¨¬ ¢¢®¤ á ª« ¢¨ âãàë. ---------
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
* eax = 66 - ®¬¥à äãªæ¨¨
|
* eax = 66 - ®¬¥à äãªæ¨¨
|
||||||
* ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨
|
* ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
@ -3484,7 +3495,7 @@ IPC
|
|||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
* äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï
|
* äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï
|
||||||
|
|
||||||
------------------- <20>®¤äãªæ¨ï 2 - ¯®«ãç¨âì ०¨¬. -------------------
|
--------- <20>®¤äãªæ¨ï 2 - ¯®«ãç¨âì ०¨¬ ¢¢®¤ á ª« ¢¨ âãàë. ----------
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
* eax = 66 - ®¬¥à äãªæ¨¨
|
* eax = 66 - ®¬¥à äãªæ¨¨
|
||||||
* ebx = 2 - ®¬¥à ¯®¤äãªæ¨¨
|
* ebx = 2 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
@ -3508,6 +3519,52 @@ IPC
|
|||||||
* ¡¨â 8 (¬ ᪠0x100): ScrollLock ¢ª«îçñ
|
* ¡¨â 8 (¬ ᪠0x100): ScrollLock ¢ª«îçñ
|
||||||
* ¯à®ç¨¥ ¡¨âë á¡à®è¥ë
|
* ¯à®ç¨¥ ¡¨âë á¡à®è¥ë
|
||||||
|
|
||||||
|
----- <20>®¤äãªæ¨ï 4 - ãáâ ®¢¨âì ®¡é¥á¨á⥬ãî "£®àïçãî ª« ¢¨èã". -----
|
||||||
|
Ž ¦ ⨨ "£®àï祩 ª« ¢¨è¨" ¨§¢¥é îâáï ⮫쪮 ¯à¨«®¦¥¨ï,
|
||||||
|
ãáâ ®¢¨¢è¨¥ ¥ñ; ªâ¨¢®¥ ¯à¨«®¦¥¨¥ (ª ª®â®à®¬ã ¯®áâ㯠¥â
|
||||||
|
¢¥áì ®à¬ «ìë© ¢¢®¤) â ª¨å ª« ¢¨è ¥ ¯®«ãç ¥â.
|
||||||
|
ˆ§¢¥é¥¨¥ § ª«îç ¥âáï ¢ ¯®á뫪¥ ᮡëâ¨ï á ª®¤®¬ 2.
|
||||||
|
<EFBFBD>à®ç¨â âì "£®àïçãî ª« ¢¨èã" ¬®¦® â ª ¦¥, ª ª ¨ ®¡ëçãî, -
|
||||||
|
äãªæ¨¥© 2.
|
||||||
|
<EFBFBD> à ¬¥âàë:
|
||||||
|
* eax = 66 - ®¬¥à äãªæ¨¨
|
||||||
|
* ebx = 4 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
|
* cl § ¤ ñâ ᪠ª®¤ ª« ¢¨è¨;
|
||||||
|
¨á¯®«ì§ã©â¥ cl=0 ¤«ï § ¤ ¨ï ª®¬¡¨ 権 ⨯ Ctrl+Shift
|
||||||
|
* edx = 0xXYZ § ¤ ñâ ¢®§¬®¦ë¥ á®áâ®ï¨ï ã¯à ¢«ïîé¨å ª« ¢¨è:
|
||||||
|
* Z (¬« ¤è¨¥ 4 ¡¨â ) § ¤ ñâ á®áâ®ï¨¥ ª« ¢¨è LShift ¨ RShift:
|
||||||
|
* 0 = ¨ ®¤ ¨§ ª« ¢¨è ¥ ¤®«¦ ¡ëâì ¦ â ;
|
||||||
|
* 1 = ஢® ®¤ ¨§ ª« ¢¨è ¤®«¦ ¡ëâì ¦ â ;
|
||||||
|
* 2 = ®¡¥ ª« ¢¨è¨ ¤®«¦ë ¡ëâì ¦ âë;
|
||||||
|
* 3 = ¤®«¦ ¡ëâì ¦ â LShift, ® ¥ RShift;
|
||||||
|
* 4 = ¤®«¦ ¡ëâì ¦ â RShift, ® ¥ LShift
|
||||||
|
* Y - «®£¨ç® ¤«ï LCtrl ¨ RCtrl;
|
||||||
|
* X - «®£¨ç® ¤«ï LAlt ¨ RAlt
|
||||||
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
|
* eax=0 - ãᯥè®
|
||||||
|
* eax=1 - ᫨誮¬ ¬®£® "£®àïç¨å ª« ¢¨è" (¤®¯ã᪠¥âáï ¬ ªá¨¬ã¬ 256)
|
||||||
|
‡ ¬¥ç ¨ï:
|
||||||
|
* ƒ®àïç ï ª« ¢¨è ¬®¦¥â áà ¡ âë¢ âì «¨¡® ¯à¨ ¦ ⨨,
|
||||||
|
«¨¡® ¯à¨ ®â¯ã᪠¨¨. ‘ª ª®¤ ®â¯ã᪠¨ï ª« ¢¨è¨ 128 ¡®«ìè¥,
|
||||||
|
祬 ᪠ª®¤ ¦ â¨ï (â.¥. ãáâ ®¢«¥ áâ à訩 ¡¨â).
|
||||||
|
* <20>¥áª®«ìª® ¯à¨«®¦¥¨© ¬®£ãâ ãáâ ®¢¨âì ®¤ã ¨ âã ¦¥ ª®¬¡¨ æ¨î;
|
||||||
|
® ¦ ⨨ â ª®© ª®¬¡¨ 樨 ¡ã¤ãâ ¨§¢¥é âìáï ¢á¥ â ª¨¥ ¯à¨«®¦¥¨ï.
|
||||||
|
|
||||||
|
------ <20>®¤äãªæ¨ï 5 - 㤠«¨âì ãáâ ®¢«¥ãî "£®àïçãî ª« ¢¨èã". -------
|
||||||
|
<EFBFBD> à ¬¥âàë:
|
||||||
|
* eax = 66 - ®¬¥à äãªæ¨¨
|
||||||
|
* ebx = 5 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
|
* cl = ᪠ª®¤ ª« ¢¨è¨ ¨ edx = 0xXYZ â ª¨¥ ¦¥, ª ª ¨ ¢ ¯®¤äãªæ¨¨ 4
|
||||||
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
|
* eax = 0 - ãᯥè®
|
||||||
|
* eax = 1 - ¥â â ª®© £®àï祩 ª« ¢¨è¨
|
||||||
|
‡ ¬¥ç ¨ï:
|
||||||
|
* <20>ਠ§ ¢¥à襨¨ ¯à®æ¥áá /¯®â®ª 㤠«ïîâáï ¢á¥ ãáâ ®¢«¥ë¥ ¨¬
|
||||||
|
£®àï稥 ª« ¢¨è¨.
|
||||||
|
* ‚맮¢ äãªæ¨¨ ¥ ¢«¨ï¥â ¤à㣨¥ ¯à¨«®¦¥¨ï.
|
||||||
|
…᫨ ¤à㣮¥ ¯à¨«®¦¥¨¥ ®¯à¥¤¥«¨«® íâã ¦¥ ª®¬¡¨ æ¨î,
|
||||||
|
®® ¯®-¯à¥¦¥¬ã ¡ã¤¥â ¯®«ãç âì 㢥¤®¬«¥¨ï.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
============ ”ãªæ¨ï 67 - ¨§¬¥¨âì ¯®«®¦¥¨¥/à §¬¥àë ®ª . ===========
|
============ ”ãªæ¨ï 67 - ¨§¬¥¨âì ¯®«®¦¥¨¥/à §¬¥àë ®ª . ===========
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -4274,8 +4331,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
Š®¤ë ᮡë⨩:
|
Š®¤ë ᮡë⨩:
|
||||||
* 1 = á®®¡é¥¨¥ ® ¯¥à¥à¨á®¢ª¥ (á¡à áë¢ ¥âáï ¯à¨ ¢ë§®¢¥ äãªæ¨¨ 0)
|
* 1 = á®®¡é¥¨¥ ® ¯¥à¥à¨á®¢ª¥ (á¡à áë¢ ¥âáï ¯à¨ ¢ë§®¢¥ äãªæ¨¨ 0)
|
||||||
* 2 = ¦ â ª« ¢¨è ª« ¢¨ âãॠ(¯®áâ㯠¥â, ⮫쪮 ª®£¤ ®ª®
|
* 2 = ¦ â ª« ¢¨è ª« ¢¨ âãॠ(¯®áâ㯠¥â, ⮫쪮 ª®£¤ ®ª®
|
||||||
ªâ¨¢®; á¡à áë¢ ¥âáï, ª®£¤ ¢á¥ ª« ¢¨è¨ ¨§ ¡ãä¥à
|
ªâ¨¢®) ¨«¨ ¦ â "£®àïç ï ª« ¢¨è ";
|
||||||
áç¨â ë äãªæ¨¥© 2)
|
á¡à áë¢ ¥âáï, ª®£¤ ¢á¥ ª« ¢¨è¨ ¨§ ¡ãä¥à áç¨â ë äãªæ¨¥© 2
|
||||||
* 3 = ¦ â ª®¯ª , ®¯à¥¤¥«ñ ï à ¥¥ äãªæ¨¥© 8 (¨«¨ ª®¯ª
|
* 3 = ¦ â ª®¯ª , ®¯à¥¤¥«ñ ï à ¥¥ äãªæ¨¥© 8 (¨«¨ ª®¯ª
|
||||||
§ ªàëâ¨ï, ᮧ¤ ï ¥ï¢® äãªæ¨¥© 0; ª®¯ª ¬¨¨¬¨§ 樨
|
§ ªàëâ¨ï, ᮧ¤ ï ¥ï¢® äãªæ¨¥© 0; ª®¯ª ¬¨¨¬¨§ 樨
|
||||||
®¡à ¡ âë¢ ¥âáï á¨á⥬®© ¨ ® ¥© á®®¡é¥¨ï ¥ ¯à¨å®¤¨â;
|
®¡à ¡ âë¢ ¥âáï á¨á⥬®© ¨ ® ¥© á®®¡é¥¨ï ¥ ¯à¨å®¤¨â;
|
||||||
|
@ -69,12 +69,21 @@ get_event_for_app:
|
|||||||
movzx edx,word [0xC000+ecx*2]
|
movzx edx,word [0xC000+ecx*2]
|
||||||
mov eax, [0x3004]
|
mov eax, [0x3004]
|
||||||
cmp eax,edx
|
cmp eax,edx
|
||||||
jne no_eventoccur2
|
jne no_eventoccur2x
|
||||||
cmp [0xf400],byte 0
|
cmp [0xf400],byte 0
|
||||||
je no_eventoccur2
|
je no_eventoccur2x
|
||||||
|
eventoccur2:
|
||||||
popad
|
popad
|
||||||
mov eax,2
|
mov eax,2
|
||||||
ret
|
ret
|
||||||
|
no_eventoccur2x:
|
||||||
|
mov eax, hotkey_buffer
|
||||||
|
@@:
|
||||||
|
cmp [eax], ecx
|
||||||
|
jz eventoccur2
|
||||||
|
add eax, 8
|
||||||
|
cmp eax, hotkey_buffer+120*8
|
||||||
|
jb @b
|
||||||
no_eventoccur2:
|
no_eventoccur2:
|
||||||
|
|
||||||
;mov edi,[0x3010] ; BUTTON IN BUFFER
|
;mov edi,[0x3010] ; BUTTON IN BUFFER
|
||||||
|
@ -26,8 +26,64 @@ uglobal
|
|||||||
ctrl_alt_del db 0
|
ctrl_alt_del db 0
|
||||||
|
|
||||||
kb_lights db 0
|
kb_lights db 0
|
||||||
|
|
||||||
|
align 4
|
||||||
|
hotkey_scancodes rd 256 ; we have 256 scancodes
|
||||||
|
hotkey_list rd 256*4 ; max 256 defined hotkeys
|
||||||
|
hotkey_buffer rd 120*2 ; buffer for 120 hotkeys
|
||||||
endg
|
endg
|
||||||
|
|
||||||
|
iglobal
|
||||||
|
hotkey_tests dd hotkey_test0
|
||||||
|
dd hotkey_test1
|
||||||
|
dd hotkey_test2
|
||||||
|
dd hotkey_test3
|
||||||
|
dd hotkey_test4
|
||||||
|
hotkey_tests_num = 5
|
||||||
|
endg
|
||||||
|
|
||||||
|
hotkey_test0:
|
||||||
|
test al, al
|
||||||
|
setz al
|
||||||
|
ret
|
||||||
|
hotkey_test1:
|
||||||
|
test al, al
|
||||||
|
setnp al
|
||||||
|
ret
|
||||||
|
hotkey_test2:
|
||||||
|
cmp al, 3
|
||||||
|
setz al
|
||||||
|
ret
|
||||||
|
hotkey_test3:
|
||||||
|
cmp al, 1
|
||||||
|
setz al
|
||||||
|
ret
|
||||||
|
hotkey_test4:
|
||||||
|
cmp al, 2
|
||||||
|
setz al
|
||||||
|
ret
|
||||||
|
|
||||||
|
hotkey_do_test:
|
||||||
|
push eax
|
||||||
|
mov edx, [kb_state]
|
||||||
|
shr edx, cl
|
||||||
|
add cl, cl
|
||||||
|
mov eax, [eax+4]
|
||||||
|
shr eax, cl
|
||||||
|
and eax, 15
|
||||||
|
cmp al, hotkey_tests_num
|
||||||
|
jae .fail
|
||||||
|
xchg eax, edx
|
||||||
|
and al, 3
|
||||||
|
call [hotkey_tests + edx*4]
|
||||||
|
cmp al, 1
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
.fail:
|
||||||
|
stc
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
irq1:
|
irq1:
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
@ -44,52 +100,55 @@ irq1:
|
|||||||
in al,0x60
|
in al,0x60
|
||||||
mov [keyboard_data],al
|
mov [keyboard_data],al
|
||||||
|
|
||||||
|
; ch = scancode
|
||||||
|
; cl = ext_code
|
||||||
|
; bh = 0 - normal key
|
||||||
|
; bh = 1 - modifier (Shift/Ctrl/Alt)
|
||||||
|
; bh = 2 - extended code
|
||||||
|
|
||||||
mov ch,al
|
mov ch,al
|
||||||
cmp al,0xE0
|
cmp al,0xE0
|
||||||
je @f
|
je @f
|
||||||
cmp al,0xE1
|
cmp al,0xE1
|
||||||
jne .normal_code
|
jne .normal_code
|
||||||
@@: mov [ext_code],al
|
@@:
|
||||||
jmp .no_key.end
|
mov bh, 2
|
||||||
|
mov [ext_code], al
|
||||||
|
jmp .writekey
|
||||||
.normal_code:
|
.normal_code:
|
||||||
mov cl,[ext_code]
|
mov cl, 0
|
||||||
mov [ext_code],0
|
xchg cl, [ext_code]
|
||||||
and al,0x7F
|
and al,0x7F
|
||||||
|
mov bh, 1
|
||||||
@@: cmp al,0x2A
|
@@: cmp al,0x2A
|
||||||
jne @f
|
jne @f
|
||||||
cmp cl,0xE0
|
cmp cl,0xE0
|
||||||
je .no_key.end
|
je .writekey
|
||||||
mov eax,VKEY_LSHIFT
|
mov eax,VKEY_LSHIFT
|
||||||
jmp .no_key
|
jmp .modifier
|
||||||
@@: cmp al,0x36
|
@@: cmp al,0x36
|
||||||
jne @f
|
jne @f
|
||||||
cmp cl,0xE0
|
cmp cl,0xE0
|
||||||
je .no_key.end
|
je .writekey
|
||||||
mov eax,VKEY_RSHIFT
|
mov eax,VKEY_RSHIFT
|
||||||
jmp .no_key
|
jmp .modifier
|
||||||
@@: cmp al,0x38
|
@@: cmp al,0x38
|
||||||
jne @f
|
jne @f
|
||||||
cmp cl,0xE0
|
mov eax, VKEY_LALT
|
||||||
je .alt.r
|
test cl, cl
|
||||||
mov eax,VKEY_LALT
|
jz .modifier
|
||||||
jmp .no_key
|
mov al, VKEY_RALT
|
||||||
.alt.r:
|
jmp .modifier
|
||||||
mov eax,VKEY_RALT
|
|
||||||
jmp .no_key
|
|
||||||
@@: cmp al,0x1D
|
@@: cmp al,0x1D
|
||||||
jne @f
|
jne @f
|
||||||
cmp cl,0
|
mov eax, VKEY_LCONTROL
|
||||||
jne .ctrl.r
|
test cl, cl
|
||||||
mov eax,VKEY_LCONTROL
|
jz .modifier
|
||||||
jmp .no_key
|
mov al, VKEY_RCONTROL
|
||||||
.ctrl.r:
|
cmp cl, 0xE0
|
||||||
cmp cl,0xE1
|
jz .modifier
|
||||||
jne .ctrl.r.2
|
mov [ext_code], cl
|
||||||
mov [ext_code],cl
|
jmp .writekey
|
||||||
jmp .no_key.end
|
|
||||||
.ctrl.r.2:
|
|
||||||
mov eax,VKEY_RCONTROL
|
|
||||||
jmp .no_key
|
|
||||||
@@: cmp al,0x3A
|
@@: cmp al,0x3A
|
||||||
jne @f
|
jne @f
|
||||||
mov bl,4
|
mov bl,4
|
||||||
@ -97,8 +156,8 @@ irq1:
|
|||||||
jmp .no_key.xor
|
jmp .no_key.xor
|
||||||
@@: cmp al,0x45
|
@@: cmp al,0x45
|
||||||
jne @f
|
jne @f
|
||||||
cmp cl,0
|
test cl, cl
|
||||||
jne .no_key.end
|
jnz .writekey
|
||||||
mov bl,2
|
mov bl,2
|
||||||
mov eax,VKEY_NUMLOCK
|
mov eax,VKEY_NUMLOCK
|
||||||
jmp .no_key.xor
|
jmp .no_key.xor
|
||||||
@ -108,8 +167,8 @@ irq1:
|
|||||||
mov eax,VKEY_SCRLOCK
|
mov eax,VKEY_SCRLOCK
|
||||||
jmp .no_key.xor
|
jmp .no_key.xor
|
||||||
@@:
|
@@:
|
||||||
test ch,0x80
|
test ch,ch
|
||||||
jnz .no_key.end
|
js .writekey
|
||||||
movzx eax,ch ; plain key
|
movzx eax,ch ; plain key
|
||||||
mov bl,[keymap+eax]
|
mov bl,[keymap+eax]
|
||||||
mov edx,[kb_state]
|
mov edx,[kb_state]
|
||||||
@ -117,10 +176,9 @@ irq1:
|
|||||||
jz .noctrlaltdel
|
jz .noctrlaltdel
|
||||||
test dl,VKEY_ALT
|
test dl,VKEY_ALT
|
||||||
jz .noctrlaltdel
|
jz .noctrlaltdel
|
||||||
cmp bl,134+48
|
cmp ch,53h
|
||||||
jne .noctrlaltdel
|
jne .noctrlaltdel
|
||||||
mov [ctrl_alt_del],1
|
mov [ctrl_alt_del],1
|
||||||
jmp .no_key.end
|
|
||||||
.noctrlaltdel:
|
.noctrlaltdel:
|
||||||
test dl,VKEY_CONTROL ; ctrl on ?
|
test dl,VKEY_CONTROL ; ctrl on ?
|
||||||
jz @f
|
jz @f
|
||||||
@ -164,47 +222,90 @@ irq1:
|
|||||||
mov [0x2E0000+4096*12+0x10],edx
|
mov [0x2E0000+4096*12+0x10],edx
|
||||||
mov bl,0
|
mov bl,0
|
||||||
@@:
|
@@:
|
||||||
|
mov bh, 0
|
||||||
|
jmp .writekey
|
||||||
|
.modifier:
|
||||||
|
test ch, ch
|
||||||
|
js .modifier.up
|
||||||
|
or [kb_state], eax
|
||||||
|
jmp .writekey
|
||||||
|
.modifier.up:
|
||||||
|
not eax
|
||||||
|
and [kb_state], eax
|
||||||
|
jmp .writekey
|
||||||
|
.no_key.xor:
|
||||||
|
mov bh, 0
|
||||||
|
test ch, ch
|
||||||
|
js .writekey
|
||||||
|
xor [kb_state], eax
|
||||||
|
xor [kb_lights], bl
|
||||||
|
call set_lights
|
||||||
|
|
||||||
|
.writekey:
|
||||||
|
; test for system hotkeys
|
||||||
|
movzx eax, ch
|
||||||
|
cmp bh, 1
|
||||||
|
ja .nohotkey
|
||||||
|
jb @f
|
||||||
|
xor eax, eax
|
||||||
|
@@:
|
||||||
|
mov eax, [hotkey_scancodes + eax*4]
|
||||||
|
.hotkey_loop:
|
||||||
|
test eax, eax
|
||||||
|
jz .nohotkey
|
||||||
|
mov cl, 0
|
||||||
|
call hotkey_do_test
|
||||||
|
jc .hotkey_cont
|
||||||
|
mov cl, 2
|
||||||
|
call hotkey_do_test
|
||||||
|
jc .hotkey_cont
|
||||||
|
mov cl, 4
|
||||||
|
call hotkey_do_test
|
||||||
|
jnc .hotkey_found
|
||||||
|
.hotkey_cont:
|
||||||
|
mov eax, [eax]
|
||||||
|
jmp .hotkey_loop
|
||||||
|
.hotkey_found:
|
||||||
|
mov eax, [eax+8]
|
||||||
|
; put key in buffer for process in slot eax
|
||||||
|
mov edi, hotkey_buffer
|
||||||
|
@@:
|
||||||
|
cmp dword [edi], 0
|
||||||
|
jz .found_free
|
||||||
|
add edi, 8
|
||||||
|
cmp edi, hotkey_buffer+120*8
|
||||||
|
jb @b
|
||||||
|
; no free space - replace first entry
|
||||||
|
mov edi, hotkey_buffer
|
||||||
|
.found_free:
|
||||||
|
mov [edi], eax
|
||||||
|
movzx eax, ch
|
||||||
|
cmp bh, 1
|
||||||
|
jnz @f
|
||||||
|
xor eax, eax
|
||||||
|
@@:
|
||||||
|
mov [edi+4], ax
|
||||||
|
mov eax, [kb_state]
|
||||||
|
mov [edi+6], ax
|
||||||
|
jmp .exit.irq1
|
||||||
|
.nohotkey:
|
||||||
cmp [keyboard_mode],0 ; return from keymap
|
cmp [keyboard_mode],0 ; return from keymap
|
||||||
jne .no_key.end
|
jne .scancode
|
||||||
mov [keyboard_mode_sys],0
|
test bh, bh
|
||||||
cmp bl,0
|
jnz .exit.irq1
|
||||||
je .no_key.end
|
test bl, bl
|
||||||
|
jz .exit.irq1
|
||||||
|
jmp .dowrite
|
||||||
|
.scancode:
|
||||||
|
mov bl, ch
|
||||||
|
.dowrite:
|
||||||
movzx eax,byte[0xF400]
|
movzx eax,byte[0xF400]
|
||||||
cmp al,120
|
cmp al,120
|
||||||
jae .no_key.end
|
jae .exit.irq1
|
||||||
inc al
|
inc eax
|
||||||
mov [0xF400],al
|
mov [0xF400],al
|
||||||
mov [0xF400+eax],bl
|
mov [0xF400+eax],bl
|
||||||
|
|
||||||
jmp .no_key.end
|
|
||||||
|
|
||||||
.no_key:
|
|
||||||
test ch,0x80
|
|
||||||
jz .no_key.down
|
|
||||||
not eax
|
|
||||||
and [kb_state],eax
|
|
||||||
jmp .no_key.end
|
|
||||||
.no_key.xor:
|
|
||||||
test ch,0x80
|
|
||||||
jnz .no_key.end
|
|
||||||
xor [kb_state],eax
|
|
||||||
xor [kb_lights],bl
|
|
||||||
call set_lights
|
|
||||||
jmp .no_key.end
|
|
||||||
.no_key.down:
|
|
||||||
or [kb_state],eax
|
|
||||||
.no_key.end:
|
|
||||||
cmp [keyboard_mode],1 ; return scancode
|
|
||||||
jne .no_scancode
|
|
||||||
mov [keyboard_mode_sys],1
|
|
||||||
movzx eax,byte[0xF400]
|
|
||||||
cmp al,120
|
|
||||||
jae .no_scancode
|
|
||||||
inc al
|
|
||||||
mov [0xF400],al
|
|
||||||
mov [0xF400+eax],ch
|
|
||||||
.no_scancode:
|
|
||||||
|
|
||||||
.exit.irq1:
|
.exit.irq1:
|
||||||
mov [check_idle_semaphore],5
|
mov [check_idle_semaphore],5
|
||||||
|
|
||||||
|
@ -775,7 +775,7 @@ finit ;reset the registers, contents which are still equal RM
|
|||||||
mov al, 0xF3 ; set repeat rate & delay
|
mov al, 0xF3 ; set repeat rate & delay
|
||||||
call kb_write
|
call kb_write
|
||||||
call kb_read
|
call kb_read
|
||||||
mov al, 00100010b ; 24 500 ;00100100b ; 20 500
|
mov al, 0 ; 30 250 ;00100010b ; 24 500 ;00100100b ; 20 500
|
||||||
call kb_write
|
call kb_write
|
||||||
call kb_read
|
call kb_read
|
||||||
;// mike.dld [
|
;// mike.dld [
|
||||||
@ -826,7 +826,6 @@ osloop:
|
|||||||
|
|
||||||
call [draw_pointer]
|
call [draw_pointer]
|
||||||
call checkbuttons
|
call checkbuttons
|
||||||
call main_loop_sys_getkey
|
|
||||||
call checkwindows
|
call checkwindows
|
||||||
; call check_window_move_request
|
; call check_window_move_request
|
||||||
call checkmisc
|
call checkmisc
|
||||||
@ -2271,11 +2270,8 @@ sysfn_getdiskinfo: ; 18.11 = get disk info table
|
|||||||
rep movsd
|
rep movsd
|
||||||
ret
|
ret
|
||||||
|
|
||||||
sysfn_lastkey: ; 18.12 = get all key pressed with ALT
|
sysfn_lastkey: ; 18.12 = return 0 (backward compatibility)
|
||||||
mov eax,[last_key_press]
|
and dword [esp+36], 0
|
||||||
mov al,[keyboard_mode_sys]
|
|
||||||
mov [esp+36],eax
|
|
||||||
mov [last_key_press],0
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
sysfn_getversion: ; 18.13 = get kernel ID and version
|
sysfn_getversion: ; 18.13 = get kernel ID and version
|
||||||
@ -2324,8 +2320,6 @@ screen_workarea RECT
|
|||||||
;// mike.dld, 2006-29-01 ]
|
;// mike.dld, 2006-29-01 ]
|
||||||
window_minimize db 0
|
window_minimize db 0
|
||||||
sound_flag db 0
|
sound_flag db 0
|
||||||
last_key_press dd 0
|
|
||||||
keyboard_mode_sys db 0
|
|
||||||
endg
|
endg
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
@ -2340,15 +2334,6 @@ UID_NONE=0
|
|||||||
UID_MENUETOS=1 ;official
|
UID_MENUETOS=1 ;official
|
||||||
UID_KOLIBRI=2 ;russian
|
UID_KOLIBRI=2 ;russian
|
||||||
|
|
||||||
main_loop_sys_getkey:
|
|
||||||
cmp [0xf400],byte 0
|
|
||||||
je .finish
|
|
||||||
movzx eax,byte [0xf401]
|
|
||||||
shl eax,8
|
|
||||||
mov [last_key_press],eax
|
|
||||||
.finish:
|
|
||||||
ret
|
|
||||||
|
|
||||||
sys_cachetodiskette:
|
sys_cachetodiskette:
|
||||||
; pushad
|
; pushad
|
||||||
; cmp eax,1
|
; cmp eax,1
|
||||||
@ -2516,6 +2501,7 @@ align 4
|
|||||||
|
|
||||||
sys_getkey:
|
sys_getkey:
|
||||||
mov [esp+36],dword 1
|
mov [esp+36],dword 1
|
||||||
|
; test main buffer
|
||||||
mov ebx, [0x3000] ; TOP OF WINDOW STACK
|
mov ebx, [0x3000] ; TOP OF WINDOW STACK
|
||||||
movzx ecx,word [0xC000 + ebx * 2]
|
movzx ecx,word [0xC000 + ebx * 2]
|
||||||
mov edx,[0x3004]
|
mov edx,[0x3004]
|
||||||
@ -2538,27 +2524,27 @@ sys_getkey:
|
|||||||
mov ebx, 0xF401
|
mov ebx, 0xF401
|
||||||
call memmove
|
call memmove
|
||||||
pop eax
|
pop eax
|
||||||
mov [last_key_press],eax
|
.ret_eax:
|
||||||
|
|
||||||
mov eax,[kb_state]
|
|
||||||
and al,110000b
|
|
||||||
cmp al,100000b
|
|
||||||
je .yes_win_key
|
|
||||||
cmp al,10000b
|
|
||||||
je .yes_win_key
|
|
||||||
mov eax,[last_key_press]
|
|
||||||
jmp .no_win_key
|
|
||||||
; cmp ah,232
|
|
||||||
; je .yes_win_key
|
|
||||||
; cmp ah,233
|
|
||||||
; jne .no_win_key
|
|
||||||
.yes_win_key:
|
|
||||||
mov eax,1
|
|
||||||
.no_win_key:
|
|
||||||
mov [esp+36],eax
|
mov [esp+36],eax
|
||||||
.finish:
|
|
||||||
ret
|
ret
|
||||||
|
.finish:
|
||||||
|
; test hotkeys buffer
|
||||||
|
mov ecx, hotkey_buffer
|
||||||
|
@@:
|
||||||
|
cmp [ecx], ebx
|
||||||
|
jz .found
|
||||||
|
add ecx, 8
|
||||||
|
cmp ecx, hotkey_buffer+120*8
|
||||||
|
jb @b
|
||||||
|
ret
|
||||||
|
.found:
|
||||||
|
mov ax, [ecx+6]
|
||||||
|
shl eax, 16
|
||||||
|
mov ah, [ecx+4]
|
||||||
|
mov al, 2
|
||||||
|
and dword [ecx+4], 0
|
||||||
|
and dword [ecx], 0
|
||||||
|
jmp .ret_eax
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
@ -4395,26 +4381,23 @@ sys_trace:
|
|||||||
|
|
||||||
|
|
||||||
sys_process_def:
|
sys_process_def:
|
||||||
|
mov edi, [0x3000]
|
||||||
|
|
||||||
cmp eax,1 ; set keyboard mode
|
dec eax ; 1 = set keyboard mode
|
||||||
jne no_set_keyboard_setup
|
jne no_set_keyboard_setup
|
||||||
|
|
||||||
mov edi,[0x3000]
|
|
||||||
shl edi,8
|
shl edi,8
|
||||||
add edi,0x80000+0xB4
|
mov [edi+0x800B4],bl
|
||||||
mov [edi],bl
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
no_set_keyboard_setup:
|
no_set_keyboard_setup:
|
||||||
|
|
||||||
cmp eax,2 ; get keyboard mode
|
dec eax ; 2 = get keyboard mode
|
||||||
jne no_get_keyboard_setup
|
jne no_get_keyboard_setup
|
||||||
|
|
||||||
mov edi,[0x3000]
|
|
||||||
shl edi,8
|
shl edi,8
|
||||||
add edi,0x80000+0xB4
|
movzx eax, byte [0x800B4+edi]
|
||||||
movzx eax, byte [edi]
|
|
||||||
|
|
||||||
mov [esp+36],eax
|
mov [esp+36],eax
|
||||||
|
|
||||||
@ -4422,7 +4405,7 @@ sys_process_def:
|
|||||||
|
|
||||||
no_get_keyboard_setup:
|
no_get_keyboard_setup:
|
||||||
|
|
||||||
cmp eax,3 ; get keyboard ctrl, alt, shift
|
dec eax ; 3 = get keyboard ctrl, alt, shift
|
||||||
jne no_get_keyboard_cas
|
jne no_get_keyboard_cas
|
||||||
|
|
||||||
; xor eax,eax
|
; xor eax,eax
|
||||||
@ -4444,7 +4427,72 @@ sys_process_def:
|
|||||||
|
|
||||||
no_get_keyboard_cas:
|
no_get_keyboard_cas:
|
||||||
|
|
||||||
|
dec eax
|
||||||
|
jnz no_add_keyboard_hotkey
|
||||||
|
|
||||||
|
mov eax, hotkey_list
|
||||||
|
@@:
|
||||||
|
cmp dword [eax+8], 0
|
||||||
|
jz .found_free
|
||||||
|
add eax, 16
|
||||||
|
cmp eax, hotkey_list+16*256
|
||||||
|
jb @b
|
||||||
|
mov dword [esp+36], 1
|
||||||
|
ret
|
||||||
|
.found_free:
|
||||||
|
mov [eax+8], edi
|
||||||
|
mov [eax+4], ecx
|
||||||
|
movzx ebx, bl
|
||||||
|
lea ebx, [hotkey_scancodes+ebx*4]
|
||||||
|
mov ecx, [ebx]
|
||||||
|
mov [eax], ecx
|
||||||
|
mov [ebx], eax
|
||||||
|
mov [eax+12], ebx
|
||||||
|
jecxz @f
|
||||||
|
mov [ecx+12], eax
|
||||||
|
@@:
|
||||||
|
and dword [esp+36], 0
|
||||||
|
ret
|
||||||
|
|
||||||
|
no_add_keyboard_hotkey:
|
||||||
|
|
||||||
|
dec eax
|
||||||
|
jnz no_del_keyboard_hotkey
|
||||||
|
|
||||||
|
movzx ebx, bl
|
||||||
|
lea ebx, [hotkey_scancodes+ebx*4]
|
||||||
|
mov eax, [ebx]
|
||||||
|
.scan:
|
||||||
|
test eax, eax
|
||||||
|
jz .notfound
|
||||||
|
cmp [eax+8], edi
|
||||||
|
jnz .next
|
||||||
|
cmp [eax+4], ecx
|
||||||
|
jz .found
|
||||||
|
.next:
|
||||||
|
mov eax, [eax]
|
||||||
|
jmp .scan
|
||||||
|
.notfound:
|
||||||
|
mov dword [esp+36], 1
|
||||||
|
ret
|
||||||
|
.found:
|
||||||
|
mov ecx, [eax]
|
||||||
|
jecxz @f
|
||||||
|
mov edx, [eax+12]
|
||||||
|
mov [ecx+12], edx
|
||||||
|
@@:
|
||||||
|
mov ecx, [eax+12]
|
||||||
|
mov edx, [eax]
|
||||||
|
mov [ecx], edx
|
||||||
|
xor edx, edx
|
||||||
|
mov [eax+4], edx
|
||||||
|
mov [eax+8], edx
|
||||||
|
mov [eax+12], edx
|
||||||
|
mov [eax], edx
|
||||||
|
mov [esp+36], edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
no_del_keyboard_hotkey:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user