forked from KolibriOS/kolibrios
7bc0071f59
git-svn-id: svn://kolibrios.org@895 a494cfbc-eb01-0410-851d-a64ba20cac60
168 lines
6.9 KiB
Plaintext
168 lines
6.9 KiB
Plaintext
Ž¡é¥á¨áâ¥¬ë© ¡ãä¥à ®¡¬¥ ¤«ï Ž‘ Š®«¨¡à¨.
|
||
ˆä®à¬ æ¨ï ¤«ï à §à ¡®â稪®¢.
|
||
|
||
Šà ⪮: <20>ãä¥à ॠ«¨§®¢ ç¥à¥§ ¯à®æ¥áá-¤¥¬® ¨ IPC-á®®¡é¥¨ï.
|
||
„«ï ¯à®¢¥àª¨ 㦮 § ¯ãáâ¨âì @clip(¤¥¬®) ¨
|
||
(cliptest ¨ ¤®áªã ®â« ¤ª¨) ¨«¨ test2(¬®¦® ¥áª®«ìª®).
|
||
|
||
1. „¥¬® @clip ¨ ¥£® ª®¬ ¤ë.
|
||
|
||
„¥¬® @clip ॠ«¨§®¢ ª ª ¯à®æ¥áá, ¥ ᮧ¤ î騩 ®ª® (§ 祬 ®¨ ¥¬ã),
|
||
⮫쪮 á«ãè î騩 IPC-á®®¡é¥¨ï. „¥¬® ¯®¤¤¥à¦¨¢ ¥â ¤® 16 (MAX_FORMAT) ¡ãä¥à®¢ ¤«ï
|
||
à §«¨çëå ä®à¬ ⮢ ¤ ëå, ¨ ¤® 16,7 Œ¡ (MAX_SIZE) ¤ ëå ¢ ª ¦¤®¬ ¡ãä¥à¥
|
||
(¯ ¬ïâì ®â¢®¤¨âáï ¤¨ ¬¨ç¥áª¨).
|
||
Id ä®à¬ â ¤ ëå - ç¨á«® ®â 0 ¤® 65534 (§ 票¥ 65535 § १¥à¢¨à®¢ ®).
|
||
|
||
<EFBFBD>ਠ§ ¯ã᪥ ¤¥¬® § ¢¥àè ¥â ¢á¥ ¤à㣨¥ ¯à®æ¥ááë @clip.
|
||
|
||
Š®¬ ¤ë, ¯¥à¥¤ ¢ ¥¬ë¥ ¤¥¬®ã, ¨¬¥îâ ä®à¬ â:
|
||
|
||
[ Cmd: word | Format: word | Reserved: Dword | Data: ...]
|
||
|
||
£¤¥ Cmd - ª®¤ ª®¬ ¤ë,
|
||
Format - id ä®à¬ â ¤ ëå,
|
||
Reserved - ç⮠㣮¤® (¥ ¨á¯®«ì§ã¥âáï),
|
||
¨ Data - ¤ ë¥, á¬ëá« ª®â®àëå § ¢¨á¨â ®â ª®¬ ¤ë.
|
||
|
||
„¥¬® ¢®á¯à¨¨¬ ¥â á«¥¤ãî騥 ª®¬ ¤ë:
|
||
|
||
Š®¤ 1. Set Size. “ª § âì ¥®¡å®¤¨¬ë© à §¬¥à ¡ãä¥à ¤«ï ¯à¨¥¬ ¤ ëå. <20>® í⮩
|
||
ª®¬ ¤¥ ¤¥¬® ¯à¨ ¥®¡å®¤¨¬®á⨠à áè¨àï¥â ᢮© ¡ãä¥à ¤«ï IPC-á®®¡é¥¨©
|
||
(ᯮᮡ 㬥ìè¨âì ¡ãä¥à ¢ ⥪ã饩 ॠ«¨§ 樨 ¥â).
|
||
<EFBFBD> à ¬¥âà Data: 1 Dword, ᮤ¥à¦ 騩 à §¬¥à ¤ ëå ¤«ï ¯¥à¥¤ ç¨.
|
||
„«¨ ª®¬ ¤ë: 12 ¡ ©â.
|
||
|
||
Š®¤ 2. Set. <20>¥à¥¤ ç ¤ ëå. <20>® í⮩ ª®¬ ¤¥ ¤ ë¥ ª®¯¨àãîâáï ¢ ¯ ¬ïâì ¤¥¬® .
|
||
<EFBFBD> à ¬¥âà Data: ¤ ë¥, ª®â®àë¥ ã¦® ᪮¯¨à®¢ âì.
|
||
„«¨ ª®¬ ¤ë: 8 + (¤«¨ ¤ ëå) ¡ ©â.
|
||
|
||
Š®¤ 3. Get Size. <20>®«ãç¨âì à §¬¥à ¤ ëå, åà ïé¨åáï ¢ ¡ãä¥à¥ á 㪠§ ë¬ id
|
||
ä®à¬ â . <20>® í⮩ ª®¬ ¤¥ ¤¥¬® ®â¯à ¢«ï¥â ®â¢¥â®¥ IPC-á®®¡é¥¨¥ ¤«¨®© 4
|
||
¡ ©â , ᮤ¥à¦ 饥 à §¬¥à ¤ ëå ¢ ¡ãä¥à¥. …᫨ ¤ ë¥ ¢ ¡ãä¥à¥ ®âáãâáâ¢ãîâ,
|
||
¢ á®®¡é¥¨¨ 㪠§ë¢ ¥âáï à §¬¥à 0.
|
||
„«¨ ª®¬ ¤ë: 8 ¡ ©â.
|
||
|
||
Š®¤ 4. Get. <20>®«ãç¨âì ¤ ë¥ ¨§ ¡ãä¥à á 㪠§ ë¬ id ä®à¬ â . <20>® í⮩ ª®¬ ¤¥
|
||
¤¥¬® ®â¯à ¢«ï¥â ®â¢¥â®¥ IPC-á®®¡é¥¨¥ 㦮© ¤«¨ë á ¤ 묨 ¨§ ¡ãä¥à .
|
||
…᫨ ¤ ë¥ ¢ ¡ãä¥à¥ ®âáãâáâ¢ãîâ, ®â¢¥â®¥ á®®¡é¥¨¥ ¥ ®â¯à ¢«ï¥âáï.
|
||
„«¨ ª®¬ ¤ë: 8 ¡ ©â.
|
||
|
||
Š®¤ 5. Delete. Žç¨áâ¨âì ¡ãä¥à á 㪠§ ë¬ id ä®à¬ â . …᫨ 㪠§ âì
|
||
id ä®à¬ â = 0xFFFF, ¡ã¤ãâ ®ç¨é¥ë ¢á¥ ¡ãä¥àë.
|
||
„«¨ ª®¬ ¤ë: 8 ¡ ©â.
|
||
|
||
ˆáå®¤ë© ä ©« - @clip.asm. …᫨ à ᪮¬¬¥â¨à®¢ âì áâà®çªã
|
||
;define DEBUG TRUE
|
||
¨ § ª®¬¬¥â¨à®¢ âì á«¥¤ãîéãî, â® ¤¥¬® ç¥â ¯¨á âì ¬®£® ¡ãª®¢®ª ¤®áªã
|
||
®â« ¤ª¨, ¨ ¯® ¨¬ ¬®¦® ¡ã¤¥â çâ®-â® ¯®ïâì ® ¢®§¨ª îé¨å ®è¨¡ª å.
|
||
DEFAULT_SIZE - ç «ìë© à §¬¥à IPC-¡ãä¥à
|
||
MAX_SIZE - ®£à ¨ç¥¨¥ ¡ãä¥à
|
||
MAX_FORMAT - ç¨á«® à §«¨çëå ä®à¬ ⮢, ª®â®àë¥ ¬®¦® § áããâì ¢ ¤¥¬®
|
||
®¤®¢à¥¬¥® ( ¥á«¨ ¡®«ìè¥, ᣫîç¨â. ’®¦¥ ¤® ¯®ä¨ªá¨âì).
|
||
DELAY - § ¤¥à¦ª ¬¥¦¤ã ¯®¯ë⪠¬¨ ®â¯à ¢ª¨ á®®¡é¥¨ï, /100 ᥪ.
|
||
ATTEMPT - ª®«¨ç¥á⢮ ¯®¯ë⮪ ®â¯à ¢ª¨ á®®¡é¥¨ï § ï⮬㠨«¨ ¥ £®â®¢®¬ã
|
||
¯à®æ¥ááã.
|
||
|
||
|
||
2. clip.inc - ¡®à äãªæ¨© ¤«ï ¡®«¥¥ ¢ë᮪®ã஢¥£® ®¡é¥¨ï á ¤¥¬®®¬ @clip.
|
||
<EFBFBD>¥ «¨§®¢ ® ç⥨¥ ¡ãä¥à ¨ § ¯¨áì ¢ ¡ãä¥à.
|
||
|
||
<EFBFBD>ਬ¥à ¨á¯®«ì§®¢ ¨ï - cliptest.asm (¢ë¢®¤ ¤®áªã ®â« ¤ª¨) ¨
|
||
test2.asm.
|
||
|
||
<EFBFBD>ਠ¨á¯®«ì§®¢ ¨¨ clip.inc ¥®¡å®¤¨¬® 㪠§ âì á«¥¤ãî騥 § 票ï (ç¨á« ,
|
||
¥áâ¥á⢥®, ¬®£ãâ ¡ëâì ¤à㣨¥):
|
||
DEFAULT_MASK = 7 ; Œ ᪠ᮡë⨩ (á¬. äãªæ¨î 40) ¯® 㬮«ç ¨î ¤«ï
|
||
; ⥪ã饣® ¯®â®ª . <20>㦠, çâ®¡ë ¯®á«¥ ¯à¨¥¬
|
||
; IPC-á®®¡é¥¨ï (ª®£¤ ¬ ᪠¬¥ï¥âáï 01000000b)
|
||
; ¢®ááâ ®¢¨âì áâ àãî ¬ áªã ( ¯®«ãç¨âì ¬ áªã •‡ ª ª).
|
||
|
||
SEND_DELAY = 10 ; ¯ 㧠¬¥¦¤ã ¯®¯ë⪠¬¨ ¯à¨ ®â¯à ¢ª¥ á®®¡é¥¨ï ¤¥¬®ã
|
||
|
||
RECV_DELAY = 100 ; ¢à¥¬ï ®¦¨¤ ¨ï ®â¢¥â ®â ¤¥¬® (¥á«¨ § íâ® ¢à¥¬ï
|
||
; ¥ ¯à¨è¥« ®â¢¥â, â® ®è¨¡ª )
|
||
; ¢à¥¬ï - ¢ á®âëå ᥪã¤ë (ª ª ¤«ï äãªæ¨¨ 5).
|
||
|
||
ATTEMPT = 5 ; ª®«¨ç¥á⢮ ¯®¯ë⮪ ®â¯à ¢ª¨ á®®¡é¥¨ï, ¥á«¨ ¤¥¬®
|
||
; § ïâ
|
||
|
||
<EFBFBD>®á«¥ ¢ª«î票ï clip.inc áâ ®¢ïâáï ¤®áâã¯ë¬¨ äãªæ¨¨:
|
||
|
||
clipboard_init() - ¯®¨áª ¯à®æ¥áá @clip. <20>âã äãªæ¨î
|
||
¬®¦® ¢ë§ë¢ âì ¬®£®ªà â® ( ¯à¨¬¥à, ¥á«¨ ¤¥¬® ¥ 襫áï ¨«¨ ¡ë«
|
||
¯¥à¥§ ¯ãé¥), ® 1 à § ¢ë§¢ âì ®¡ï§ â¥«ì® ã¦®.
|
||
‚®§¢à é ¥â 1 ¯à¨ ãá¯¥å¥ ¨ 0 ¯à¨ ¥ã¤ ç¥ (¥ ©¤¥ ¤¥¬®).
|
||
|
||
clipboard_write(esi 㪠§ë¢ ¥â ¡ãä¥à ¢ ä®à¬ ⥠CLIP_BUFFER (á¬. ¤ «¥¥),
|
||
ax (á«®¢®) - id ä®à¬ â ) - § ¯¨áì ¤ ëå ¢ ¡ãä¥à ®¡¬¥ .
|
||
‚믮«ï¥â ª®¬ ¤ë 1 ¨ 2. ‚®§¢à é ¥â 1 ¯à¨ ãá¯¥å¥ ¨ 0 ¯à¨ ¥ã¤ ç¥
|
||
(¯à¨ç¨ë ¡ë¢ îâ à §ë¥: ¤¥¬® ¥ ¡ë« ©¤¥ ¨«¨ § ïâ ¨ â.¤.).
|
||
|
||
clipboard_read(esi 㪠§ë¢ ¥â ¡ãä¥à ¢ ä®à¬ ⥠CLIP_BUFFER (á¬. ¤ «¥¥),
|
||
ax (á«®¢®) - id ä®à¬ â ) - ç⥨¥ ¤ ëå ¨§ ¡ãä¥à ®¡¬¥ . ‚믮«ï¥â
|
||
ª®¬ ¤ë 3 ¨ 4. ‚®§¢à é ¥â ¢ eax 1 ¯à¨ ãᯥå¥, -1 ¯à¨ ¥å¢ ⪥ ¬¥áâ ¢
|
||
¡ãä¥à¥-¯à¨¥¬¨ª¥(ª®â®àë© ¢ í⮬ á«ãç ¥ ¥ ¬¥ï¥âáï) ¨ 0 ¯à¨ ¯à®ç¨å ®è¨¡ª å.
|
||
‚ edx(¯à¨ eax=1 ¨«¨ -1) ¢®§¢à é ¥âáï ¤¥©á⢨⥫ìë© à §¬¥à ¤ ëå ¢ ¡ãä¥à¥.
|
||
|
||
‡ ¬¥ç ¨¥. …᫨ ¯à¨«®¦¥¨¥ ¨á¯®«ì§ã¥â ¢å®¤ï騥 IPC ¥ ⮫쪮 ¤«ï à ¡®âë á
|
||
¡ãä¥à®¬ ®¡¬¥ , á«¥¤ã¥â ®¡à ¡ âë¢ âì á®®¡é¥¨ï ¤¥¬® @clip ¢àãçãî, â.ª.
|
||
¨ ç¥ ¬®¦¥â ¢®§¨ªãâì â ª ï á¨âã æ¨ï: á®®¡é¥¨¥ ®â ¤à㣮£® ¯à¨«®¦¥¨ï
|
||
¯®¯ ¤¥â ¢ ¡ãä¥à í⮣® ¯à¨«®¦¥¨ï ¤«ï á®®¡é¥¨© ®â ¤¥¬® ¡ãä¥à ,
|
||
¨ ¡ã¤¥â ¯à®¨£®à¨à®¢ ®.
|
||
|
||
’ ª¦¥ ¬®¦® ¨á¯®«ì§®¢ âì(¯®á«¥ ¢ë§®¢ clipboard_init) á«¥¤ãî騥 äãªæ¨¨ ¡®«¥¥
|
||
¨§ª®£® ã஢ï:
|
||
_ipc_send (esi 㪠§ë¢ ¥â ®¡ëçë© ¡ãä¥à, edx - ª®«¨ç¥á⢮ ¡ ©â).
|
||
Žâ¯à ¢«ï¥â IPC-á®®¡é¥¨¥ ¤¥¬®ã. Žâ«¨ç¨¥ ®â äãªæ¨¨ 60/2 ¢ ⮬, çâ® _ipc_send
|
||
¯®¢â®àï¥â ¥áª®«ìª® (â®ç¥¥, ATTEMPTS) à § ¯®¯ëâªã ®â¯à ¢ª¨, ¥á«¨ ¡ãä¥à ¤¥¬®
|
||
§ ïâ (ª®¤ 2) ¨«¨ ¯¥à¥¯®«¥ (ª®¤ 3), á ¯ 㧮© ¢ SEND_DELAY/100 ᥪã¤.
|
||
‚®§¢à é ¥â 1 ¯à¨ ãᯥå¥, 0 ¯à¨ ®è¨¡ª¥.
|
||
|
||
_ipc_recv(esi 㪠§ë¢ ¥â ¡ãä¥à ¢ ä®à¬ ⥠CLIP_BUFFER (á¬. ¤ «¥¥),
|
||
edx = ¬ ᪠ᮡë⨩ ¯®â®ª ¯® 㬮«ç ¨î).
|
||
†¤¥â á®®¡é¥¨ï ®â ¤¥¬® ¢ â¥ç¥¨¥ RECV_DELAY/100 ᥪã¤. <20>ਠãᯥå¥
|
||
१ã«ìâ â á®åà ï¥âáï ¢ esi.
|
||
‚®§¢à é ¥â 1 ¯à¨ ãᯥå¥, 0 ¯à¨ ®è¨¡ª¥.
|
||
|
||
”®à¬ â ¡ãä¥à ¤«ï à ¡®âë á ¡ãä¥à®¬ ®¡¬¥ :
|
||
CLIP_BUFFER
|
||
(+0) .size dd ? ; §¤¥áì ¤®«¦¥ ¡ëâì § ¯¨á à §¬¥à
|
||
; ᮡá⢥® ¡ãä¥à (N)
|
||
; ¯à¨ § ¯¨á¨ ¤ ëå ¢ ¡ãä¥à, ¥á«¨ 㦮
|
||
; ®â¯à ¢¨âì ¬¥ì襥 ª®«¨ç¥á⢮ ¡ ©â,
|
||
; ¢à¥¬¥® § ¯¨è¨â¥ íâ® ª®«¨ç¥á⢮ áî¤
|
||
; (á¬. ¯à¨¬¥à test2)
|
||
|
||
(+4) .sys1 dd ? ; \ í⨠¯®«ï ¨á¯®«ì§ãîâáï ¬®¤ã«¥¬ clip.inc
|
||
; - ¤«ï ¢ãâ२å 楫¥© ¨ ¥ ¤®«¦ë
|
||
(+8) .sys2 dd ? ; / ¬®¤¨ä¨æ¨à®¢ âìáï ¯à¨«®¦¥¨¥¬
|
||
|
||
(+12) .data db N dup(?); ᮡá⢥® ¤ ë¥ ¡ãä¥à
|
||
|
||
“¤ ç¨ ¢ ¯à®£à ¬¬¨à®¢ ¨¨ ¨ ®â« ¤ª¥!
|
||
|
||
; barsuk, 21.08.2008
|
||
|
||
|
||
|
||
|
||
@CLIP - ¤®¯®«¥¨¥. ‚¥àá¨ï 0.2.
|
||
|
||
<EFBFBD>¥ «¨§®¢ ¢®§¬®¦®áâì ¢áâ ¢ª¨ ⥪áâ ¢ ¯à¨«®¦¥¨ï, ¥ ¯®¤¤¥à¦¨¢ î騥 à ¡®âã
|
||
á @clip, ¯à¨ ¯®¬®é¨ äãªæ¨¨ 72.1. Ž¤ ª®, ¨§-§ ®á®¡¥®á⥩ ॠ«¨§ 樨,
|
||
¯à¨«®¦¥¨ï¬ ¯à¨å®¤¨â ª®¤ ¨§ edx, ¥§ ¢¨á¨¬® ®â ०¨¬ ¢¢®¤ (ascii/scancode).
|
||
Ÿ à¥è¨«, çâ® ¡®«ìè¨á⢮ ¯à¨«®¦¥¨©, ¢á¥ ¦¥, î§ îâ ०¨¬ ascii, ¨ ¯®í⮬ã
|
||
¢ë¡à « ¥£® ¨ ¤«ï @clip ( ⥠¯à¨«®¦¥¨ï, ª®â®àë¥ ¨á¯®«ì§ãîâ ०¨¬ ᪠-ª®¤®¢,
|
||
¯®«ãç â ¥¢¥àë© ¢¢®¤).
|
||
<EFBFBD>ë«® ¡ë ¥¯«®å® ¢¥á⨠¨§¬¥¥¨ï ¢ ï¤à® (å®âï ¡ë ¢®§¬®¦®áâì 㧠âì ç㦮©
|
||
०¨¬ ¢¢®¤ ).
|
||
|
||
‚áâ ¢ª ®áãé¥á⢫ï¥âáï ¦ ⨥¬ £®àï祩 ª« ¢¨è¨ ctrl-alt-v. ‘ ç « 㦮
|
||
§ ¯ãáâ¨âì ¯à¨«®¦¥¨¥, à ¡®â î饥 á @clip ( ¯à¨¬¥à, test2), ¨ ᪮¯¨à®¢ âì ¢
|
||
¡ãä¥à á id = 1 (®¡ëçë© â¥ªáâ) ª ª®©-«¨¡® ⥪áâ.
|
||
|
||
…é¥ ¬ëá«ì: ¤®¡ ¢¨âì ¢ eolite ( å®à®è® ¡ë ¨ kfar) ª®¯¨à®¢ ¨¥ ¢ ¡ãä¥à
|
||
⥪ã饣® ¯ã⨠¨ ¨¬¥¨ ä ©« ¯®¤ ªãàá®à®¬. Š®¬¯¨«ïæ¨ï ¢ fasm ¨ ᦠ⨥ ¢
|
||
kpack áâ ¥â 㤮¡¥¥.
|
||
|
||
; 08.09.2008 |