* Copyright (c) 1989 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
static char sccsid
[] = "@(#)print.c 5.24 (Berkeley) 10/19/90";
static char rcsid
[] = "$Header: /a/cvs/386BSD/src/bin/ls/print.c,v 1.2 1993/06/29 02:59:33 nate Exp $";
char modep
[15], *user_from_uid(), *group_from_gid(), *strerror();
(void)printf("total %lu\n", f_kblocks
?
howmany(stats
[0].lstat
.st_btotal
, 2) :
stats
[0].lstat
.st_btotal
);
(void)printf("%6lu ", stats
->lstat
.st_ino
);
(void)printf("%4ld ", f_kblocks
?
howmany(stats
->lstat
.st_blocks
, 2) :
(void)strmode(stats
->lstat
.st_mode
, modep
);
(void)printf("%s %3u %-*s ", modep
, stats
->lstat
.st_nlink
,
UT_NAMESIZE
, user_from_uid(stats
->lstat
.st_uid
, 0));
(void)printf("%-*s ", UT_NAMESIZE
,
group_from_gid(stats
->lstat
.st_gid
, 0));
if (S_ISCHR(stats
->lstat
.st_mode
) ||
S_ISBLK(stats
->lstat
.st_mode
))
(void)printf("%3d, %3d ", major(stats
->lstat
.st_rdev
),
minor(stats
->lstat
.st_rdev
));
(void)printf("%8ld ", stats
->lstat
.st_size
);
printtime(stats
->lstat
.st_atime
);
printtime(stats
->lstat
.st_ctime
);
printtime(stats
->lstat
.st_mtime
);
(void)printf("%s", stats
->name
);
(void)printtype(stats
->lstat
.st_mode
);
if (S_ISLNK(stats
->lstat
.st_mode
))
register int base
, chcnt
, cnt
, col
, colwidth
;
int endcol
, numcols
, numrows
, row
;
colwidth
= stats
[0].lstat
.st_maxlen
;
colwidth
= (colwidth
+ TAB
) & ~(TAB
- 1);
if (termwidth
< 2 * colwidth
) {
numcols
= termwidth
/ colwidth
;
(void)printf("total %lu\n", f_kblocks
?
howmany(stats
[0].lstat
.st_btotal
, 2) :
stats
[0].lstat
.st_btotal
);
for (row
= 0; row
< numrows
; ++row
) {
for (base
= row
, chcnt
= col
= 0; col
< numcols
; ++col
) {
chcnt
+= printaname(stats
+ base
);
if ((base
+= numrows
) >= num
)
while ((cnt
= (chcnt
+ TAB
& ~(TAB
- 1))) <= endcol
) {
* print [inode] [size] name
* return # of characters printed, no trailing characters
chcnt
+= printf("%5lu ", lp
->lstat
.st_ino
);
chcnt
+= printf("%4ld ", f_kblocks
?
howmany(lp
->lstat
.st_blocks
, 2) : lp
->lstat
.st_blocks
);
chcnt
+= printf("%s", lp
->name
);
chcnt
+= printtype(lp
->lstat
.st_mode
);
char *longstring
, *ctime();
longstring
= ctime((long *)&ftime
);
(void)putchar(longstring
[i
]);
#define SIXMONTHS ((DAYSPERNYEAR / 2) * SECSPERDAY)
for (i
= 11; i
< 24; i
++)
(void)putchar(longstring
[i
]);
else if (ftime
+ SIXMONTHS
> time((time_t *)NULL
))
for (i
= 11; i
< 16; ++i
)
(void)putchar(longstring
[i
]);
for (i
= 20; i
< 24; ++i
)
(void)putchar(longstring
[i
]);
if (mode
& (S_IXUSR
| S_IXGRP
| S_IXOTH
)) {
char path
[MAXPATHLEN
+ 1], *strerror();
if ((lnklen
= readlink(name
, path
, MAXPATHLEN
)) == -1) {
(void)fprintf(stderr
, "\nls: %s: %s\n", name
, strerror(errno
));
(void)printf(" -> %s", path
);