From: Keith Bostic Date: Tue, 27 Jun 1989 07:32:10 +0000 (-0800) Subject: get window size, break up printdir into three functions X-Git-Tag: BSD-4_3_Reno-Snapshot-Development~6051 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/4847d483a99ee0407164e5a21867e248c02ef0a4 get window size, break up printdir into three functions SCCS-vsn: bin/ls/ls.c 5.21 --- diff --git a/usr/src/bin/ls/ls.c b/usr/src/bin/ls/ls.c index de660a3294..12b4e7a2b7 100644 --- a/usr/src/bin/ls/ls.c +++ b/usr/src/bin/ls/ls.c @@ -25,11 +25,12 @@ char copyright[] = #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)ls.c 5.20 (Berkeley) %G%"; +static char sccsid[] = "@(#)ls.c 5.21 (Berkeley) %G%"; #endif /* not lint */ #include #include +#include #include #include #include @@ -43,7 +44,6 @@ int qflg, Aflg, Cflg, Fflg, Lflg, Rflg, Sflg; /* flags */ int f_accesstime; /* use time of last access */ -int f_firsttime = 1; /* to control recursion */ int f_group; /* show group ownership of a file */ int f_ignorelink; /* indirect through symbolic link operands */ int f_inode; /* print inode */ @@ -66,9 +66,13 @@ main(argc, argv) char **argv; { extern int optind, stat(); + struct sgttyb sgbuf; + struct winsize win; int ch; + char *p, *getenv(); int namecmp(), revnamecmp(), acccmp(), revacccmp(); int modcmp(), revmodcmp(), statcmp(), revstatcmp(); + int printcol(), printlong(), printscol(); /* * terminal defaults to -C -q @@ -77,6 +81,11 @@ main(argc, argv) if (isatty(1)) { f_nonprint = 1; lengthfcn = prablelen; + (void)ioctl(1, TIOCGETP, &sgbuf); + if (ioctl(1, TIOCGWINSZ, &win) == -1 || !win.ws_col) + termwidth = (p = getenv("COLUMNS")) ? atoi(p) : 80; + else + termwidth = win.ws_col; } else f_singlecol = 1; @@ -195,6 +204,14 @@ main(argc, argv) sortfcn = modcmp; } + /* select a print function */ + if (f_singlecol) + printfcn = printscol; + else if (f_longform) + printfcn = printlong; + else + printfcn = printcol; + if (argc) doargs(argc, argv); else @@ -312,7 +329,7 @@ displaydir(stats, num) if (num > 1 && !f_specialdir) qsort((char *)stats, num, sizeof(LS), sortfcn); - printdir(stats, num); + printfcn(stats, num); if (f_recursive) { savedpath = endofpath;