forked from KolibriOS/kolibrios
198 lines
7.6 KiB
C
198 lines
7.6 KiB
C
|
/*
|
||
|
|
||
|
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 long 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
|
||
|
*/
|
||
|
|
||
|
#endif
|