C_Kurs_Lekt / C_II_семестр / 13_CONIOH
.pdf
|
РАБОТА С КОНСОЛЬЮ. ФУНКЦИИ ИЗ <CONIO.H> |
void |
clrscr(void); - очистка текстового окна с позиции (1,1) |
void clreol(void); - очистка с текущей позиции до конца строки; |
|
void |
window(int left, int top, int right, int bottom); - создает текстовое |
окно с координатами левого верхнего угла left, top (x,y), и правого верхнего угла right, bottom (x,y). void textmode(int newmode); -переводит экран в указанный текстовый режим.
Стандартные текстовые режимы: |
|
|
|||
Constant |
¦Value¦ Text Mode |
|
|
||
---------- |
+ |
----- |
+---------------------------------- |
|
|
LASTMODE |
¦ -1 |
¦ Previous text mode |
|
|
|
BW40 |
¦ |
0 |
¦ Black and white |
40 |
columns |
C40 |
¦ |
1 |
¦ Color |
40 |
columns |
BW80 |
¦ |
2 |
¦ Black and white |
80 |
columns |
C80 |
¦ |
3 |
¦ Color |
80 |
columns |
MONO |
¦ |
7 |
¦ Monochrome |
80 |
columns |
C4350 |
¦ 64 |
¦ EGA and |
43-line |
||
|
¦ |
|
¦ VGA |
50-line |
void _setcursortype(int cur_t); - устанавливае вид курсора:
_NOCURSOR невидимый курсор, _SOLIDCURSOR в виде прямоугольника, _NORMALCURSOR в виде черты (подчеркивания);
void textcolor(int newcolor); -установка цвета текста (0-15) void textbackground(int newcolor); -установка цвета фона (0-7) void textattr(int newattr); - установка атрибутов текста;
Константы цветов: (0-7) основные цвета (8-15) – яркие.
_____________________¦Back-¦Fore-
Constant |
¦Value¦grnd |
¦grnd |
||
-------------- |
+ |
----- |
+----- |
+----- |
BLACK |
¦ |
0 |
¦ Yes |
¦ Yes |
BLUE |
¦ |
1 |
¦ Yes |
¦ Yes |
GREEN |
¦ |
2 |
¦ Yes |
¦ Yes |
CYAN |
¦ |
3 |
¦ Yes |
¦ Yes |
RED |
¦ |
4 |
¦ Yes |
¦ Yes |
MAGENTA |
¦ |
5 |
¦ Yes |
¦ Yes |
BROWN |
¦ |
6 |
¦ Yes |
¦ Yes |
LIGHTGRAY |
¦ |
7 |
¦ Yes |
¦ Yes |
DARKGRAY |
¦ |
8 |
¦ No |
¦ Yes |
LIGHTBLUE |
¦ |
9 |
¦ No |
¦ Yes |
LIGHTGREEN |
¦ 10 |
¦ No |
¦ Yes |
|
LIGHTCYAN |
¦ 11 |
¦ No |
¦ Yes |
|
LIGHTRED |
¦ 12 |
¦ No |
¦ Yes |
|
LIGHTMAGENTA |
¦ 13 |
¦ No |
¦ Yes |
|
YELLOW |
¦ 14 |
¦ No |
¦ Yes |
|
WHITE |
¦ 15 |
¦ No |
¦ Yes |
|
-------------- |
+----- |
|
+----- |
+------ |
BLINK |
¦128 |
¦ No |
¦ *** |
Биты для textattr |
|
|
|
7 6 5 |
4 ¦ |
3 2 1 |
0 |
+--------------- |
+ |
--------------- |
+ |
¦ B ¦ b ¦ b ¦ b ¦ f ¦ f ¦ f ¦ f ¦
+--------------- |
+--------------- |
+ |
|
¦ |
|
In this 8-bit newattr parameter,
_ ffff = 4-bit цвет символов (0 to 15) _ bbb = 3-bit цвет фона (0 to 7)
_ B = бит мерцания
textattr(цветсимволов(0-15) + 16 * цветфона(0-7) [+128]);
или
textattr(цветсимволов(0-15) +(цветфона(0-7)<<4) [+128]);
void highvideo(void); - включение высокой яркости цвета символов; void lowvideo(void); - включение низкой яркости цвета символов; void normvideo(void); - включение нормальной яркости цвета символов;
void gettextinfo(struct text_info *r); - получить информацию о параметрах всех параметрах текущего текстового режима (координаты курсора, координаты и размер текстового окна, текущий текстовый режим, атрибуты цвета текста). Функция возвращает указатель на предопределенную структуру типа text_info.
#include <conio.h> |
|
|
|
int main(void){ |
|
|
|
struct text_info |
ti; |
|
|
gettextinfo(&ti); |
|
|
|
cprintf("window left |
%2d\r\n",ti.winleft); |
||
cprintf("window top |
%2d\r\n",ti.wintop); |
||
cprintf("window right |
%2d\r\n",ti.winright); |
||
cprintf("window bottom |
%2d\r\n",ti.winbottom); |
||
cprintf("attribute |
%2d\r\n",ti.attribute); |
||
cprintf("normal attribute |
%2d\r\n",ti.normattr); |
||
cprintf("current |
mode |
%2d\r\n",ti.currmode); |
|
cprintf("screen height |
%2d\r\n",ti.screenheight); |
||
cprintf("screen width |
%2d\r\n",ti.screenwidth); |
||
cprintf("current |
x |
%2d\r\n",ti.curx); |
|
cprintf("current |
y |
%2d\r\n",ti.cury); |
|
return 0; |
|
|
|
} |
|
|
|
window left |
1 |
|
|
window top |
1 |
|
|
window right |
80 |
|
|
window bottom |
25 |
|
|
attribute |
7 |
|
|
normal attribute |
7 |
|
|
current mode |
3 |
|
|
screen height |
25 |
|
|
screen width |
80 |
|
|
current x |
1 |
|
|
current y |
1 |
|
|
void gotoxy(int x, int y); - перемещает курсор в позицию текстового окна с координа-
тами (x, y)
int wherex(void); - возвращает значение горизонтальной координаты курсора; int wherey(void); - возвращает значение вертикальной координаты курсора;
int movetext(int left, int top, int right, int bottom, int destleft, int desttop); копирует прямоугольную область экрана с координатами (left, top, right, bottom)
в область левый верхний угол которой (destleft, desttop). Координаты абсолютные.
void delline(void); - удаляет строку в которой находиться курсор в текстовом окне (сроки расположенный ниже перемещаются вверх, последняя - пустая).
void insline(void); - вставляет строку в позицию в которой находится курсор (строки сдвигаются вниз)
Функции ввода-вывода
int cprintf(const char *format [, argument, ...]); – форматный вывод втек-
стовоеокно;
int cscanf (char *format [, address, ...]); – форматный ввод из текстового окна; int cputs(const char *str); – вывод строки в текстовое окно;
char *cgets(char *str); – ввод строки из текстового окна;
cgets - считывает строку с консоли и записывает строку (и ее длину) в *str.
перед вызовом cgets, необходимо в str[0] указать максимальную длину строки, которую можно считать. cgets считывает строку до carriage-return/linefeed(CR/LF) или до максимально разрешенной длины( CR/LF заменяется \0 ).
cgets возвращает в str[1] число успешно считанных символов, а в сама символьная строка начинается с str[2] и заканчивается \0. Поэтому место строка *str должна быть не короче (str[0] + 2). В случае успеха cgets возвращает указатель на str[2].
int main(void) {
char *p, buffer[83], ;
/* There's space for 80 characters plus the NULL terminator */ buffer[0] = 81;
printf("Input some chars:"); p = cgets(buffer);
printf("\ncgets read %d characters: \"%s\"\n", buffer[1], p); printf("The returned pointer is %p, buffer[0] is at %p\n", p,
&buffer); return 0;
}
int getch(void); считывает символ с консоли без отображения его на экране;
int getche(void); - считывает символ с консоли с «эхом»(отображая его на экране); int putch(int ch); – вывод символа в текстовое окно;
int gettext(int left, int top, int right, int bottom, void*destin); - ко-
пирует текст сэкрана (втекстовом режиме) в память.
int puttext(int left, int top, int right, int bottom, void*source); -
копирует текст из памяти наэкрана (втекстовом режиме).
Все координаты абсолютные. Место необходимое для хранения участка размером (h строк) на (w столбцов) - bytes = (h rows)x (wcolumns)x 2 (x 2 – так как требуется хранить код символа – 1 байт и атрибуты символа – 1 байт)
#include <conio.h> char buffer[4096]; int main(void){
int i; |
clrscr(); |
for (i = 0; i <= 20; i++) cprintf("Line #%d\r\n", i); |
|
gettext(1, 1, 80, 25, buffer); |
gotoxy(1, 25); cprintf("Press any key to clear screen..."); getch(); clrscr();
gotoxy(1, 25);cprintf("Press any key to restore screen..."); getch();
puttext(1, 1, 80, 25, buffer);
gotoxy(1, 25);cprintf("Press any key to quit..."); getch(); return 0;
}
<dos.h>
void sound(unsigned frequency); void nosound(void);
void delay(unsigned milliseconds);
#include<dos.h> // телефонный звонок #include<conio.h>
void main(){ int i;
do {
for(i=0; i<100; i++){ sound(1200); delay(10); nosound();
}
delay(800);
}
while(!kbhit());
}