Lazarus + Linux console

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
still
новенький
Сообщения: 40
Зарегистрирован: 01.10.2015 10:11:48

Сообщение still »

v-t-l... :)
Это да, только повторюсь, это чистая работа с терминалом. Например очистка экрана - вывод пустых строк. И тд и тп.
Такое для принтера хорошо, а не для терминального приложения чуть сложнее чем просмотр лога.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

1 В консоли линукса нет врожденного эмулятора дос как в Виндовс . (А Туробовижен работает с видепмятью напрямую $B800:ХХХХ )
2 Это именно терминал которому можно подключаться хоть телнетом хоть через модем
3 Если копать исходники то лучше смотреть в строну МиднайтКомандера (МС) помню дико восхищала возможность "пробраться куда нибудь в shell" (На древние серваки американских универов например :D ) и запустить МС ...
4 ANSI код действительно работает почти везде но есть версии МС которые могут работать и без него (Есть еще более простые терминальные последовательности )
https://ru.wikipedia.org/wiki/%D0%A3%D0 ... 0%BB%D1%8B
(Для очистки консоли почти везде работает вывод Chr(12) $0C FORM FEED прогон страницы, смена страницы ^L \f )
P.S.
Буга ! scn.org еще жив (прямо типа "Флин жив!" 8) :shock: :idea: ) ...
(Кстати посмотри как там страницы очищает )
@ubuntu:/home$ telnet scn.org
Trying 66.212.64.194...
Connected to scn.org.
Escape character is '^]'.

Seattle Community Network Sun Solaris 1.1.1.B
Please login as 'visitor' if you are a visitor


SunOS UNIX (scn)

login:
Аватара пользователя
still
новенький
Сообщения: 40
Зарегистрирован: 01.10.2015 10:11:48

Сообщение still »

В общем нарисовал объект, даже с цветами и буферизацией.
Проблема в общема под мои нужны решена.
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Сообщение azsx »

Проблема в общема под мои нужны решена.

не совсем понятно, а как решена? То есть инструментом free vision?
Аватара пользователя
still
новенький
Сообщения: 40
Зарегистрирован: 01.10.2015 10:11:48

Сообщение still »

azsx писал(а):не совсем понятно, а как решена? То есть инструментом free vision?


Нет. Самое сложное было получить разрешение консоли. Решилось так:

Код: Выделить всё

procedure TConsole.GetSize;
var
 WinInfo : TWinSize;
begin
 if (fpIOCtl(TextRec(Output).Handle, TIOCGWINSZ, @Wininfo)>=0) then begin
  AWidth:=Wininfo.ws_col;
  AHeight:=Wininfo.ws_row;
 end;
end;



Далее написал функцию отправки эскейп последовтельностей вот так:

Код: Выделить всё

procedure TConsole.WriteSCI(AString:String);
begin
 Write(Char(27)+'['+AString);
end;


Далее написал класс TConsole в котором реализовал всякую всячину работы с консолью UTF16, UTF8.

Код: Выделить всё

 constructor Create;
 destructor Destroy; override;
 procedure GetSize(var AWidth:word; var AHeight:word);
 procedure Clear;
 procedure WriteString(AString:string);
 procedure WriteSCI(AString:String);
 procedure SetCursorPosition(x:integer; y:integer);
 property Cursor:boolean read FCursor write SetCursor;
 property Width:integer read GetWidth;
 property Height:integer read GetHeight;
 // Буфферизация
 function FrameBegin:boolean;
 procedure FrameEnd;
 function GetBuffered:boolean;
 property Buffered:boolean read GetBuffered;
 property Window:TWindow read FWindow;
 function Resized:boolean;

 function GetColorInc:byte;
 procedure SetColorInc(AValue:byte);
 function GetColorPaper:byte;
 procedure SetColorPaper(AValue:byte);
 function GetColorAttr:TColorAttr;
 procedure SetColorAttr(AValue:TColorAttr);

 property ColorInc:byte read GetColorInc write SetColorInc;
 property ColorPaper:byte read GetColorPaper write SetColorPaper;
 property ColorAttr:TColorAttr read GetColorAttr write SetColorAttr;


TWindow - в котором сделал буфферизацию, сейчас сижу допиливаю вывод окон, перекрытие и так далее. Мне пока хватит для интерфейса.

Код: Выделить всё

 constructor Create;
 destructor Destroy; override;

 property Caption:string read FCaption write SetCaption;
 property Name:string read FName write FName;
 property Width:integer read FWidth write SetWidth;
 property Height:integer read FHeight write SetHeight;

 procedure SetSize(AWidth:integer; AHeight:integer);
 procedure WriteString(AString:string);
 property WrapLine:boolean read FWrapLine write FWrapLine;
 property ColorInc:byte read FColorInc write FColorInc;
 property ColorPaper:byte read FColorPaper write FColorPaper;
 property ColorAttr:TColorAttr read FColorAttr write FColorAttr;
 property CursorX:integer read FCursorX write FCursorX;
 property CursorY:integer read FCursorY write FCursorY;
 property Buffer:PBuffer read FBuffer;
 procedure SetCursorPosition(x,y:integer);
 procedure Clear;
 procedure Fill;
 procedure Display(AWindow:TWindow);
 property Left:integer read FLeft write SetLeft;
 property Top:integer read FTop write SetTop; 



Короче как обычно... Сейчас пытаюсь разобраться как с клавы читать.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Обычные read и readln как я понимаю не подходят ?
Хотя "честное консольное приложение" по идее должно уметь читать и "стандартный ввод" вдруг переопределят или кому-то макрос придет голову написать ...
Вообще должно "асигнавться" устройство в /dev/... (stdin или console ?)

:arrow: https://ru.wikipedia.org/wiki/Conio.h
:roll:
Аватара пользователя
still
новенький
Сообщения: 40
Зарегистрирован: 01.10.2015 10:11:48

Сообщение still »

Я в конечном счете делаю вывод через write. До ввода потока еще не добрался. Нет необходимости пока.
unxed
новенький
Сообщения: 31
Зарегистрирован: 25.10.2020 22:38:56

Сообщение unxed »

SSerge писал(а):
still писал(а):С этим кто нить работал?

библиотека брошена и никто ей серьёзно не занимается


Не настолько прямо брошена. Самое главное, чего в ней не хватало — поддержки юникода — сделали:
https://gitlab.com/freepascal.org/fpc/s ... _833019965
Ответить