ec273ce904
New function 'con_get_input' useful to get escape codes from special keys. Implemented alternative screen buffer. See included documentation for more details. git-svn-id: svn://kolibrios.org@9105 a494cfbc-eb01-0410-851d-a64ba20cac60
191 lines
8.5 KiB
Plaintext
191 lines
8.5 KiB
Plaintext
console.obj экспортирует следующие функции:
|
||
|
||
typedef unsigned long dword; /* 32-битное беззнаковое целое */
|
||
typedef unsigned short word; /* 16-битное беззнаковое целое */
|
||
|
||
void __stdcall con_init(dword wnd_width, dword wnd_height,
|
||
dword scr_width, dword scr_height, const char* title);
|
||
Инициализация консоли. Вызывается один раз в начале программы.
|
||
wnd_width, wnd_height - высота и ширина (в символах) видимой в окне консоли
|
||
области;
|
||
scr_width, scr_height - высота и ширина (в символах) всей консоли;
|
||
любые из первых 4 параметров могут быть установлены в -1 (=0xFFFFFFFF)
|
||
- использовать значения по умолчанию;
|
||
title - заголовок окна консоли.
|
||
|
||
void __stdcall con_exit(bool bCloseWindow);
|
||
Вызывается при завершении программы. Если (байтовый) параметр bCloseWindow
|
||
нулевой, то окно консоли остаётся на экране до того момента, как пользователь
|
||
пожелает закрыть его, при этом к заголовку добавляется строка " [Finished]".
|
||
|
||
void __stdcall con_set_title(const char* title);
|
||
Устанавливает новый заголовок окна консоли.
|
||
|
||
void __stdcall con_write_asciiz(const char* string);
|
||
Выводит ASCIIZ-строку в консоль в текущую позицию, продвигает текущую позицию.
|
||
|
||
void __stdcall con_write_string(const char* string, dword length);
|
||
Аналогично con_write_asciiz, но выводит ровно length символов.
|
||
|
||
int __cdecl con_printf(const char* format, ...)
|
||
Стандартная printf из ANSI C.
|
||
|
||
dword __stdcall con_get_flags(void);
|
||
Получает значение флагов вывода.
|
||
dword __stdcall con_set_flags(dword new_flags);
|
||
Устанавливает значение флагов вывода. Возвращает старое значение.
|
||
Флаги (битовая маска):
|
||
/* цвет текста */
|
||
#define CON_COLOR_BLUE 1
|
||
#define CON_COLOR_GREEN 2
|
||
#define CON_COLOR_RED 4
|
||
#define CON_COLOR_BRIGHT 8
|
||
/* цвет фона */
|
||
#define CON_BGR_BLUE 0x10
|
||
#define CON_BGR_GREEN 0x20
|
||
#define CON_BGR_RED 0x40
|
||
#define CON_BGR_BRIGHT 0x80
|
||
/* управление выводом */
|
||
#define CON_IGNORE_SPECIALS 0x100
|
||
/* Если флаг сброшен, функция интерпретирует специальные символы:
|
||
10 ('\n') - перевод в начало следующей строки
|
||
13 ('\r') - перевод в начало текущей строки
|
||
8 ('\b') - забой (на символ назад)
|
||
9 ('\t') - табуляция
|
||
27 ('\033'='\x1B') - начало Esc-последовательности;
|
||
иначе выводит их как обычные символы. */
|
||
/* Поддерживаемые Esc-последовательности:
|
||
Esc[<number1>;<number2>;<number3>m - выбор атрибутов символов:
|
||
можно указывать один, два или три кода в любом порядке;
|
||
0 = нормальное изображение (белые символы на чёрном фоне)
|
||
1 = выделение яркостью
|
||
5 = яркий фон
|
||
7 = реверсное изображение (чёрные символы на белом фоне)
|
||
30 = чёрные символы
|
||
31 = красные символы
|
||
32 = зелёные символы
|
||
33 = жёлтые символы
|
||
34 = синие символы
|
||
35 = фиолетовые символы
|
||
36 = бирюзовые символы
|
||
37 = белые символы
|
||
40 = чёрный фон
|
||
41 = красный фон
|
||
42 = зелёный фон
|
||
43 = жёлтый фон
|
||
44 = синий фон
|
||
45 = фиолетовый фон
|
||
46 = бирюзовый фон
|
||
47 = белый фон
|
||
Следующие последовательности появились в версии 5 библиотеки:
|
||
Esc[<number>A - переместить курсор на <number> строк вверх
|
||
Esc[<number>B - переместить курсор на <number> строк вниз
|
||
Esc[<number>C - переместить курсор на <number> позиций вправо
|
||
Esc[<number>D - переместить курсор на <number> позиций влево
|
||
Esc[<number1>;<number2>H = Esc[<number1>;<number2>f -
|
||
установить курсор в позицию с координатами <number1>,<number2>
|
||
Esc[2J - очистить экран, переместить курсор в левый верхний угол
|
||
Следующие последовательности появились в версии 9 библиотеки:
|
||
Esc[J or Esc[0J - Erase everything below cursor
|
||
Esc[1J - Erase everything above cursor
|
||
Esc[K - Erase in line
|
||
Esc[<number>L - Insert <number> lines at the cursor position
|
||
Esc[<number>M - Delete <number> lines at the cursor position
|
||
Esc[<number>P - Delete <number chars at the cursor position
|
||
Esc[<number>X - Erase <number chars at the cursor position
|
||
Esc[<number>d - Set cursor to absolute line position
|
||
Esc[<number1>;<number2>f - Cursor position
|
||
Esc[<mode>h - Set mode (see below)
|
||
Esc[<mode>l - Reset mode (see below)
|
||
The following modes are currently supported:
|
||
?1 - Application cursor keys
|
||
?25 - Show/Hide cursor
|
||
?1049 - Alternative screen buffer. The alternative buffer has no scrollback.
|
||
Esc[<number1>;<number2>r - Set scroll region from row <number1> to row <number2>
|
||
(Use in combination with insert/delete lines)
|
||
Esc]0<string>ST/BEL - Set window caption. The string is terminated with ASCII char 0x07 or 0x9C.
|
||
Esc]2<string>ST/BEL - Implemented identical as Esc]0.
|
||
|
||
*/
|
||
/* сигнал о закрытии окна консоли; появился в версии 6 библиотеки;
|
||
флаг игнорируется функцией con_set_flags */
|
||
#define CON_WINDOW_CLOSED 0x200
|
||
Значение по умолчанию для флагов = 7.
|
||
|
||
int __stdcall con_get_font_height(void);
|
||
Возвращает значение высоты шрифта.
|
||
|
||
int __stdcall con_get_cursor_height(void);
|
||
Получает значение высоты курсора.
|
||
int __stdcall con_set_cursor_height(int new_height);
|
||
Устанавливает значение высоты курсора. Возвращает старое значение.
|
||
Попытка установить значение вне корректного интервала (от 0 до font_height-1)
|
||
игнорируется.
|
||
Курсор высоты 0 не отображается на экране.
|
||
Значение высоты по умолчанию - 15% от высоты шрифта.
|
||
|
||
int __stdcall con_getch(void);
|
||
Считывает один символ с клавиатуры.
|
||
Для обычных символов возвращается ASCII-код. Для расширенных символов
|
||
(например, Fx и стрелочек) первый вызов функции возвращает 0,
|
||
а повторный вызов возвращает расширенный код (подобно DOS-функциям ввода).
|
||
Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается
|
||
значение 0.
|
||
|
||
word __stdcall con_getch2(void);
|
||
Считывает один символ с клавиатуры. Младший байт содержит ASCII-код клавиши
|
||
(0 для расширенных символов), старший - расширенный код
|
||
(подобно BIOS-функциям ввода).
|
||
Начиная с версии 7 библиотеки, после закрытия окна консоли возвращается
|
||
значение 0.
|
||
|
||
int __stdcall con_kbhit(void);
|
||
Возвращает 1, если какая-то клавиша была нажата, 0 иначе. Для считывания
|
||
нажатой клавиши предназначены функции con_getch и con_getch2.
|
||
Начиная с версии 6 библиотеки, после закрытия окна консоли всегда возвращает 1.
|
||
|
||
char* __stdcall con_gets(char* str, int n);
|
||
Считывает строку с клавиатуры. Ввод прерывается при поступлении символа
|
||
новой строки, а также по прочтении n-1 символа (в зависимости от того, что
|
||
произойдёт раньше). В первом случае символ новой строки также записывается в
|
||
str. Считанная строка дополняется нулевым символом.
|
||
Начиная с версии 6 библиотеки, функция возвращает указатель на введённую
|
||
строку при успешном чтении и NULL, если окно консоли было закрыто. До версии
|
||
6 возвращаемое значение было неопределено.
|
||
|
||
typedef int (__stdcall * con_gets2_callback)(int keycode, char** pstr, int* pn, int* ppos);
|
||
char* __stdcall con_gets2(con_gets2_callback callback, char* str, int n);
|
||
Функция появилась в версии 4 библиотеки.
|
||
Полностью аналогична con_gets за исключением того, что когда пользователь
|
||
нажимает нераспознанную клавишу, вызывается указанная callback-процедура
|
||
(которая может, например, обрабатывать up/down для истории ввода и tab для
|
||
автодополнения). Процедуре передаётся код клавиши и три указателя - на строку,
|
||
на лимит и на текущую позицию в строке. Процедура может менять содержимое
|
||
строки и может менять саму строку (например, перераспределить память для
|
||
увеличения лимита), лимит, позицию в строке - для этого и передаются указатели.
|
||
Возвращаемое значение: 0=строка не менялась; 1=строка изменилась, необходимо
|
||
удалить старую и вывести новую; 2=строка изменилась, необходимо её вывести;
|
||
3=немедленно выйти из функции.
|
||
Начиная с версии 6 библиотеки, функция возвращает указатель на введённую
|
||
строку при успешном чтении и NULL, если окно консоли было закрыто. До версии
|
||
6 возвращаемое значение было неопределено.
|
||
|
||
void __stdcall con_cls();
|
||
Функция появилась в версии 5 библиотеки.
|
||
Очищает экран и переводит курсор в левый верхний угол.
|
||
|
||
void __stdcall con_get_cursor_pos(int* px, int* py);
|
||
Функция появилась в версии 5 библиотеки.
|
||
Записывает в *px текущую координату курсора по оси x, в *py - по оси y.
|
||
|
||
void __stdcall con_set_cursor_pos(int x, int y);
|
||
Функция появилась в версии 5 библиотеки.
|
||
Устанавливает курсор в позицию с указанными координатами. Если какой-то из
|
||
параметров выходит за пределы соответствующего диапазона (от 0 до scr_width-1
|
||
для x, от 0 до scr_height-1 для y, scr_width и scr_height были заданы при
|
||
вызове con_init), то соответствующая координата курсора не меняется.
|
||
|
||
int __stdcall con_get_input(char* buf, int buflen);
|
||
Read as many input events as are available and fit in the receive buffer.
|
||
Input event can be regular ASCII code from keyboard, but also escape codes for special keys.
|
||
The support for mouse events via escape codes is not yet implemented. |