Portál AbcLinuxu, 13. května 2025 17:05
$COLUMNS
obvykle obsahuje počet sloupců. Stačí ji tedy přečíst pomocí getenv
. Nevím ale, nakolik je to přenosné.
#include <stdio.h> #include <term.h> #include <ncurses.h> int main() { int rows, cols; setupterm(NULL, fileno(stdout), (int*)0); rows = tigetnum("lines"); cols = tigetnum("cols"); printf("%dx%d\n", cols, rows); return 0; }Slinkovat s ncurses (
-lncurses
), v případě potřeby přidat include cestu (třeba -I/usr/include/ncurses
).
Osobně bych asi použil to, co je popsáno v man tty_ioctl. Dále by se daly využít ncurses, nicméně to je v tomhle případě asi overkill. A pak je tu ještě ta škaredá možnost se čtením proměnných prostředí $LINES a $COLUMNS :)
#include <stdio.h> #include <curses.h> int main(void) { setupterm(NULL, 1, NULL); printf("%d %d\n", tigetnum("cols"), tigetnum("lines")); return 0; }Je třeba linkovat s -lcurses. Jako další level se můžeš podívat na signál SIGWINCH, případně na celou knihovnu ncurses.
void vypis(FILE *fr) /* vypis souboru - fr musi být otevřen pro čtení v text */ { char c; int p_radek = 1; while (c = getc(fr), c !=EOF){ putchar(c); if (c == '\n') ++p_radek; if (p_radek == radek) { printf("%*s %ls", sloupcu / 2 + 2, "MORE"); p_radek = 1; while (getchar() == '\n') ; putchar(c); } } } void init(void) { if (setupterm(NULL, 1, NULL) != ERR) { sloupcu = COLS; radek = LINES; } }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.