roger@.uucp (Roger Droz) (11/08/90)
Using termcap/terminfo routines seems like a very expensive way of determining the screen width, if that's the only terminal capability one is interested in. I have seen several programs (such as less) use ioctl calls, but I know that not all of the Un*x systems in house have these. Code that uses ioctl invariably also uses tgetnum() if all else fails. That big termcap/terminfo library still has to be linked in only to be used once. #ifdef TIOCGWINSZ if (ioctl(2, TIOCGWINSZ, &w) == 0 && w.ws_col) sc_width = w.ws_col; else #ifdef WIOCGETD if (ioctl(2, WIOCGETD, &w) == 0 && w.uw_width) sc_width = w.uw_width/w.uw_hs; else #endif #endif sc_width = tgetnum("co"); if (dumb || sc_width < 0) sc_width = 80; What do you net people this of the following as a terse, portable way of determining screen width? FILE *tputfile; int stdoutwidth; if ((tputfile = popen("tput cols", "r")) != NULL) { if (fscanf(tputfile,"%d", &stdoutwidth) < 1) stdoutwidth = 80; (void) pclose(tputfile); } ____________ Roger Droz UUCP: uw-beaver!gtisqr!roger () () Maverick MICRoSystems / Global Technology International (_______) Mukilteo, WA ( ) | | Disclaimer: "We're all mavericks here: | | Each of us has our own opinions, (___) and the company has yet different ones!"