Page 8 of 13
Re: Общесистемный буфер обмена
Posted: Sun Dec 09, 2012 3:01 pm
by johnfound
Serge wrote:johnfound
Всё же кодировка для текста должна быть единственной. Иначе к каждой программе надо будет цеплять конвертер на все возможные варианты.
К каждой программе конвертер всегда будут цеплять. Конечно если не сделать его в ядре. А может стоит делать в ядре?...

Тогда можно использовать код от FreshLib. Очень компактен получился:
encodings.asm
Re: Общесистемный буфер обмена
Posted: Sun Dec 09, 2012 3:10 pm
by SoUrcerer
Это же только кириллица. А как насчет остальных языков? Лучше библиотеку, считаю.
Re: Общесистемный буфер обмена
Posted: Sun Dec 09, 2012 3:49 pm
by ilya
Думаю что данный буфер подходящий момент чтобы подправить fn eax=10 eax=11 чтобы они возвращали также и основные параметры событий. Ведь сейчас после ring0->ring3 switch происходит гарантированое и незамедлительное ring3->ring0->ring3
Сообщение(fn eax=10) о заполненом только-для-чтения буфере(ядро создало его нужного размера) приходит. Обработчик сообщения копирует куда ему надо(mov инструкции). И fn eax=10 выполняют чистку (в даном случае удаляют буфер если ctrl+c была кде-то ещё нажата.
Re: Общесистемный буфер обмена
Posted: Sun Dec 09, 2012 10:05 pm
by Freeman
Albom wrote:
1) Поместить данные в буфер. Через структуру.
dd type
dd size
dd address
По-моему, туда еще надо добавить dd custom_type, чтобы получилось:
Code: Select all
dd type
dd custom_type
dd size
dd address
В API и callback-функциях обычно предусматривают дополнительное поле, хранящее "пользовательские данные". Вот туда и можно будет класть кодировку для типа CF_TEXT. ОС его никак обрабатывать не будет, а приложениям рано или поздно придется цеплять всякие конверторы, раз проект выходит за рамки Рунета.
Поле кодировки может заполняться, например, строками '866', 0, или '1251', или 'UTF8', или даже 'Big5' или 'SJIS'. Встанет вопрос о регистре. А можно и числовые коды Windows класть, которые очень продуманны, скажу я вам. Будет преемственность.
Например, кто из вас знает, что числовые значения всяких STD_INPUT и STD_OUTPUT, прописанные в SDK большинства ОС, мало того что совпадают, так еще и не изменились еще со времен перфокарт и терминального вывода на бумажную ленту? Преемственность.
Re: Общесистемный буфер обмена
Posted: Sun Dec 09, 2012 10:19 pm
by Albom
Freeman wrote:По-моему, туда еще надо добавить dd custom_type, чтобы получилось:
Хорошо для расширяемости.
Freeman wrote:А можно и числовые коды Windows класть
А можно и свои числовые коды (0 - 866, 1 - 1251, 2 - utf8, ...) - вполне достаточно. И копировать не придётся.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 12:48 am
by Freeman
Albom wrote:А можно и свои числовые коды (0 - 866, 1 - 1251, 2 - utf8, ...) - вполне достаточно.
Ну, это уже известный спор натуральных ключей против искусственных. Спорить не будем.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 2:18 am
by Serge
ilya
Code: Select all
Ядро создаёт буфер и передаёт во владение приложению. Когда буфер будет ненужен приложение освободит его. Такое технически возможно в даный момент?
Это то же самое о чём я и писал.
Нельзя давать право приложению дёргать ф-цию для чтения буфера когда хочет. Только когда пользователь нажал ctrl+c в одном окне и ctrl+v вдругом.
А ещё когда пользователь выдрал пункт в меню, а ещё когда нажал кнопочку "Скопировать" и т.д. Не надо вводить ненужные ограничения. Ни в одной системе этого нет. Есть устоявшийся набор правил и все их применяют.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 2:36 am
by ilya
Приложение должно иметь доступ к буферу обмена если пользователь этого захотел. Как ты это собираешся определять?
Иначе приложение прочитает любую инфу не предназначеную для него, по таймеру, чем меньше промежуток тем лучше.
С остальным согласен, только, ядро никогда его не увеличит буфер, потому как посылающие приложение знает истиный размер и соответсвено его передаст.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 8:22 am
by Serge
Приложение должно иметь доступ к буферу обмена если пользователь этого захотел. Как ты это собираешся определять?
Так, как и везде. В обработчике событий от клавиатуры. В приложении разумеется.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 2:51 pm
by ilya
Так как и везде. В обработчике событий от клавиатуры. В приложении разумеется.
Опрос по таймеру попрежнему возможен так понимаю.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 4:42 pm
by CleverMouse
Serge wrote:И про кодировку текста. Использовать unicode или нет ?
Я за принудительную UTF8-изацию вообще всего.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 6:25 pm
by johnfound
CleverMouse wrote:Я за принудительную UTF8-изацию вообще всего.
Я тоже.
Re: Общесистемный буфер обмена
Posted: Mon Dec 10, 2012 7:09 pm
by punk_joker
CleverMouse wrote:
Я за принудительную UTF8-изацию вообще всего.
думаю многие за это
Re: Общесистемный буфер обмена
Posted: Tue Dec 11, 2012 2:14 am
by Serge
ilya wrote:Опрос по таймеру по прежнему возможен так понимаю.
Оно нигде не запрещено. Вопрос зачем ?
Я за принудительную UTF8-изацию вообще всего.
Кодировка переменной длины неудобна в обработке. Да и какой смысл, кириллица и всё не латинское ведь всё равно будет двумя байтами кодироваться.
Code: Select all
Unicode UTF-8:
0x00000000 — 0x0000007F: 0xxxxxxx
0x00000080 — 0x000007FF: 110xxxxx 10xxxxxx
0x00000800 — 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 — 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
. На цифрах и пробелах сэкономим немного и только.
Re: Общесистемный буфер обмена
Posted: Tue Dec 11, 2012 8:36 am
by johnfound
Дело не в экономией. UTF-8 обратно совместима с ANSI. (например FASM прекрасно компилирует UTF-8 исходник с кириллических текстах внутри) Большая часть кода не меняется вообще.
А UTF-16, если обрабатывать правильно на самом деле тоже является переменной длины и тоже неудобна в обработке.