kolibrios/programs/system/clip/trunk/clip.txt
barsuk 7bc0071f59 uploaded @clip - global clipboard
git-svn-id: svn://kolibrios.org@895 a494cfbc-eb01-0410-851d-a64ba20cac60
2008-11-03 01:18:10 +00:00

168 lines
6.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Ž¡é¥á¨á⥬­ë© ¡ãä¥à ®¡¬¥­  ¤«ï Ž‘ Š®«¨¡à¨.
ˆ­ä®à¬ æ¨ï ¤«ï ࠧࠡ®â稪®¢.
Šà âª®: <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