ReadKey, или как ловить символы с клавиатуры? (Linux/UTF8)
Добавлено: 19.07.2013 22:28:00
Когда то я писал на TurboPascal. Отличный был язык, я стока в нем понаписал что просто... в общем одной из ценных визуальных фишек в нем была вот такая штука:
Не ругайтесь на код, я его из головы взял, даже не проверял, да это и не важно, я его как пример написал.
В общем в чем фишка - щас хочу написать строчный текстовой редактор для терминала (в частности для XTERM), под линуксом в котором везде UTF8. Как всегда решил вот так вот написать свой ReadLn, чтоб с ограничениями на ввод символов, но почему то русские буквы у меня печатаются странно. На сороковом введенном символе (если печатаются только русские буквы без пробелов),компьютер неожиданно дает Return и текст продолжает печататься с новой строки, и если набирать дальше, то на следующей сороковой позиции он снова даст ретурн.
Причем если не дай бог где поставлю пробел (три пробела и т.п.), то последняя сороковая русская буква раздвоиться на две кракозябы (знаки вопроса) в конце текущей строки и в начале следующей (буквы русские ведь два байта занимают).
CRT вообще какой то странный под линуксом. Если его просто описать Uses то обычные ReadLn и WriteLn начинают себя вести как было описано выше, словно он их подменяет (судя по всему он так и делает).
Так вот вопрос. Есть ли нормальная альтернатива ReadKey и KeyPress, и вообще как ловить клавиатуру под линуксой на голом FPC не используя CRT?
Про GotoXY, ClrScr и т.п. я уже и не говорю, поговаривают что его лучше делать с помощью ESC-последовательностей. С этим я наверное справлюсь. Меня сейчас волнует ловля символов с клавиатуры и WhereX, WhereY.
ДААААА! Пользовался ptcCrt, но это по моему для детишков побаловаться. Он ничего не лечит.
Бьюсь уже третьи сутки.
---------------
Пользуюсь FPC без лазаря. Хочу свои досовые проги переписать (с нуля конечно) под линуксой.
Помогите если знаете как. Не дайте человеку на СИ уйти. Не хочу я туда, там темно и сыро. (((((
- Код: Выделить всё
Uses CRT;
Var Ch : Char;
Str : String[20];
Begin
Str := '';
While True Do
begin
Write (Str);
Ch := ReadKey;
if Ch = #13 Then Break;
If (Ch <> 0) Then Str := Str + Ch;
....
End;
...
End.
Не ругайтесь на код, я его из головы взял, даже не проверял, да это и не важно, я его как пример написал.
В общем в чем фишка - щас хочу написать строчный текстовой редактор для терминала (в частности для XTERM), под линуксом в котором везде UTF8. Как всегда решил вот так вот написать свой ReadLn, чтоб с ограничениями на ввод символов, но почему то русские буквы у меня печатаются странно. На сороковом введенном символе (если печатаются только русские буквы без пробелов),компьютер неожиданно дает Return и текст продолжает печататься с новой строки, и если набирать дальше, то на следующей сороковой позиции он снова даст ретурн.
Причем если не дай бог где поставлю пробел (три пробела и т.п.), то последняя сороковая русская буква раздвоиться на две кракозябы (знаки вопроса) в конце текущей строки и в начале следующей (буквы русские ведь два байта занимают).
CRT вообще какой то странный под линуксом. Если его просто описать Uses то обычные ReadLn и WriteLn начинают себя вести как было описано выше, словно он их подменяет (судя по всему он так и делает).
Так вот вопрос. Есть ли нормальная альтернатива ReadKey и KeyPress, и вообще как ловить клавиатуру под линуксой на голом FPC не используя CRT?
Про GotoXY, ClrScr и т.п. я уже и не говорю, поговаривают что его лучше делать с помощью ESC-последовательностей. С этим я наверное справлюсь. Меня сейчас волнует ловля символов с клавиатуры и WhereX, WhereY.
ДААААА! Пользовался ptcCrt, но это по моему для детишков побаловаться. Он ничего не лечит.
Бьюсь уже третьи сутки.
---------------
Пользуюсь FPC без лазаря. Хочу свои досовые проги переписать (с нуля конечно) под линуксой.
Помогите если знаете как. Не дайте человеку на СИ уйти. Не хочу я туда, там темно и сыро. (((((