Общесистемный буфер обмена

Internal structure and you change requests/suggestions
  • E-water wrote:А может лучше, своего рода, контейнер файлов? Ну типа папка, только её файлы в RAM.
    RAM-диск Колибри(/rd/1/) как раз является такой папкой в памяти. А буфер предназначен для обмена данными между приложениями без необходимости вводить имена файлов.
    E-water wrote:Для текста, хорошо бы прогу, которая могла бы эммулируя нажатия клавиш впечатывать текст(тогда не нужно делать поддержку буффера в прогах, для того что бы вставить текст)
    Да, согласен. Это может делать и сам сервис.

    bw
    Что плохо в текущей реализации интерфейса?
  • При чем здесь плохо, это разные вещи. Посмотри сначала.
    Если бы я предложил позаимствовать COM/DCOM, ты бы сказал - чем плох текущий интерфейс? Это просто интерфейсы разного порядка, COM и D-BUS это протоколы высокго уровня, если угодно. Ты ведь не сравниваешь IP и HTTP протоколы? Чем IP хуже HTTP?
    Вот например в IPC KOS предусмотрен интерфейс для доступа к сервисам по их именам или другим идентификатором (заранее известным), без дополнительных телодвижений вроде чтения pid из заранее подготовленного, на этот случай, файла?

    ..bw
  • bw
    Ясно.

    Вот новая версия, здесь есть вставка во все приложения через Ctrl-Alt-V.
    Attachments
    clip-0.2.7z (30.62 KiB)
    Downloaded 308 times
  • Прошло больше года...

    Вопрос: Кто-нибудь занимается темой? Не то что есть - вставка текста через эмуляцию, а полноценным буфером?

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

    З.Ы. Мне нравится идея процесса-сервера с буфером выделяемым посредством функции 68.22 (без участия функции 60).
  • Mario

    Не геморойтесь с расшареной памятью, делайте в ядре. Компактнее, быстрее и намного проще.
    Imho буфер обмена это функция оконной системы. Пока она часть ядра буфер тоже должен быть частью ядра.
  • Serge wrote:Imho буфер обмена это функция оконной системы
    а насколько это безопасно?
  • Albom

    Даже надёжней чем расшареная память. Для неё нужна синхронизация доступа к данным, а в Колибри таких примитивов нет.

    Т.е. если это ресурс статический и расшареный только на чтение: шрифт, битмап и т.п. будет работать замечательно, пока сервер не захочет изменить ресурс. Блокировки доступа нет. Единственный выход сделать счётчик версий для динамичных ресурсов и проверять до и после копирования в локальную память процесса.

    P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и прицип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.
  • Serge
    Imho буфер обмена это функция оконной системы
    Я не согласен. Мы взяли курс на уход от принципа "все в ядро".
    Буфер обмена не обязан быть частью оконной подсистемы. Он может передавать разные типы данных.
    P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и принцип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.
    Все решаемо, структура получится немного сложней, но все будет работать. Джигиты будут соблюдать правила, как и все!

    Ну, если уж на то пошло, что кто-то их не соблюдает, так ведь и система вообще не защищена от злого умысла. Пока что уродских действий больных на голову старателей не наблюдается. Я надеюсь и в дальнейшем таковых не будет.

    З.Ы. Ну, так никто и не ответил - занимается кто-нибудь вопросом?
  • Mario

    Так опиши алгоритм. Я действительно не вижу относительно простого и безопасного решения. На строгое соблюдение ПДД не надеюсь. И самый законопослушный водитель может заглохнуть на перекрёстке.
  • Mario wrote:Мы взяли курс на уход от принципа "все в ядро".
    Да, правильно. Но есть такие вещи, которые неплохо всё же было иметь в ядре... Вот моё сообщение в этой теме от 21 февраля 2008 года:

    Сделать системную ф-цию было бы хорошо. Потому что тогда работа с буфером будет стандартной и не потребуется дополнительных программ. Но данной реализацией, по моему мнению, должны заниматься разработчики ядра.
    Я вижу это так:
    В ebx можно передавать адрес такой структуры:

    dd ; номер подфункции (считать, записать)
    dd ; тип содержимого (текст, битмап, список файлов)
    dd ; объём содержимого в байтах
    dd ; адрес, по которому располагаются данные

    Список файлов можно сделать как в винде - файлы разделяются нулями, список заканчивается двойным нулём. Работать с таким списком очень удобно. И ещё хочу пояснить, что под словом "битмап" я понимаю файл bmp, а не только данные. Потому что из него можно извлечь размеры и глубину цвета.
    Хотя ранее (18 февраля 2008 года) я писал:
    по моему мнению, оптимальный вариант - приложение-монитор, выделяющее нужный объём памяти и указывающий какой тип информации хранится в буфере (текст, битмап, список файлов)
    Я и сейчас тоже за такую реализацию... Хотя сис. функцию использовать проще :)
  • Albom
    Хотя сис. функцию использовать проще
    Не согласен.
    1)Трудозатраты на организацию взаимодействия через системные функции или через такой же код реализованный посредством макроса, приблизительно одинаковы. Только в последнем случае не придется трогать ядро.
    2)Плодить баги дешевле на уровне приложения, поскольку вероятность грохнуть всю систему ниже. К тому же при появлении джигита не соблюдающего правила грохнуть и перезапустить поток-сервер отвечающий за механизм буфера обмена проще и быстрее, чем перезагружать всю систему, в которой на этот момент могут работать приложения, работу которых прерывать не желательно.
  • Mario

    В данном случе это будет баг уровня системы. Падающий сервис не намного приятней упавшего ядра.
    В худшем случае (не джигит а малолетний долбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями. Защитить ядро намного проще.
  • Защитить ядро намного проще.
    На аппаратном уровне через страницы или как-то по другому?
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Serge
    Падающий сервис не намного приятней упавшего ядра
    Не приятно согласен, но не фатально как в случае с ядром.
    В худшем случае (не джигит а малолетний долбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями.
    Таких вещей в системе предостаточно и без этого и даже текущее ядро можно уронить, в большинстве случаев это получается случайно. Дырки то все не исследованы, а даже не все известные заштопаны. А от малолетних и не совсем малолетних долботерористов не застрахованы даже более развитые системы. Единственно реальный выход - жесткий, я бы даже сказал жесточайший, контроль со стороны всего сообщества: раздача бананов и прекращение консультации.
    От лобовой атаки значительными силами - брутфорса, ничто не спасает.
    Защитить ядро намного проще.
    В том то и дело что если делать реализацию через ядро, то я сомневаюсь, что у меня хватит знаний о ядре, на реализацию полноценного буфера - только на один слот, с возможностью записи для всех. А вот для потока-сервиса я мог бы извернуться.
  • Who is online

    Users browsing this forum: No registered users and 15 guests