# HG changeset patch # User Rob Landley # Date 1382850176 18000 # Node ID 54b2776de2f45f506ec0c70e98efc5104011888c # Parent 580a0300b68faf9d0aa0e48b544cd7a1bba3c4fc Refactor terminal querying. diff -r 580a0300b68f -r 54b2776de2f4 lib/lib.c --- a/lib/lib.c Sun Oct 13 15:33:32 2013 +0200 +++ b/lib/lib.c Sun Oct 27 00:02:56 2013 -0500 @@ -485,29 +485,28 @@ // set *x=0 and *y=0 before calling to detect failure to set either, or // x=80 y=25 to provide defaults -void terminal_size(unsigned *x, unsigned *y) +void terminal_size(unsigned *xx, unsigned *yy) { struct winsize ws; - int i; + unsigned i, x = xx ? *xx : 0, y = yy ? *yy : 0; + char *s; - //memset(&ws, 0, sizeof(ws)); for (i=0; i<3; i++) { - if (ioctl(i, TIOCGWINSZ, &ws)) continue; - if (x) *x = ws.ws_col; - if (y) *y = ws.ws_row; + memset(&ws, 0, sizeof(ws)); + if (!ioctl(i, TIOCGWINSZ, &ws)) { + if (ws.ws_col) x = ws.ws_col; + if (ws.ws_row) y = ws.ws_row; + + break; + } } - if (x) { - char *s = getenv("COLUMNS"); + s = getenv("COLUMNS"); + if (s) sscanf(s, "%u", &x); + s = getenv("ROWS"); + if (s) sscanf(s, "%u", &y); - i = s ? atoi(s) : 0; - if (i>0) *x = i; - } - if (y) { - char *s = getenv("ROWS"); - - i = s ? atoi(s) : 0; - if (i>0) *y = i; - } + if (xx) *xx = x; + if (yy) *yy = y; } int yesno(char *prompt, int def)