LINUX.ORG.RU

DOS Navigator портирован на Linux

 , , , turbo vision,


3

2

Разработчик @unxed, неоднократно предпринимавший попытки запустить двухпанельный файловый менеджер DOS Navigator под Linux, добился, наконец, успеха. Для решения проблемы лицензионной чистоты встроенная модифицированная библиотека Turbo Vision для Паскаля, никогда не публиковавшаяся под открытой лицензией, была заменена на рерайт современного форка доступной легально C++-версии, с переходом на UTF-8 и современную классовую архитектуру взамен характерной для TV, но практически не применяющейся сегодня, объектной.

Заявлена работоспособность базовых функций, таких как навигация по панелям и копирование файлов.

Для поддержки UTF-8 в DOS-сборках применяется специально разработанный для этого DOS UTF8 API, уже добавленный в DOSBox-X.

Отдельно стоит отметить порт на Linux Volkov Commander, предпринятый этим же разработчиком. Используется простой эмулятор 8088. Вывод рисуется в консоль за счёт скрейпинга видеопамяти текстового режима по аналогии с тем, как WinPTY скрейпил консоль Windows.

>>> DOS Navigator 1.20



Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 3)
Ответ на: комментарий от Saakx

На самом деле, если строго формулировать, то это особенность не линуксовых терминалов, а DEC VTxxx-совместимых.

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

firkax ★★★★★
()
Ответ на: комментарий от wandrien

Ты вместо сарказма лучше скажи прямо.

i-rinat ★★★★★
()
Ответ на: комментарий от Hiddenman

До сих пор иногда захожу посмотреть на то, как в 19 лет я мог ночами без интернетов и с единственной книжкой под рукой мог кропотливо писать даже огромную документацию для проекта, не говоря уж о коде

В 19 лет всё по колено, я также работал :)

который отлаживал просто методом тыка ночами напролет.

Метод тыка конечно хорош, но как-то оно не очень даже в 19 лет.

Сил и энтузиазма было нескончаемое количество :)

Вот это точно.

anc ★★★★★
()
Ответ на: комментарий от unxed

Сжёг 3/4 недельного Клода Макса, но доделал НОРМАЛЬНО. Всё, остатки спижженного кода вычищены, а заодно и FP IDE допереведена на мой TV окончательно, и всё это покрыто тестами. Скрипты аудита тоже доработаны, чтоб больше ничего не просачивалось.

Выводы на будущее:

  1. Модели уровня Sonnet для такой работы слабоваты. Невнимательные, пиздят код под копирайтом.
  2. Начинать надо сразу с максимально параноидальных скриптов аудита, чтобы спижженный код отлавливался сразу, а не когда поверх него дофига всего выстроено.
unxed
() автор топика
Ответ на: комментарий от unxed

… долбаный Соннет действительно спиздил код…

Нецензурная лексика на LOR’е не приветствуется. Лучше сформулируйте как-то так:

… долбаный Соннет действительно стащил/спёр код…

Mischutka ★★★★★
()
Ответ на: комментарий от Mischutka

стащил/спёр

тогда уж свагиналил ...

sunjob ★★★★★
()
Ответ на: комментарий от unxed

Редактор перепишу с нуля

А magiblot/turbo не годится как база?

GAMer ★★★★★
()
Ответ на: комментарий от GAMer

Нет, на pdp-11 писали в простом экраном редакторе.

ДВК/БК/УКНЦ за PDP-11 считаем? )

Не, они самостоятельно работать могли…

anc ★★★★★
()
Ответ на: комментарий от anc

Метод тыка конечно хорош, но как-то оно не очень даже в 19 лет.

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

Помню, я не знал о какой-то особенности Паскаля, упустил ее или она не была описана в той книжке. Кажется, это был const. И изобрел какой-то свой способ сложный, вроде как постоянно указатель туда-сюда передавал при вызове функций моих, в которых нужно было менять/читать переменную. И только потом уже где-то наткнулся на описание, но менять архитектуру уже было поздно. Да и работало оно :)

Hiddenman ★
()
Ответ на: комментарий от Hiddenman

Вот честно непонял какое отношение const имеет к изменению переменных передаваемых в функцию.

anc ★★★★★
()
Ответ на: комментарий от anc

Вот честно непонял какое отношение const имеет к изменению переменных передаваемых в функцию.

Да я и сам не помню, 30 лет почти прошло. Я с тех пор на Паскале и не писал и полностью его забыл. Звучит странно, согласен. Наверное, не const таки. Хотя почему-то припоминается именно она. Там вроде бы смысл был в том, что я в цикле вызываю одну и ту же функцию в стиле ForEachXXX и в процессе работы этих вызовов мне нужно было, чтобы некая переменная была в одном namespace между всеми вызовами и читалась и/или менялась именно она, а не новый экземпляр каждый раз.

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

Пример функций, идущих подряд и вызывающихся одинаково:

Procedure ForEachAutoUpdateSegment(Pnt:Pointer);
Var
  Mask:        String;
Begin
  Mask:=PString(Pnt)^;
  ExpandString(Mask);
  Mask:=StrTrim(Mask);
  If Mask<>'' Then
          ConditionalAutoCreateSegmentsFromMask(Mask);
 End;

Procedure ForEachAutoCreateSegment(Pnt:Pointer);
Var
   Mask:        String;
Begin
     Mask:=PString(Pnt)^;
     ExpandString(Mask);
     Mask:=StrTrim(Mask);
     If Mask<>'' Then
        ConditionalAutoCreateSegmentsFromMask(Mask);
End;

Procedure ForEachForceAutoCreateSegment(Pnt:Pointer);
Var
   Mask:        String;
Begin
     Mask:=PString(Pnt)^;
     ExpandString(Mask);
     Mask:=StrTrim(Mask);
     If Mask<>'' Then
        ForcedAutoCreateSegmentsFromMask(Mask);
End;

Вот кажется эту Mask и можно/нужно было где-то объявить как const (хотя казалось, причем тут const?) или как некую глобальную переменную (хотя вроде в Паскале она и так глобальна по умолчанию). В общем, хоть убей, не помню, но точно помню, что в этом месте :)

Да и забыл я Паскаль как раз примерно в 1999 году. Не знал и забыл, как говорили наши учителя в школе :)

P.S. Написал этот комментарий в 4 утра. Лег спать. Но вот то старое чувство «не разобрался, значит не имеешь права спать» не давало покоя. Вдруг вспомнил, что const был как раз в аргументах. Зашел, загуглил, проверил и точно:

ключевое слово const перед формальным параметром функции означает, что аргумент передается по ссылке (оптимизировано по памяти для больших объектов), но при этом доступен только для чтения внутри функции.

Вот эту Mask мне и нужно было передавать как MyFunction(const Mask: String).

Hiddenman ★
()
Последнее исправление: Hiddenman (всего исправлений: 3)
Ответ на: комментарий от sunjob

… особенно изменяемые константы! :о)

Ну вы ж знаете, в военное время не только «число Пи достигает четырех», но и константы могут изменяться :)

Hiddenman ★
()
Ответ на: комментарий от Hiddenman
program main;
{$mode objfpc}
uses Classes, SysUtils;

type 
dbg_class = class
procedure prc();
end;

procedure dbg_class.prc();
const x:integer = 0;
begin
inc(x);
writeln('x = ', IntToStr(x));
end;

var 
a1,a2,a3:dbg_class;

begin
writeln('### dbg static ###');

a1 := dbg_class.Create();
a2 := dbg_class.Create();
a3 := dbg_class.Create();
a1.prc();
a2.prc();
a3.prc();
end.


код на fpc :o)

sunjob ★★★★★
()
Ответ на: комментарий от Hiddenman

Спасибо за подробное пояснение!

anc ★★★★★
()
Ответ на: комментарий от Hiddenman

может как раз таки механизм типизированных const которые в трубе были own иницилизированными переменными - что делало их синглтонами места

qulinxao3 ★☆
()
Ответ на: комментарий от Hiddenman

пусть эпсилон это … нет эпсилон слишком мало, пусть алеф это … нет алеф слишком уж пусть иксе

qulinxao3 ★☆
()
Ответ на: комментарий от sunjob

код на fpc :o)

Отличное предложение. Проверять его, я конечно не буду (c)

В итоге что выведет-то?

Hiddenman ★
()
Последнее исправление: Hiddenman (всего исправлений: 1)
Ответ на: комментарий от Hiddenman

В итоге что выведет-то?

на любом техническом форуме это звучит как стеб! вы издеваетесь? :о)
п.с. разговор был про изменяемые константы:

x = 1
x = 2
x = 3

п.с.2

Проверять ... я ... не буду

не очень-то и хотелось! :о)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

на любом техническом форуме это звучит как стеб! вы издеваетесь? :о)п.с. разговор был про изменяемые константы:

Это - что именно это? Ну я предполагал, что такой вывод и будет. Хотя, наверное, не очень однозначно и понятно, почему так.

Hiddenman ★
()
Ответ на: комментарий от Hiddenman

Ну я предполагал

зачем спрашивали?!

Это - что именно это

ну как-бы человеку на техническом форуме такое спрашивать... не пристало.
копи-паста, сборка, запуск...(и ни каких вопросов)... если только нет под рукой компа/fpc ...

не очень однозначно и понятно, почему так

потому-то «константа» глобальная (хоть и «видна» только внутри функции), и одна на весь модуль... (если коротко, если что, спецы подтянутся и поправят :о)

p.s. вы про константы вспомнили, я в догонку привел пример из «той-же» оперы

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 5)
Ответ на: комментарий от i-rinat
angel_il ★★★★★
()
Последнее исправление: angel_il (всего исправлений: 1)
Ответ на: комментарий от wandrien

так может собеседник не понял в чем проблема после прочтения сообщения, вот и уточнил, могло быть такое? )

angel_il ★★★★★
()
Ответ на: комментарий от unxed

На опеннете очень токсично нынче.

всегда было )

angel_il ★★★★★
()
Ответ на: комментарий от wandrien

А DOS Navigator обеспечивает полноценный оконный интерфейс псевдографикой, это была по тем временам мини-оболочка, а не просто ФМ.

О, да. Главное, там был крутейший тетрис! И кажется, его можно было складывать, пока файлы копируются (да, в ДОСе).

Имела потенциал в полноценную оболочку вырасти, но не сложилось.

Они, мне кажется, чуток опоздали с открытием исходников.

hobbit ★★★★★
()
Ответ на: комментарий от unxed

Модели уровня Sonnet для такой работы слабоваты. Невнимательные, п-т (воруют) код под копирайтом.

Тейк требует уточнения. Как показала практика, даже более мощные модели подвержены этому эффекту; по-видимому, он происходит из самой природы LLM, для которых корпус обучающих материалов часто оказывается весомее требований промпта.

И ещё в предыдущую итерацию переписывания TV модель вычистила дублирующийся с проприетарным код (из репозитория tv), но не вычистила унаследованный от него в репозитории tv3 (поскольку там переход с объектов на классы, механическая проверка заимствований это не ловит), причем это уже Опус 5.5 попался так.

Решил подойти к задаче с другой стороны. Сделал ещё одну итерацию реимплементации TV и терминала для неё на основе плюсовой версии magiblot и его же tvterm, снова на Sonnet, но без цепочки «Плюсы -> Паскаль (объекты), как-в-BP -> Паскаль (классы), как сейчас у моих DN и консольной FP IDE», сразу из плюсов в паскаль-на-классах. Поскольку версии Turbo Vision на классах в природе не существовало, это представляется самым надёжным способом исключить срисовку моделями кода «по памяти» окончательно (скрипты для механического аудита по цепочкам токенов впрочем тоже остаются на месте в качестве дополнительной страховочной меры для отлова случайных совпадений, например).

Соответственно, версии TV на объектах у меня больше не будет, и потому что создает риск нарушения авторских прав в силу природы LLM, и потому что диалект всё равно не развивается. Репозиторий tv удалён поэтому целиком, работа сейчас идёт с нуля в репозитории tv3-new (которым потом будет заменён tv3 для полной чистоты истории).

В конце концов, если кому-то понадобится живая TV на Паскале на UTF-8 и на объектах, всегда можно попросить своего агента переписать классовую tv3 на объекты, это не очень большой объем (но очень большой риск, что агент напихает грязного кода по памяти).

unxed
() автор топика

день добрый! последняя сборка

если запустить из под мс, то шоткат ctrl+o (2 раза) - теряет содержимое экрана (точнее, не перерисовывается, не критично, потому как «это более аварийный» запуск)
f10 (меню) - появляется слева (в меню) артефакт - '2;2'
menu/about - внизу справа квадрата окна about - '2:3u'
menu/refresh display - в командную строку «сваливается» - '2:3u'
menu/change language - alt f12 - меняет по циклу (рус, укр, анг) - так задумано?
menu/execute os cmd - присутствует а.ф. - '2:3u'
menu/video mode - не работает (да и, по моему, не нужен? могу ошибаться)

общее - в командной строке, по экрану постоянно рисуются артефакты (после применения команд/меню)

набираем в ком. строке:
cd / # - показывает дерево корня (все правильно)
pwd # далее ctrl + o - каталог откуда запущен dn
(т.е. рассинхрон того что показывает и где находится «под капотом»)

по выходу из dn - портиться режим консоли (не всегда, поймать за хвост не смог)

p.s. все набегом/коротко. спасибо

slackware 14.2
Linux 5.15.161 SMP PREEMPT x86_64 Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
fpc-3.2.2
glibc-2.33

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)

Мне нравился DOS Navigator. Расцветка панелей, подсветка файлов (не как в far’e, а красиво), тетрис, упаковка по дискетам в каком-то своем, насколько помню, формате (TES Arena была запакована им, разбита на тома и потом с дискет - успешно распакована, но за дискеты, как всегда, было волнительно). Было хорошо, как ни крути. Было и забавно. Также было понимание, что есть люди, которые пишут то, что надо, а не то, что хотят, кладя на всех с прибором.

А эти ощущения - признак свободы человека.

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

А что меня волнует нынче в файловых менеджерах типа DOS Navigator и mc, так это правильное отображение прогресса копирования файлов на ZFS - потому что там хз что происходит хоть и вполне по объективным причинам. И, увы, не наличие тетриса, да.

Так что, если автор порта чует это - свободу человека и то, что ему, человеку, действительно надо - так и в добрый путь.

Aburus
()
Последнее исправление: Aburus (всего исправлений: 3)
Ответ на: комментарий от wandrien

Ну так что в итоге? Ответ от человека будет?

i-rinat ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.