1 (изменено: Freeman, 28.05.2023 в 04:09)

Тема: Файловый навигатор fNav

Частично переписал одну из ранних версий Файлового навигатора(fNav)
для сборки с помощью Delphi.
Размер сжатого с помощью kpack приложения всего 9 килобайтов. 
Всё, что нужно, чтобы собрать приложение — просто запустить make.bat.
Приложение использует файлы FN.SET, FN.EXT, FNT.PNG, ICN.PNG, CUR.PNG — они должны лежать в папке вместе с программой, запустить приложение в KolibriOS можно из той же самой папки.
Если имеется компилятор Delphi(dcc32), то всё должно получиться — в папке будет создано приложение с расширением "kex".
misc.php?action=pun_attachment&item=95&download=0
   
В папке "objs" находятся необходимые для сборки obj-файлы, уже скомпилированные и готовые к использованию, и их исходный код(asm-файлы).
Если вдруг понадобится их изменить и пересобрать, то нужно запустить в той же папке compile.bat, для компиляции понадобится ассемблер NASM.
После компиляции obj-файлы будут сконвертированы утилитой coff2omf(находится в папке "tools") из формата MSCOFF в OMF. Эта утилита не поддерживает слишком длинные файловые имена.
В папке "tools" также находятся утилиты Pet, kpack и exe2kos, используемые в SDK.

На данный момент не реализовано:

  • копирование\удаление, создание\переименование, контекстное меню, то есть, функции: Cut, Copy, Paste, Delete, Create, PopUp

Также некоторые функции всё ещё нуждаются в доработке.

По поводу копирования файлов: когда приложение fNav только появилось, то буфера обмена(Clipboard) ещё не существовало в системе KolibriOS, поэтому на тот момент копирование было реализовано с учётом специфики самого приложения, но теперь уже лучше использовать именно системный буфер обмена, чтобы иметь возможность взаимодействия с другими программами.

Post's attachments

Иконка вложений FN.7z 148.71 Кб, 75 скачиваний с 2021-11-20 

FN.PNG, 36.91 Кб, 641 x 481
FN.PNG 36.91 Кб, 70 скачиваний с 2021-11-20 

2

Re: Файловый навигатор fNav

Появилась возможность легко использовать иконки 18x18 в программах: возможно, захочешь добавить их для тулбара, иконок, дисков, операций... http://board.kolibrios.org/viewtopic.ph … amp;t=4593
Не требует подключения libimg.

3

Re: Файловый навигатор fNav

Leency пишет:

Появилась возможность легко использовать иконки 18x18 в программах: возможно, захочешь добавить их для тулбара, иконок, дисков, операций... http://board.kolibrios.org/viewtopic.ph … amp;t=4593
Не требует подключения libimg.

Это потенциально удобно, но в целом не очень хорошая идея.

  • Во-первых, ограничение на размер 18x18 и 32x32, а в программе размер может быть и больше, и меньше, к тому же, libimg и так уже используется(курсоры мыши ведь ещё).

  • Во-вторых, "unpacked icons16.png with filled background by a working color" — как, можно заметить, иконки, используемые в списке файлов, имеют совсем другие цвета заливки: белый и синий — перекрашивать придётся в любом случае.

  • В-третьих, на сколько помню, после завершения процесса ядро автоматически очищает все хендлы, дескрипторы и т.п., это означает, что придётся постоянно держать запущенной программу @reshare, только лишь ради того, чтобы удержать именованную область памяти.
    И это при том, что и так существует ограничение на количество потоков  в системе.

Считаю такое решение в корне не верным.

Вот более правильное решение:
добавить в ядро возможность указания специального флага при создании Shared Memory, который бы говорил ядру о том, что такую память не нужно уничтожать после завершения процесса.
Тогда, можно после вызова @reshare смело её завершить, а именованная память останется.

Говоря проще:

CreateSharedMemory('ICONS18', NON_CLEANABLE);

а теперь после ExitProcess память остаётся доступной.

Нужно это сделать на уровне ядра, чтобы программы не висели зря в памяти.
Заливку цветом считаю мало полезной — заранее не возможно узнать, какой именно цвет понадобится.

Сама идея "вынести общие ресурсы за скобки" — хорошая, проблема только в реализации.
Помнится, раньше похожим способом уже было кое-что реализовано, но, как-то не прижилось решение.

Кстати, а что мешает хранить иконки не в png, а в plain binary сжатый KPACK-ом?
Грузить такое можно с помощью LoadFile(SysFn68.27).
Хотя с таким же успехом можно и в ядро запихнуть, по аналогии с ядерным шрифтом.

4

Re: Файловый навигатор fNav

> CreateSharedMemory('ICONS18', NON_CLEANABLE);
Отличная идея и однозначно истоит имплементации.

> ICONS18W
Cделано для удобства встраивания. ~70% фон если не белый, то будет именно work, для остальных придется заменять.
@reshare висит чтобы перекрашивать фон, если sc.work изменился.

> Кстати, а что мешает хранить иконки не в png, а в plain binary сжатый KPACK-ом?
Время распаковки.

Добавлено 2022-02-06 в 11:16

Сегодня был репорт от пользователя, кажется, это даже автор WIN98IF, что
fNav тот что в дистрибутиве не хочет переименовывать файлы на /hd0/1/ (NTFS), при том что на /tmp0/1/ (FAT32) переименовывает нормально. Можно это исправить?

5

Re: Файловый навигатор fNav

Leency, а разве для NTFS уже появилась такая возможность на уровне ядра?
Об этой проблеме известно было и раньше.

6

Re: Файловый навигатор fNav

Ааа... я уже и забыл про это ограничение NTFS, и про то, что в Еолайте переименовывает, т.к. я оставил старую реализацию с копированием файла на этот случай.