Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Apr 05, 2020 8:00 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 184 posts ]  Go to page Previous 14 5 6 7 813 Next
Author Message
PostPosted: Fri Dec 07, 2012 8:16 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Хорошо, сделаю. Но сначала надо API придумать.
Какие данные должен хранить буфер и в каком формате. Как читать и писать ?


Top
   
PostPosted: Fri Dec 07, 2012 8:42 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5109
Я не силён в придумывании API, что-то вроде:

=== Функция 73 ===
- Подфункция 1 - поместить данные в буфер обмена
- Подфункция 2 - прочитать данные
- Подфункция 3 - очистить буфер обмена

Обмен через структуру:
а) тип данных - 1 - число, 2 - строка, 3 - файл где есть адрес файла/его имя затем идут данные, 4 - просто двоичные данные
б) имя программы/её PID, которая поместила данные в буфер

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Dec 07, 2012 8:46 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Предлагаю использовать строку с MIME-типом в качестве типа данных. Кому нужно будет просто текст - будет её игнорировать. Вместо содержимого файла/файлов лучше хранить их адреса - будет куда быстрее. Хотя можно оба варианта.


Top
   
PostPosted: Fri Dec 07, 2012 9:02 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Я бы свел всё к трём типам:
1. Текстовая UTF-16 ( или 32 ? ) строка с указанием длины.
2. Битмап 24 и 32 bpp с указанием размеров.
3. Raw данные с укзанием размера. В этом случае может храниться всё что угодно, вначале следует заголовок стандартного размера, затем данные.

Ядро одновременно хранит по одному объекту каждого типа. Запись нового объекта уничтожает предыдущий.


Last edited by Serge on Fri Dec 07, 2012 9:29 pm, edited 1 time in total.

Top
   
PostPosted: Fri Dec 07, 2012 9:07 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5109
Нормально, а имя программы, которая поместила данные в буфер и её PID?

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Dec 07, 2012 9:09 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
А зачем ? Не проблема конечно.


Top
   
PostPosted: Fri Dec 07, 2012 9:16 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
А как узнать, что вставлять? По ctrl+shift+v можно организовать помещение asciiz-строки в буфер клавиш, полученных от клавы?


Top
   
PostPosted: Fri Dec 07, 2012 9:27 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Это сама программа должна обрабатывать нажатие клавиш. И потом читать буфер обмена.
Кстати строка должна быть в unicode.


Top
   
PostPosted: Fri Dec 07, 2012 9:32 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5109
Serge wrote:
А зачем ? Не проблема конечно.

Я думаю, пригодиться. Можно будет даже организовать чат между программами по типу IPC, только быстрее и проще. Ещё могут быть скопированые специфические данные для какой-то конкретной программы.

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Dec 07, 2012 9:35 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Такой вариант:


SysFnXX: Работа с общесистемным буфером обмена
eax = XX

Подфункция 1: Скопировать в буфер
ebx = 1
ecx = количество копируемых байт
edx = тип данных
esi = указатель на копируемые данные

Подфункция 2: Прочитать из буфера
ebx = 2
ecx = количество читаемых байт
edi = указатель на буфер-приёмник

Подфункция 3: Узнать тип данных в буфере
ebx = 3

Подфункция 4: Узнать количество байт в буфере
ebx = 4

Подфункция 5: Очистить буфер
ebx = 5


Соглашение о типах только между приложениями. Ядру должно быть всё равно что в буфере.
Сначала приложение узнаёт тип данных, и если оно может с ним работать, то читает данные.

Какой будет максимально возможный размер буфера?
А то кто-нибудь скопирует туда очень много и будет оно там висеть.

PID программы, поместившей данные, думаю, что не нужен.



Подфункции 3 и 4 можно объединить в одну "Получить информацию о данных буфера".
Возвращаемые значения: eax = тип данных; edx = количество байт.


Top
   
PostPosted: Fri Dec 07, 2012 9:53 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Можно будет даже организовать чат между программами по типу IPC, только быстрее и проще.
Так и подумал. Вот за это надо будет сразу бить по рукам. Для IPC есть свои функции. Если они кривые и неудобные сделайте новые прямые и удобные.


Top
   
PostPosted: Fri Dec 07, 2012 9:55 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
0CodErr
Прежде чем работать с буфером его надо заблокировать. А потом разблокировать.


Top
   
PostPosted: Fri Dec 07, 2012 10:25 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Serge wrote:
Если они кривые и неудобные сделайте новые прямые и удобные.

Ты это о руках, конечно?:)


Top
   
PostPosted: Fri Dec 07, 2012 10:47 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Думаю надо делать два отдельных режима хранения текста. ASCIIZ с указанием локали (кодовой таблицы) и unicode.


Top
   
PostPosted: Fri Dec 07, 2012 10:48 pm 
Offline

Joined: Fri Feb 18, 2011 3:13 pm
Posts: 201
Serge wrote:
0CodErr
Прежде чем работать с буфером его надо заблокировать. А потом разблокировать.


О синхронизации должно заботится ядро ИМХО. Для приложении все должно работать прозрачно.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 184 posts ]  Go to page Previous 14 5 6 7 813 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited