diff options
Diffstat (limited to 'usr/src/lib/libcmd/common/head.c')
-rw-r--r-- | usr/src/lib/libcmd/common/head.c | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/usr/src/lib/libcmd/common/head.c b/usr/src/lib/libcmd/common/head.c deleted file mode 100644 index 80ce196b7e..0000000000 --- a/usr/src/lib/libcmd/common/head.c +++ /dev/null @@ -1,150 +0,0 @@ -/*********************************************************************** -* * -* This software is part of the ast package * -* Copyright (c) 1992-2010 AT&T Intellectual Property * -* and is licensed under the * -* Common Public License, Version 1.0 * -* by AT&T Intellectual Property * -* * -* A copy of the License is available at * -* http://www.opensource.org/licenses/cpl1.0.txt * -* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * -* * -* Information and Software Systems Research * -* AT&T Research * -* Florham Park NJ * -* * -* Glenn Fowler <gsf@research.att.com> * -* David Korn <dgk@research.att.com> * -* * -***********************************************************************/ -#pragma prototyped -/* - * David Korn - * AT&T Bell Laboratories - * - * output the beginning portion of one or more files - */ - -static const char usage[] = -"[-n?\n@(#)$Id: head (AT&T Research) 2006-09-27 $\n]" -USAGE_LICENSE -"[+NAME?head - output beginning portion of one or more files ]" -"[+DESCRIPTION?\bhead\b copies one or more input files to standard " - "output stopping at a designated point for each file or to the end of " - "the file whichever comes first. Copying ends at the point indicated by " - "the options. By default a header of the form \b==> \b\afilename\a\b " - "<==\b is output before all but the first file but this can be changed " - "with the \b-q\b and \b-v\b options.]" -"[+?If no \afile\a is given, or if the \afile\a is \b-\b, \bhead\b " - "copies from standard input starting at the current location.]" -"[+?The option argument for \b-c\b, and \b-s\b can optionally be " - "followed by one of the following characters to specify a different unit " - "other than a single byte:]" - "{" - "[+b?512 bytes.]" - "[+k?1-killobyte.]" - "[+m?1-megabyte.]" - "}" -"[+?For backwards compatibility, \b-\b\anumber\a is equivalent to \b-n\b " - "\anumber\a.]" -"[n:lines?Copy \alines\a lines from each file.]#[lines:=10]" -"[c:bytes?Copy \achars\a bytes from each file.]#[chars]" -"[q:quiet|silent?Never ouput filename headers.]" -"[s:skip?Skip \askip\a characters or lines from each file before " - "copying.]#[skip]" -"[v:verbose?Always ouput filename headers.]" - "\n\n" -"[ file ... ]" - "\n\n" -"[+EXIT STATUS?]" - "{" - "[+0?All files copied successfully.]" - "[+>0?One or more files did not copy.]" - "}" -"[+SEE ALSO?\bcat\b(1), \btail\b(1)]" -; - -#include <cmd.h> - -int -b_head(int argc, register char** argv, void* context) -{ - static const char header_fmt[] = "\n==> %s <==\n"; - - register Sfio_t* fp; - register char* cp; - register off_t keep = 10; - register off_t skip = 0; - register int delim = '\n'; - int header = 1; - char* format = (char*)header_fmt+1; - - cmdinit(argc, argv, context, ERROR_CATALOG, 0); - for (;;) - { - switch (optget(argv, usage)) - { - case 'c': - delim = -1; - /*FALLTHROUGH*/ - case 'n': - if (opt_info.offset && argv[opt_info.index][opt_info.offset] == 'c') - { - delim = -1; - opt_info.offset++; - } - if ((keep = opt_info.number) <=0) - error(2, "%s: %I*d: positive numeric option argument expected", opt_info.name, sizeof(keep), keep); - continue; - case 'q': - header = argc; - continue; - case 'v': - header = 0; - continue; - case 's': - skip = opt_info.number; - continue; - case '?': - error(ERROR_usage(2), "%s", opt_info.arg); - continue; - case ':': - error(2, "%s", opt_info.arg); - continue; - } - break; - } - argv += opt_info.index; - argc -= opt_info.index; - if (error_info.errors) - error(ERROR_usage(2), "%s", optusage(NiL)); - if (cp = *argv) - argv++; - do - { - if (!cp || streq(cp, "-")) - { - cp = "/dev/stdin"; - fp = sfstdin; - sfset(fp, SF_SHARE, 1); - } - else if (!(fp = sfopen(NiL, cp, "r"))) - { - error(ERROR_system(0), "%s: cannot open", cp); - continue; - } - if (argc > header) - sfprintf(sfstdout, format, cp); - format = (char*)header_fmt; - if (skip > 0) - sfmove(fp, NiL, skip, delim); - if (sfmove(fp, sfstdout, keep, delim) < 0 && errno != EPIPE) - error(ERROR_system(0), "%s: read error", cp); - if (fp != sfstdin) - sfclose(fp); - } while (cp = *argv++); - if (sfsync(sfstdout)) - error(ERROR_system(0), "write error"); - return error_info.errors != 0; -} |