LINUX.ORG.RU

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

 , , , turbo vision,


3

3

Разработчик @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 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.