Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт апр 24, 2018 10:03 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 42 сообщения ]  На страницу Пред. 1 2 3 След.
Автор Сообщение
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Сб май 13, 2017 9:44 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
revision #6893

Именем фейспалма, ручная инициализация кучи больше не требуется.


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Сб май 13, 2017 10:10 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Ray
Извини, что отвечаю на русском языке ;)
Сейчас будет много текста...
buf2d конечно хорош, но он заточен больше под изображения. Скорее всего решить мою проблему с помощью библиотеки buf2d было нельзя.
Уточню задачу: мне нужно выводить в окно произвольную часть картинки (т.е. даны координаты и размеры, по которым нужно вырезать кусок изображения буфера). Всё, что в эту область не влазиет должно срезаться. Такой функции для работы внутри окна я не нашёл.

Ещё одна из проблем, с которой я столкнулся при рисовании в буфере, это вывод текста. Мне "хочется" уметь выводить текст как utf-8, так и cp. Система это уже умеет, и в API такой вывод в буфер предусмотрен. Но если текст длиннее области вывода, то он не обрезается на правой границе буфера - происходит его перенос на следующую строку пикселей, то есть продолжение текста вылазиет с левой стороны буфера. Причём такой проблемы нет, если текст не влазиет в буфер по высоте - в этом случае, текст корректно обрезается снизу, сверху он не выползает.
Мне понятна логика программировавшего это - если бы ему пришлось обрезать правую сторону, то алгоритм был бы геморойнее и сходу написать куда труднее, чем как сейчас.
Так как вносить правки в ядро требует сильных согласований (+может поломать программы) и это не стояло в моих планах, я решил проблему этого недостатка иначе. В koView текст печатается всё той же API функций 4, но такой длины, чтобы он не вылазил за правую границу. То есть если я понимаю, что очередной символ не влезет в ширину буфера, то я печатаю текст только до этого символа. Пока не учитывается скаллинг (т.к. это упирается на мой временный модуль fonts.inc и там ужасный код, надеюсь в ближайшее время заняться нормальной заменой этого модуля с учётом скаллинга текста).
В будущем возможно я или кто-то добавит вывод текста полностью в отдельный буфер или только не влазившего символа в отдельный буфер, а затем уже имеющимися функциями koView можно дорисовать только недостающую часть этого символа.
Поэтому koView велосипед, велосипед во спасение.

Интересно, если я ошибся и уже есть решение этих двух проблем, пожалуйста, напишите где я это просмотрел.


Pathoswithin
Отлично! Изменения на SVN увидел.


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вс май 14, 2017 4:15 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Вторую проблему решить не сложно, но если текст не влазит в буфер, то это же плохо в любом случае, а перенос в ядре делать жирно.


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вс май 14, 2017 8:08 am 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 301
Pathoswithin писал(а):
Вторую проблему решить не сложно, но если текст не влазит в буфер, то это же плохо в любом случае, а перенос в ядре делать жирно.
Напомню, что есть связанный баг - если текст выводится в окно и сильно туда не влезает - система или программа крешится (по моему и то и то).


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Ср май 17, 2017 11:05 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Исправил.
revision #6899


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Ср май 17, 2017 4:25 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Обычный тест вывода старых текстов - прошёл нормально. Работу в буфере ещё тестирую, отпишусь позже.

Не знаю связано или нет, но в новой версии из косяков появился артефакт в тенях на рабочем столе. Смотрите на тень в конце буквы R на скринах ниже. Один пиксель теней справа срезался (надо сказать, что это самое длинное слово на рабочем столе - отсеклось?).


Вложения:
стало.PNG
стало.PNG [ 2.07 КБ | 978 просмотров ]
было.PNG
было.PNG [ 1.71 КБ | 978 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Чт май 18, 2017 12:28 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Исправил.
revision #6900


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Чт май 18, 2017 1:43 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Pathoswithin,
оперативно, спасибо!

По поводу тестов буфера:
[+] тесты с текстом превышающим ширину буфера пройдены - отсечение невлазиющих символов работает корректно
[+] аналогичные тесты текста со смещением по X (положительным > 0) - успешно пройдены
[+] тестировался даже случай, когда ни один символ не влезает в буфер - текст не отображается, всё корректно

[-] При тесте со смещением по X и по Y было обнаружено, что приложение может вылетать. Для этого нужно выводить текст внизу буфера, чтобы он не влазил по высоте. Например, для текста utf16LE (код типа шрифта 2) высота изображения буфера 50 пикселей, тогда любой текст выводимый с координатой Y > 43 пикселей приведёт к вылету. Все тексты с координатой до Y=43 включительно, выводятся корректно. Это не зависит от того влезает ли текст по ширине или нет.
На скриншоте "ВыводТекста" показан приведённый выше корректный случай с Y=43. При увеличении Y на всего единицу приложение рухнет.

[-] Попытки вывода текста за пределами области буфера приводят к вылету приложения. Например, если ширина буфера в пикселях = 150, то при попытке вывода текста по координате Х > 150 (начиная со 151) приложение крешится.
-------------------------
На этом непосредственно перехожу к основной задаче - разработка ФМ.

Возможно я где-то ошибся, но предварительно - столкнулся с тем, что 70-ая функция 1 подфункция в корне не возвращает бит метки раздела.
Он всегда не установлен, вместо него у разделов установлен бит папки.

Структура блока данных входа каталога (БДВК):
* +0: dword: атрибуты файла
бит 3 ( маска 8 ): это не файл, а метка тома
(на заданном разделе встречается не более одного раза и только в корневой папке)


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

Пока идёт переход на koView, для любителей shell добавлен новый режим отображения "Консоль".
Теперь нажатием одной клавиши (по умолчанию F2) можно будет переключиться в консоль той же директории, в которой Вы работали.
Причём будет возможность задать цвета разным типам файлов и папок.
Надеюсь это будет востребовано и удобно. О поддерживаемых командах расскажу позже.


Вложения:
ПричёмЕстьПодсветкаТиповФайлов.PNG
ПричёмЕстьПодсветкаТиповФайлов.PNG [ 47 КБ | 943 просмотра ]
КонсольныйРежим.PNG
КонсольныйРежим.PNG [ 84.7 КБ | 943 просмотра ]
ВыводТекста.PNG
ВыводТекста.PNG [ 481 байт | 943 просмотра ]
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Пт май 19, 2017 12:07 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1202
Исправил документацию.

Не знаю, есть ли смысл делать такую валидацию, ведь это не помешает программе указать неправильные размеры буфера.


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Пт май 19, 2017 5:37 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Про 70-ую понял, тогда чуть позже (как буду добавлять в боковую панель инфу о выбранном файле) буду пробовать 5 подфункцию.

Насчёт буфера: в начале буфера есть его размеры, проверку выхода координат текста за пределы буфера сделать не сложно. Если просят рисовать за пределами, то ничего не делаем и переходим к выходу из функции.
Ширина теперь правильно отсекается (посимвольно). Кому потребуется попиксельно сможет это реализовать.

Что делать с текстом превышающим буфер по высоте - не знаю.
Если добавлять проверки, то должно быть проще всего не выводить такие тексты, которые не влезают в область. Для этого сравниваем: Ysize буфера и coordYtext+Htext (координата текста + высота текста). Если размер буфера больше или равен этой сумме параметров текста, то выводим текст в буфер, иначе к выходу из функции.
В идеале нужно рисовать только те пиксели текста, которые влезают в буфер. Для этого нужно полностью контролировать процесс вывода очередной строки пикселей символа. Тогда будет возможность понять, что очередная строка пикселей находится за пределами области и прекратить вывод/отрисовку. Для ядра это значительные лишние проверки.


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Сб май 20, 2017 9:58 am 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 301
варианты
1. не влезающую полностью строку не рисуй
2. бери больше буфер, Люк


Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вс фев 04, 2018 1:23 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Добрался снова до проекта и просидел всю ночь. Конечно много чего сломал, но полностью отделил консольный режим для удобства разработки. Буду добивать проект маленькими частями. Так же добавил исполнение скриптов, аналогично вводу Пользователя. Команд новых не завёз, более того временно сломал ввод русских букв, запуск исполняемых файлов, команду ls (не работает в корневой директории) и клипборд. Везде полностью используется кодировка номер 2: UTF 16 LE. В общем shell всё-равно круче, до него далеко, и мне он больше нравится. Но если кого-то заинтересует моя разработка, вот видео про скрипты: https://youtu.be/GL88Lnn8FB8
Список текущих кое-как работающих команд консольки:
  • ls <путь> -- получить список файлов внутри директории, если параметр <путь> пуст, то используется текущая директория;
  • print <строка> -- напечатать строку <строка> в консоль как есть;
  • echo <строка> -- напечатать строку как есть;
  • cd <путь> -- сменить текущую директорию на <путь>, переход в директорию <путь>;
  • run <имя файла> -- выполнить команды из файла скрипта (обычный текстовый файл);
  • cls -- очистить экран консоли;
  • clear -- очистить экран;
  • exit -- завершить, завершает работу приложения;
  • pwd -- отображает текущую директорию (печатает в консоль строкой).

Пример скриптового сценария:
Код:
cls
print This is start command file.
pwd
cd /rd/
pwd
ls
echo This is end command file.


В текущей реализации в конце обязательно должна быть одна пустая строка, так как команда выполняется после поступления символа 13. Код 10 в любом месте скрипта игнорируется.
Проект всё ещё на стадии прототипа.
Приложение тестировалось и разрабатывалось под revision #6900, поэтому может не работать в более ранних и поздних версиях.


Вложения:
Комментарий к файлу: Скачать жирненький файл текущей сборки можно тут. Исходники прибудут чуть позже.
cfm.kex [13.56 КБ]
19 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вс фев 04, 2018 8:42 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Небольшое обновление к предыдущему посту.
Добавил новые команды:
  • set-mouse-position -- устанавливает позицию курсора на центр экрана (в будущем станет принимать координаты, пока же игнорирует любые параметры);
  • minimize-all-windows -- минимизирует/сворачивает все окна;
  • call <полное имя файла> -- аналогично run, запускает скрипты/сценарии на исполнение;
  • reboot -- перезагрузка системы;
  • restart-kernel -- перезапуск ядра (из файла kernel.mnt на рамдиске);
  • shutdown -- выключение системы;
  • echo-on -- включить вывод команд (сама команда будет выведена в консоль);
  • echo-off -- отключить вывод команд (сама команда будет выведена в консоль).
Все команды могут быть использованы и в скриптах/сценариях.


Вложения:
Комментарий к файлу: Последняя версия для revision #6900. Включает в себя все обновления, описанные в посте далее (ниже).
cfm6900 [17.62 КБ]
9 скачиваний
Комментарий к файлу: Этот бинарник содержит только обновления из этого поста.
cfm [14.18 КБ]
11 скачиваний


Последний раз редактировалось theonlymirage Пн фев 05, 2018 6:59 pm, всего редактировалось 2 раза.
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Пн фев 05, 2018 6:31 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Собрал под новую #7136.
Добавлены команды:
  • iskef <полное имя файла> -- проверяет (по наличию сигнатуры 'MENUET01') является ли файл исполнимым файлом Колибри ОС, результат печатает строкой (true или false);
  • time -- выводит системное время строкой;
  • date -- выводит системную дату в консоль;
  • kill <pid> -- завершить процесс/поток по его идентификатору PID;
  • pause <число секунд> -- ничего не делать в течении заданных секунд (отменить/разбудить нельзя в отличие от команды sleep, которая появится позже);
  • set-mode <число режима> -- режим работы консоли ФМ: 0-в обычном окне, 1-во весь экран (эта функция создавалась для тех, кому не нужна оболочка и нужна только консоль, работы в этом направлении продолжатся, а пока окно просто максимизируется);
  • bgi-redraw -- перерисовать/обновить фон рабочего стола;
  • bgi-set-mode <число режима> -- задать режим отрисовки фона (не тестировалось): 1=замостить, 2=растянуть;
  • terminate <слот> -- завершить процесс/поток по его номеру слота;
  • get-core-version -- показать используемую версию ядра ОС;
  • get-free-ram -- отобразить размер свободной оперативной памяти в Кбайтах;
  • get-ram-size -- показать размер ОЗУ в Кбайтах;
  • get-mouse-speed -- отобразить текущее значение скорости мыши;
  • set-mouse-speed <число> -- задать скорость мыши;
  • get-mouse-sensitivity -- получить значение чувствительности мыши;
  • set-mouse-sensitivity <число> -- задать значение чувствительности мыши;
  • pslot <pid> -- получить номер слота нужного процесса/потока по его идентификатору PID;
  • eject <номер устройства> -- извлекает лоток привода (данная функция не была протестирована в работе).


Вложения:
cfm7136.kex [17.62 КБ]
10 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Mirage File Manager
СообщениеДобавлено: Вт фев 06, 2018 12:56 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 64
Почти починил запуск приложений. Теперь корректно работает, но пока нужно прописывать полное имя исполняемого файла (с путём). После пробела можно передать строку параметров для запускаемого приложения. Пример запуска шела, который затем запустит текстовый редактор:
Код:
/rd/1/shell /rd/1/tinypad

Добавил новые команды:
  • help -- выводит листинг доступных команд (в текущей реализации нет прокрутки, поэтому не влезает на экран);
  • mkdir <полное имя/путь> -- создать новую папку/директорию с указанным именем;
  • md <полное имя/путь> -- создаёт новый каталог/директорию;
  • rm <полное имя/путь> -- удаляет существующую папку/директорию (работает только если папка пуста);
  • current-color-scheme -- отображает на экране текущую цветовую схему раскраски консоли: показывает цвета и их значения (в том виде, как они заданы по умолчанию, изменить пока нельзя);
  • get-network-device-count -- показать кол-во сетевых устройств;
  • get-network-device-type <номер устройства> -- отобразить тип сетевого устройства по его номеру в списке (не тестировалось).
Ещё очень много недоработок и ошибок, но этой версией уже возможно пользоваться.


Вложения:
Комментарий к файлу: Руководство пользователя, собранное на коленке из постов выше.
cfm-man.ru.cp1251.txt [6.54 КБ]
11 скачиваний
cfm.kex [19.5 КБ]
10 скачиваний
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 42 сообщения ]  На страницу Пред. 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB