На мой http://forum.pascal.net.ru/index.php?showtopic=32668 ответа нет (или никто ничего не знает). Зайду к моей проблемке с другой стороны.
Нигде не нашел информации об использовании ncurses в паскале. Есть малость для Си. Но это для меня сложно.
Есть ли где-то какая-нибудь информация именно для паскаля?
Я знаю, что в самом ncurses есть привязки для языка Ada, но я так посмотрел, там юникод не в явном виде. http://www.rtsdd.ru/Ada2012_Unicode_NCURSES.aspx. Не знаю, как это далеко от порта на Linux.
Надо понимать, что там за кулисами, и 1:1 переписывать. Машинный фундамент у Паскаля и Си общий.
main(int argc,char *argv[])
{
// инициализация (должна быть выполнена
// перед использованием ncurses)
initscr();
// перемещение курсора в стандартном экране y=10 x=30
move(10,30);
printw("Hello world !!!"); // вывод строки
refresh(); // обновить
getch(); // ждём нажатия символа
endwin(); // завершение работы с ncurses
}
extern NCURSES_EXPORT(WINDOW *) initscr (void); /* implemented */
const
Ncurses = 'ncurses.so';
type
PCursesWindow = Pointer;
function initscr: PCursesWindow; cdecl; external Ncurses name 'initscr';
#define move(y,x) wmove(stdscr,(y),(x))
extern NCURSES_EXPORT(int) wmove (WINDOW *,int,int); /* implemented */
NCURSES_EXPORT(int)
wmove(WINDOW *win, int y, int x)
function wmove(win: PCursesWindow; y, x: Integer): Integer; cdecl; external Ncurses name 'wmove';
#if NCURSES_REENTRANT
NCURSES_WRAPPED_VAR(WINDOW *, stdscr);
#define stdscr NCURSES_PUBLIC_VAR(stdscr())
#else
extern NCURSES_EXPORT_VAR(WINDOW *) stdscr;
#endif
function stdscr: PCursesWindow; cdecl; external Ncurses name 'stdscr';
function move(y, x: Integer): Integer; inline;
begin
Result := wmove(stdscr, y, x);
end;
extern NCURSES_EXPORT(int) printw (const char *,...) /* implemented */
GCC_PRINTFLIKE(1,2);
#define addstr(str) waddnstr(stdscr,(str),-1)
extern NCURSES_EXPORT(int) waddnstr (WINDOW *,const char *,int); /* implemented */
NCURSES_EXPORT(int)
waddnstr(WINDOW *win, const char *astr, int n)
function waddnstr(win: PCursesWindow; const astr: PAnsiChar; n: Integer): Integer; cdecl; external Ncurses name 'waddnstr';
function addstr(const str: PAnsiChar): Integer; inline;
begin
Result := waddnstr(stdscr, str, -1);
end;
#define addnstr(str,n) waddnstr(stdscr,(str),(n))
function addnstr(const str: PAnsiChar; n: Integer): Integer; inline;
begin
Result := waddnstr(stdscr, str, n);
end;
#define refresh() wrefresh(stdscr)
extern NCURSES_EXPORT(int) wrefresh (WINDOW *); /* implemented */
function wrefresh(win: PCursesWindow): Integer; cdecl; external Ncurses name 'wrefresh';
function refresh: Integer; inline;
begin
Result := wrefresh(stdscr);
end;
#define getch() wgetch(stdscr)
extern NCURSES_EXPORT(int) wgetch (WINDOW *); /* implemented */
function wgetch: Integer; cdecl; external Ncurses name 'wgetch';
function getch: Integer; inline;
begin
Result := wgetch(stdscr);
end;
extern NCURSES_EXPORT(int) endwin (void); /* implemented */
function endwin: Integer; external Ncurses name 'endwin';
const
Ncurses = 'ncurses.so';
type
PCursesWindow = Pointer;
function initscr: PCursesWindow; cdecl; external Ncurses name 'initscr';
function stdscr: PCursesWindow; cdecl; external Ncurses name 'stdscr';
function wmove(win: PCursesWindow; y, x: Integer): Integer; cdecl; external Ncurses name 'wmove';
function move(y, x: Integer): Integer; inline;
begin
Result := wmove(stdscr, y, x);
end;
function waddnstr(win: PCursesWindow; const astr: PAnsiChar; n: Integer): Integer; cdecl; external Ncurses name 'waddnstr';
function addnstr(const str: PAnsiChar; n: Integer): Integer; inline;
begin
Result := waddnstr(stdscr, str, n);
end;
function wrefresh(win: PCursesWindow): Integer; cdecl; external Ncurses name 'wrefresh';
function refresh: Integer; inline;
begin
Result := wrefresh(stdscr);
end;
function wgetch: Integer; cdecl; external Ncurses name 'wgetch';
function getch: Integer; inline;
begin
Result := wgetch(stdscr);
end;
function endwin: Integer; external Ncurses name 'endwin';
// выше была копия
// ниже вспомогательный код и переписанный пример
function addustr(const Str: UTF8String): Integer;
begin
Result := addnstr(PAnsiChar(Str), Length(Str));
end;
begin
// инициализация (должна быть выполнена
// перед использованием ncurses)
initscr;
// перемещение курсора в стандартном экране y=10 x=30
move(10, 30);
addustr('Hello world !!!'); // вывод строки
refresh; // обновить
getch; // ждём нажатия символа
endwin; // завершение работы с ncurses
end.
const
Ncurses = 'ncursesw.so';