0,0 → 1,203 |
/* |
|
This is adapded thunk for console.obj sys library |
.h is equal to svn:\programs\develop\libraries\console\console_en.txt |
|
Adapted for tcc by Siemargl, 2016 |
|
*/ |
#ifndef __conio_h |
#define __conio_h |
|
#define cdecl __attribute__ ((cdecl)) |
#define stdcall __attribute__ ((stdcall)) |
|
/* |
console.obj exports the following functions |
*/ |
typedef unsigned int dword; /* 32-bit unsigned integer */ |
typedef unsigned short word; /* 16-bit unsigned integer */ |
|
extern void stdcall (*con_init)(dword wnd_width, dword wnd_height, |
dword scr_width, dword scr_height, const char* title); |
/* Console initialization. Must be called only once. |
wnd_width, wnd_height - width and height (in units of characters) of the visible |
region; |
scr_width, scr_height - width and height (in units of characters) of console; |
Any of these four parameters can be set to -1 (=0xFFFFFFFF) |
to use the library's default values; |
title - console window's caption. */ |
|
extern void stdcall (*con_exit)(int bCloseWindow); |
/* You should call this funstion at the end of the program. |
If bCloseWindow is zero, the string "[Finished]" will be added to the caption of |
the window and the console window will remain on the screen until the user |
closes it. */ |
|
extern void stdcall (*con_set_title)(const char* title); |
/* Set new window caption. */ |
|
extern void stdcall (*con_write_asciiz)(const char* str); |
/* Display ASCIIZ-string to the console at the current position, shifting |
the current position. */ |
|
extern void stdcall (*con_write_string)(const char* str, dword length); |
/* Similar to con_write_asciiz, but length of the string must be given as a |
separate parameter */ |
|
extern int cdecl (*con_printf)(const char* format, ...); |
/* Standard "printf" function from ANSI C. */ |
|
extern dword stdcall (*con_get_flags)(void); |
/* Get output flags. */ |
|
extern dword stdcall (*con_set_flags)(dword new_flags); |
/* Set output flags. This function returns previous values. */ |
|
/* Flags (bitmask): */ |
/* text color */ |
#define CON_COLOR_BLUE 0x01 |
#define CON_COLOR_GREEN 0x02 |
#define CON_COLOR_RED 0x04 |
#define CON_COLOR_BRIGHT 0x08 |
/* background color */ |
#define CON_BGR_BLUE 0x10 |
#define CON_BGR_GREEN 0x20 |
#define CON_BGR_RED 0x40 |
#define CON_BGR_BRIGHT 0x80 |
/* output controls */ |
#define CON_IGNORE_SPECIALS 0x100 |
/* if this flag is cleared, function interprets special characters: |
10 ('\n') - next line |
13 ('\r') - carriage return |
8 ('\b') - backspace |
9 ('\t') - tab |
27 ('\033' = '\x1B') - the beginning of Esc-sequences; |
otherwise, these characters will be displayed like ordinary characters. */ |
/* Supported Esc-sequences: |
Esc[<number1>;<number2>;<number3>m - choice of character attributes: |
You can specify one, two or three codes in any order; |
0 = normal mode (white on black) |
1 = bright selection |
5 = bright background |
7 = inverse mode (black on white) |
30 = black characters |
31 = red characters |
32 = green characters |
33 = brown characters |
34 = blue characters |
35 = purple characters |
36 = turqoise characters |
37 = white characters |
40 = black background |
41 = red background |
42 = green background |
43 = brown background |
44 = blue background |
45 = purple background |
46 = turqoise background |
47 = white background |
The following sequences appeared in version 5 of library: |
Esc[2J - clear screen, move cursor to upper left corner |
Esc[<number1>;<number2>H = Esc[<number1>;<number2>f - |
move cursor to <number1>,<number2> |
Esc[<number>A - move cursor to <number> lines up |
Esc[<number>B - move cursor to <number> lines down |
Esc[<number>C - move cursor to <number> positions right |
Esc[<number>D - move cursor to <number> positions left |
*/ |
/* signal "console closed"; appeared in version 6; |
ignored by con_set_flags */ |
#define CON_WINDOW_CLOSED 0x200 |
/* The default value for flags = 7. (grey text on black background) */ |
|
extern int stdcall (*con_get_font_height)(void); |
/* Get the height of the font. */ |
|
extern int stdcall (*con_get_cursor_height)(void); |
/* Get the height of the cursor. */ |
|
extern int stdcall (*con_set_cursor_height)(int new_height); |
/* Set the height of the cursor. This function returns previous value. |
An attempt to set the value out of the correct interval (from 0 to |
font_height-1) is ignored. |
Cursor with zero height isn't displayed. |
Default value: - 15% from font height. */ |
|
extern int stdcall (*con_getch)(void); |
/* Get one character from the keyboard. |
|
For normal characters function returns ASCII-code. For extended |
characters (eg, Fx, and arrows), first function call returns 0 |
and second call returns the extended code (similar to the DOS-function |
input). Starting from version 7, after closing the console window, |
this function returns 0. */ |
|
extern word stdcall (*con_getch2)(void); |
/* Reads a character from the keyboard. Low byte contains the ASCII-code |
(0 for extended characters), high byte - advanced code (like in BIOS |
input functions). Starting from version 7, after closing the console |
window, this function returns 0. */ |
|
extern int stdcall (*con_kbhit)(void); |
/* Returns 1 if a key was pressed, 0 otherwise. To read pressed keys use |
con_getch and con_getch2. Starting from version 6, after closing |
the console window, this function returns 1. */ |
|
extern char* stdcall (*con_gets)(char* str, int n); |
/* Reads a string from the keyboard. Reading is interrupted when got |
"new line" character, or after reading the (n-1) characters (depending on |
what comes first). In the first case the newline is also recorded in the |
str. The acquired line is complemented by a null character. |
Starting from version 6, the function returns a pointer to the entered |
line if reading was successful, and NULL if the console window was closed. */ |
|
typedef int (stdcall * con_gets2_callback)(int keycode, char** pstr, int* pn, |
int* ppos); |
|
extern char* stdcall (*con_gets2)(con_gets2_callback callback, char* str, int n); |
/* Con_gets completely analogous, except that when the user |
press unrecognized key, it calls the specified callback-procedure |
(which may, for example, handle up / down for history and tab to enter |
autocompletion). You should pass to the procedure: key code and three pointers |
- to the string, to the maximum length and to the current position. |
function may change the contents of string and may change the string |
itself (for example, to reallocate memory for increase the limit), |
maximum length, and position of the line - pointers are passed for it. |
Return value: 0 = line wasn't changed 1 = line changed, you should |
remove old string and display new, 2 = line changed, it is necessary |
to display it; 3 = immediately exit the function. |
Starting from version 6, the function returns a pointer to the entered |
line with the successful reading, and NULL if the console window was closed. */ |
|
extern void stdcall (*con_cls)(); |
/* Clear screen and set cursor at upper left corner. */ |
|
|
extern void stdcall (*con_get_cursor_pos)(int* px, int* py); |
/* Wrote current (x) coordinate of cursor to *px, and (y) to *py. */ |
|
extern void stdcall (*con_set_cursor_pos)(int x, int y); |
/* Set the cursor position to the specified coordinates. If any of the |
parameters beyond the relevant range (from 0 to 1 scr_width- |
for x, from 0 to 1 for scr_height-y, scr_width scr_height and were asked if |
call con_init), then the corresponding coordinate of the cursor does not change. |
*/ |
|
extern int __console_initdll_status; |
/* == 1 if dll loaded */ |
|
extern dword *con_dll_ver; |
|
extern int con_init_console_dll(void); |
/* load library and link function symbols. returns 1 if error |
called automatic in printf, otherwise, see __console_initdll_status |
*/ |
|
extern int con_init_console_dll_param(dword wnd_width, dword wnd_height, |
dword scr_width, dword scr_height, const char* title); |
/* work as con_init_console_dll, but call con_init with params |
*/ |
|
|
#endif |