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.