Re: ширина терминала в си

2005-01-14 Пенетрантность Yuri Kozlov

On Wed, 12 Jan 2005 14:05:49 +0300
 Artem Chuprina [EMAIL PROTECTED] wrote:
Yuri Kozlov - debian-russian@lists.debian.org  @ Wed, 12 Jan 2005 
13:45:47 +0300:


  VBW Поэтому авторы dpkg были в корне неправы, что зареклись 
на её
  VBW использование. Может быть в ранних версиях, когда dpkg 
был шелловским
  VBW скриптом, это имело смысл. А в C-шной программе надо 
использовать

  VBW выше по треду приведенный ioctl.
  Авторы dpkg были в корне неправы, ограничив при ширине 80 
размер поля
  имени пакета так, что оно туда, мягко говоря, не влезает. 
Если они еще

  ширину будут определять по ioctl...
 YK Чем не нравится ioctl ?
 Тем, что тогда ему уже никак не объяснить, что несмотря на то, 
что у
 меня окно шириной всего 80 символов, я тем не менее хочу увидеть 
имя

 пакета полностью.

YK Я думаю здесь ненадо смешивать определение размера терминала и
YK неадекватный вывод отдельно взятой программы, основанный на этой 
ширине.


Вот и не смешивай.



Это кто смешивает ?
В dpkg сделано грамотно: нет COLUMNS -- берём через ioctl.
И Вам, как unix guru  :), грех жаловаться, когда вы можете написать
просто
COLUMNS=400 dpkg -l |awk '/=$/ { while (getline) print $2   $3 
}'

и получить требуемое .

Regards,
Yuri Kozlov



Re: ширина терминала в си

2005-01-13 Пенетрантность Artem Chuprina
Yuri Kozlov - debian-russian@lists.debian.org  @ Wed, 12 Jan 2005 13:45:47 
+0300:

   VBW Поэтому авторы dpkg были в корне неправы, что зареклись на её
   VBW использование. Может быть в ранних версиях, когда dpkg был 
   шелловским
   VBW скриптом, это имело смысл. А в C-шной программе надо использовать
   VBW выше по треду приведенный ioctl.
   Авторы dpkg были в корне неправы, ограничив при ширине 80 размер поля
   имени пакета так, что оно туда, мягко говоря, не влезает.  Если они еще
   ширину будут определять по ioctl...
  YK Чем не нравится ioctl ?
  Тем, что тогда ему уже никак не объяснить, что несмотря на то, что у
  меня окно шириной всего 80 символов, я тем не менее хочу увидеть имя
  пакета полностью.
 
 YK Я думаю здесь ненадо смешивать определение размера терминала и
 YK неадекватный вывод отдельно взятой программы, основанный на этой ширине.

Вот и не смешивай.

-- 
Artem Chuprina
RFC2822: ran{}ran.pp.ru Jabber: [EMAIL PROTECTED]



Re: ширина терминала в си

2005-01-12 Пенетрантность Yuri Kozlov

On Tue, 11 Jan 2005 14:53:11 +0300
 Artem Chuprina [EMAIL PROTECTED] wrote:
Yuri Kozlov - debian-russian@lists.debian.org  @ Tue, 11 Jan 2005 
13:08:53 +0300:


 VBW Поэтому авторы dpkg были в корне неправы, что зареклись на 
её
 VBW использование. Может быть в ранних версиях, когда dpkg был 
шелловским
 VBW скриптом, это имело смысл. А в C-шной программе надо 
использовать

 VBW выше по треду приведенный ioctl.
 Авторы dpkg были в корне неправы, ограничив при ширине 80 размер 
поля
 имени пакета так, что оно туда, мягко говоря, не влезает.  Если 
они еще

 ширину будут определять по ioctl...

YK Чем не нравится ioctl ?

Тем, что тогда ему уже никак не объяснить, что несмотря на то, что у
меня окно шириной всего 80 символов, я тем не менее хочу увидеть имя
пакета полностью.


Я думаю здесь ненадо смешивать определение размера терминала и
неадекватный вывод отдельно взятой программы, основанный на этой 
ширине.


dpkg бы не помешала опция --format, в которой бы можно было бы указать
ширину полей.

Regards,
Yuri Kozlov



Re: ширина терминала в си

2005-01-11 Пенетрантность Yuri Kozlov

On Mon, 10 Jan 2005 20:46:54 +0300
 Artem Chuprina [EMAIL PROTECTED] wrote:
Victor B. Wagner - debian-russian@lists.debian.org  @ Mon, 10 Jan 
2005 19:42:44 +0300:


VBW Поэтому авторы dpkg были в корне неправы, что зареклись на её
VBW использование. Может быть в ранних версиях, когда dpkg был 
шелловским
VBW скриптом, это имело смысл. А в C-шной программе надо 
использовать

VBW выше по треду приведенный ioctl.

Авторы dpkg были в корне неправы, ограничив при ширине 80 размер 
поля
имени пакета так, что оно туда, мягко говоря, не влезает.  Если они 
еще

ширину будут определять по ioctl...


Чем не нравится ioctl ?
Может подскажете библиотечную функцию ?

Regards,
Yuri Kozlov



Re: ширина терминала в си

2005-01-11 Пенетрантность Artem Chuprina
Yuri Kozlov - debian-russian@lists.debian.org  @ Tue, 11 Jan 2005 13:08:53 
+0300:

  VBW Поэтому авторы dpkg были в корне неправы, что зареклись на её
  VBW использование. Может быть в ранних версиях, когда dpkg был шелловским
  VBW скриптом, это имело смысл. А в C-шной программе надо использовать
  VBW выше по треду приведенный ioctl.
  Авторы dpkg были в корне неправы, ограничив при ширине 80 размер поля
  имени пакета так, что оно туда, мягко говоря, не влезает.  Если они еще
  ширину будут определять по ioctl...

 YK Чем не нравится ioctl ?

Тем, что тогда ему уже никак не объяснить, что несмотря на то, что у
меня окно шириной всего 80 символов, я тем не менее хочу увидеть имя
пакета полностью.

-- 
Artem Chuprina
RFC2822: ran{}ran.pp.ru Jabber: [EMAIL PROTECTED]



Re: ширина терминала в си

2005-01-10 Пенетрантность Gossen Alexey
On Thu, 06 Jan 2005 11:42:34 +0300
Yuri Kozlov [EMAIL PROTECTED] wrote:

 On Thu, 06 Jan 2005 02:17:30 +0300
   Artem Chuprina [EMAIL PROTECTED] wrote:
  Gossen Alexey - debian-russian  @ Wed, 5 Jan 2005 19:27:17 +0100:
  
  GA парадокс(для меня),  если запускаю программу из-под gdb, всё 
 получается.
  GA если программу запускаю непосредственно, getenv возвращает NULL
  
  Что ж тут парадоксального?  gdb ее выставляет, а ты - нет.
  
 
 Основное взято из rlogin.c BSD4.4
 Работает с xterm и в обычной консоли
 
 [EMAIL PROTECTED]:~$ ./a.out
 cols=89 rows=24
 [EMAIL PROTECTED]:~$
 
 #include stdio.h
 #include sys/ioctl.h
 #include errno.h
 
 #define   get_window_size(fd, wp) ioctl(fd, TIOCGWINSZ, wp)
 
 int main(int argc, char *argv[], char *env[])
 {
   struct winsize ws;
 
   if(get_window_size(1, ws) == -1)
   {
   perror(Oops);
   return(1);
   }
   printf(cols=%d rows=%d\n, ws.ws_col, ws.ws_row);
   return(0);
 }
 
 Regards,
 Yuri Kozlov
спасибо Юрий. оно самое.

-- 
Guten Tag, Alexey



Re: ширина терминала в си

2005-01-10 Пенетрантность Gossen Alexey
On Thu, 06 Jan 2005 02:17:30 +0300
Artem Chuprina [EMAIL PROTECTED] wrote:

 Что ж тут парадоксального?  gdb ее выставляет, а ты - нет.

дык вроде она уже выставлена

в xterm'e 
set | grep COLUMNS её видит, а в нём же запущенная программа, которая
пытается сделать getenv(COLUMNS) - нет


-- 
Guten Tag, Alexey



Re: ширина терминала в си

2005-01-10 Пенетрантность Alexander A. Vlasov
Добрый день.

То же поведение замечено с dpkg.
при терминале с COLUMNS=132
$ echo $COLUMNS
132
$ dpkg -l
(вывод, отворматированный на 80 столбцов).

а вот если
$ COLUMNS=132 dpkg -l 
то вывод отформатирован на 132 столбца. 

Все же что-то тут не так.

On Mon, Jan 10, 2005 at 03:34:20PM +0100, Gossen Alexey wrote:
 On Thu, 06 Jan 2005 02:17:30 +0300
 Artem Chuprina [EMAIL PROTECTED] wrote:
 
 Что ж тут парадоксального?  gdb ее выставляет, а ты - нет.
 
 дык вроде она уже выставлена
 
 в xterm'e 
 set | grep COLUMNS её видит, а в нём же запущенная программа, которая
 пытается сделать getenv(COLUMNS) - нет
 
 

-- 
WBR,
 Alexander A. Vlasov
 Debian GNU/Linux user
 JID:   [EMAIL PROTECTED]
 nic-hdl:   ZULU-UANIC



Re: ширина терминала в си

2005-01-10 Пенетрантность Mikhail Gusarov

You ([EMAIL PROTECTED]) wrote:

 То же поведение замечено с dpkg.
 при терминале с COLUMNS=132
 $ echo $COLUMNS
 132
 $ dpkg -l
 (вывод, отворматированный на 80 столбцов).

Ман bash по поводу export выкурен?

-- 
Mikhail Gusarov
ICQ UIN: 111575219
JID: [EMAIL PROTECTED]



Re: ширина терминала в си

2005-01-10 Пенетрантность Victor B. Wagner
On 2005.01.10 at 21:44:39 +0600, Mikhail Gusarov wrote:

 
 You ([EMAIL PROTECTED]) wrote:
 
  То же поведение замечено с dpkg.
  при терминале с COLUMNS=132
  $ echo $COLUMNS
  132
  $ dpkg -l
  (вывод, отворматированный на 80 столбцов).
 
 Ман bash по поводу export выкурен?
 
Тут надо не по поводу export его курить, а по поводу COLUMNS.

Тут-то как раз и выяснится, что эту переменную выставляет (и меняет по
получению SIGWINCH сам bash. Причем исключительно для своих внутренних
целей - для встроенной команды select.

Поэтому авторы dpkg были в корне неправы, что зареклись на её
использование. Может быть в ранних версиях, когда dpkg был шелловским
скриптом, это имело смысл. А в C-шной программе надо использовать
выше по треду приведенный ioctl.

А то ведь export может привести к странным эффектам.

Например - берем терминал шириной 132, делаем там export COLUMNS,

Теперь запускаем из этого терминала 

xterm -geometry 80x25 -e tclsh
и в полученном tclsh делаем set env(COLUMNS)


-- 
 To UNSUBSCRIBE, email to [EMAIL PROTECTED]
 with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
 



Re: ширина терминала в си

2005-01-10 Пенетрантность Artem Chuprina
Victor B. Wagner - debian-russian@lists.debian.org  @ Mon, 10 Jan 2005 
19:42:44 +0300:

 VBW Поэтому авторы dpkg были в корне неправы, что зареклись на её
 VBW использование. Может быть в ранних версиях, когда dpkg был шелловским
 VBW скриптом, это имело смысл. А в C-шной программе надо использовать
 VBW выше по треду приведенный ioctl.

Авторы dpkg были в корне неправы, ограничив при ширине 80 размер поля
имени пакета так, что оно туда, мягко говоря, не влезает.  Если они еще
ширину будут определять по ioctl...

-- 
Artem Chuprina
RFC2822: ran{}ran.pp.ru Jabber: [EMAIL PROTECTED]



Re: ширина терминала в си

2005-01-06 Пенетрантность Yuri Kozlov

On Thu, 06 Jan 2005 02:17:30 +0300
 Artem Chuprina [EMAIL PROTECTED] wrote:

Gossen Alexey - debian-russian  @ Wed, 5 Jan 2005 19:27:17 +0100:

GA парадокс(для меня),  если запускаю программу из-под gdb, всё 
получается.

GA если программу запускаю непосредственно, getenv возвращает NULL

Что ж тут парадоксального?  gdb ее выставляет, а ты - нет.



Основное взято из rlogin.c BSD4.4
Работает с xterm и в обычной консоли

[EMAIL PROTECTED]:~$ ./a.out
cols=89 rows=24
[EMAIL PROTECTED]:~$

#include stdio.h
#include sys/ioctl.h
#include errno.h

#define get_window_size(fd, wp) ioctl(fd, TIOCGWINSZ, wp)

int main(int argc, char *argv[], char *env[])
{
struct winsize ws;

if(get_window_size(1, ws) == -1)
{
perror(Oops);
return(1);
}
printf(cols=%d rows=%d\n, ws.ws_col, ws.ws_row);
return(0);
}

Regards,
Yuri Kozlov



ширина терминала в си

2005-01-05 Пенетрантность Gossen Alexey
добрый день, господа

cорри, оффтоп. 

я относительно новичок в си

подскажите, пожалуйста, как определить ширину терминала, на котором
запущена программа. пытался вытащить её из системной переменной COLUMNS,

парадокс(для меня),  если запускаю программу из-под gdb, всё получается.
если программу запускаю непосредственно, getenv возвращает NULL

терминал -  xterm, console, console + framebuffer  и т.д.

ах да, использование ncurses исключено. 

спасибо за внимание

-- 
Guten Tag, Alexey



Re: ширина терминала в си

2005-01-05 Пенетрантность Artem Chuprina
Gossen Alexey - debian-russian  @ Wed, 5 Jan 2005 19:27:17 +0100:

 GA парадокс(для меня),  если запускаю программу из-под gdb, всё получается.
 GA если программу запускаю непосредственно, getenv возвращает NULL

Что ж тут парадоксального?  gdb ее выставляет, а ты - нет.

-- 
Artem Chuprina ran{}ran.pp.ru