URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1371
[ Назад ]

Исходное сообщение
"Как в Linux в Shell (на C) написать фразу в конкретном месте экрана?"

Отправлено MF_s , 08-Фев-03 02:47 
Как в Linux в Shell (на C) написать фразу в конкретном месте экрана?
Например как фразу "Hellow, World" написать в центре экрана?
На языке С?
Заранее спасибо за ответ!

Содержание

Сообщения в этом обсуждении
"RE: Как в Linux в Shell (на C) написать фразу в конкретном месте..."
Отправлено Big Shadow , 08-Фев-03 14:08 
>Как в Linux в Shell (на C) написать фразу в конкретном месте
>экрана?
>Например как фразу "Hellow, World" написать в центре экрана?
>На языке С?
>Заранее спасибо за ответ!

Воспользуйтесь esc-последовательностями, см.:
http://subscribe.ru/archive/comp.soft.prog.shellandawk/20030...
http://subscribe.ru/archive/comp.soft.prog.shellandawk/20030...


"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено XMan , 08-Фев-03 20:35 
Кстати. Вспомнил свои давние попытки сделать цвет фона ярко-белым. То бишь не 7-ым цветом, а 15-ым. Так ничего не получилось. Может все-таки можно как-нибудь ?

"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено Soldier , 08-Фев-03 22:21 
>Кстати. Вспомнил свои давние попытки сделать цвет фона ярко-белым. То бишь не
>7-ым цветом, а 15-ым. Так ничего не получилось. Может все-таки можно
>как-нибудь ?

Ниже фрагмент моих первых "научных" экспериментов (я тогда про curses еще не слышал) под Линукс. Вроде ответ и на твой вопрос тоже.

//================================
#define black      0
#define red        1
#define green      2
#define brown      3
#define blue       4
#define magenta    5
#define cyan       6
#define gray       7
#define ltred      9
#define ltgreen   10
#define yellow    11
#define ltblue    12
#define ltmagenta 13
#define ltcyan    14
#define white     15

void gotoxy(int col, int row) {
printf("\x1B[%i;%iH",row,col);
}

void clrscr(void) {
puts("\x1B[H\x1B[J");
}

void textattr(unsigned char attr) {
if (attr &   8) printf("\x1B[1m");
else printf("\x1B[0m");
printf("\x1B[3%im\x1B[4%im",attr & 7, (attr >> 4) & 7);
}

main() {
unsigned char textcolor=white;
unsigned char backcolor=red;
clrscr();
gotoxy(10,10);
textattr(textcolor+16*backcolor);
printf("Hello, world\n");
textattr(gray+black*16);
gotoxy(10,11);
puts("press ENTER");
getchar();
printf("\033c");
}
//===============================


"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено XMan , 09-Фев-03 02:27 
Неа. Он тоже ставит цвет фона 7, хотя задается 15. Тоже происходит со всеми цветами из старшей октавы. Есть подозрение, что при выводе в байт атрибута выполняется "attr &= 0x7F", дабы очистить бит мигания невзирая на выключенное предварительно мигание (теоретически в линухе - включенное 16 цветов фона; реально у адаптера так и есть).

"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено Soldier , 09-Фев-03 07:28 
>Неа. Он тоже ставит цвет фона 7, хотя задается 15. Тоже происходит
>со всеми цветами из старшей октавы. Есть подозрение, что при выводе
>в байт атрибута выполняется "attr &= 0x7F", дабы очистить бит мигания
>невзирая на выключенное предварительно мигание (теоретически в линухе - включенное 16
>цветов фона; реально у адаптера так и есть).


Торможу временами :))). Я с чего-то решил что тебя цвет текста интересует :))). Под ДОС я такие фокусы через int 10h проделывал, а под Линукс не знаю, может и есть какие эскейпы - покопаюсь на досуге.


"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено Bootmen , 09-Фев-03 16:12 
>Кстати. Вспомнил свои давние попытки сделать цвет фона ярко-белым. То

Может так ярко будет-
:
#
setcolor black lt_cyan
echo "^[[1m"
banner Hello!
setcolor -n
#


"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено XMan , 09-Фев-03 20:43 
У меня нет утилит setcolor и banner. Но ставить bold ( [1m ) я пробовал - изменяется только цвет символов. В Konsole можно добиться ярких цветов фона пользуя инверсию ( tput rev, теоретически [7m ), но в обычной консоли оно не помогает - все равно цвет 7 вместо 15 получается.

"RE: Как в Linux в Shell (на C) написать фразу в конкретном м..."
Отправлено Bootmen , 10-Фев-03 02:16 
>У меня нет утилит setcolor и banner. Но ставить bold ( [1m
>) я пробовал - изменяется только цвет символов. В Konsole можно
>добиться ярких цветов фона пользуя инверсию ( tput rev, теоретически [7m
>), но в обычной консоли оно не помогает - все равно
>цвет 7 вместо 15 получается.
Да вообщето эти утилиты из SCO
Но чтото подумал в UNIX машинах все утилиты стандартные.