Page 2 of 3

Re: Mirage File Manager

Posted: Sat May 13, 2017 9:44 am
by Pathoswithin
revision #6893

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

Re: Mirage File Manager

Posted: Sat May 13, 2017 10:10 pm
by theonlymirage
Ray
Извини, что отвечаю на русском языке ;)
Сейчас будет много текста...
buf2d конечно хорош, но он заточен больше под изображения. Скорее всего решить мою проблему с помощью библиотеки buf2d было нельзя.
Уточню задачу: мне нужно выводить в окно произвольную часть картинки (т.е. даны координаты и размеры, по которым нужно вырезать кусок изображения буфера). Всё, что в эту область не влазиет должно срезаться. Такой функции для работы внутри окна я не нашёл.

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

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


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

Re: Mirage File Manager

Posted: Sun May 14, 2017 4:15 am
by Pathoswithin
Вторую проблему решить не сложно, но если текст не влазит в буфер, то это же плохо в любом случае, а перенос в ядре делать жирно.

Re: Mirage File Manager

Posted: Sun May 14, 2017 8:08 am
by Siemargl
Pathoswithin wrote:Вторую проблему решить не сложно, но если текст не влазит в буфер, то это же плохо в любом случае, а перенос в ядре делать жирно.
Напомню, что есть связанный баг - если текст выводится в окно и сильно туда не влезает - система или программа крешится (по моему и то и то).

Re: Mirage File Manager

Posted: Wed May 17, 2017 11:05 am
by Pathoswithin
Исправил.
revision #6899

Re: Mirage File Manager

Posted: Wed May 17, 2017 4:25 pm
by theonlymirage
Обычный тест вывода старых текстов - прошёл нормально. Работу в буфере ещё тестирую, отпишусь позже.

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

Re: Mirage File Manager

Posted: Thu May 18, 2017 12:28 pm
by Pathoswithin
Исправил.
revision #6900

Re: Mirage File Manager

Posted: Thu May 18, 2017 1:43 pm
by theonlymirage
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) можно будет переключиться в консоль той же директории, в которой Вы работали.
Причём будет возможность задать цвета разным типам файлов и папок.
Надеюсь это будет востребовано и удобно. О поддерживаемых командах расскажу позже.

Re: Mirage File Manager

Posted: Fri May 19, 2017 12:07 pm
by Pathoswithin
Исправил документацию.

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

Re: Mirage File Manager

Posted: Fri May 19, 2017 5:37 pm
by theonlymirage
Про 70-ую понял, тогда чуть позже (как буду добавлять в боковую панель инфу о выбранном файле) буду пробовать 5 подфункцию.

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

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

Re: Mirage File Manager

Posted: Sat May 20, 2017 9:58 am
by Siemargl
варианты
1. не влезающую полностью строку не рисуй
2. бери больше буфер, Люк

Re: Mirage File Manager

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

Code: Select all

cls
print This is start command file.
pwd
cd /rd/
pwd
ls
echo This is end command file.

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

Re: Mirage File Manager

Posted: Sun Feb 04, 2018 8:42 pm
by theonlymirage
Небольшое обновление к предыдущему посту.
Добавил новые команды:
  • set-mouse-position -- устанавливает позицию курсора на центр экрана (в будущем станет принимать координаты, пока же игнорирует любые параметры);
  • minimize-all-windows -- минимизирует/сворачивает все окна;
  • call <полное имя файла> -- аналогично run, запускает скрипты/сценарии на исполнение;
  • reboot -- перезагрузка системы;
  • restart-kernel -- перезапуск ядра (из файла kernel.mnt на рамдиске);
  • shutdown -- выключение системы;
  • echo-on -- включить вывод команд (сама команда будет выведена в консоль);
  • echo-off -- отключить вывод команд (сама команда будет выведена в консоль).
Все команды могут быть использованы и в скриптах/сценариях.

Re: Mirage File Manager

Posted: Mon Feb 05, 2018 6:31 pm
by theonlymirage
Собрал под новую #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 <номер устройства> -- извлекает лоток привода (данная функция не была протестирована в работе).

Re: Mirage File Manager

Posted: Tue Feb 06, 2018 12:56 pm
by theonlymirage
Почти починил запуск приложений. Теперь корректно работает, но пока нужно прописывать полное имя исполняемого файла (с путём). После пробела можно передать строку параметров для запускаемого приложения. Пример запуска шела, который затем запустит текстовый редактор:

Code: Select all

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