]> Zhao Yanbai Git Server - minix.git/commitdiff
support for head -n (suggested by xorquewasp)
authorDavid van Moolenbroek <david@minix3.org>
Sat, 10 Oct 2009 22:36:46 +0000 (22:36 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Sat, 10 Oct 2009 22:36:46 +0000 (22:36 +0000)
commands/simple/head.c
man/man1/head.1

index 3eb73776aef7d61c3b5e64a31fe66be47c035829..e29f24ae1bff6382aa1c5f5415a16de78c363d2c 100755 (executable)
@@ -16,15 +16,25 @@ int argc;
 char *argv[];
 {
   FILE *f;
-  int n, k, nfiles;
+  int legacy, n, k, nfiles;
   char *ptr;
 
-  /* Check for flag.  Only flag is -n, to say how many lines to print. */
+  /* Check for flags.  One can only specify how many lines to print. */
   k = 1;
-  ptr = argv[1];
   n = DEFAULT;
-  if (argc > 1 && *ptr++ == '-') {
-       k++;
+  legacy = 0;
+  for (k = 1; k < argc && argv[k][0] == '-'; k++) {
+       ptr = &argv[k][1];
+       if (ptr[0] == 'n' && ptr[1] == 0) {
+               k++;
+               if (k >= argc) usage();
+               ptr = argv[k];
+       }
+       else if (ptr[0] == '-' && ptr[1] == 0) {
+               k++;
+               break;  
+       }
+       else if (++legacy > 1) usage();
        n = atoi(ptr);
        if (n <= 0) usage();
   }
@@ -73,6 +83,6 @@ FILE *f;
 
 void usage()
 {
-  fprintf(stderr, "Usage: head [-n] [file ...]\n");
+  fprintf(stderr, "Usage: head [-lines | -n lines] [file ...]\n");
   exit(1);
 }
index a4acc054206883bebdbf5994c229aee49a6fa07a..6e7907bd200ad3a6cfeddb620776f1971cdfb3f7 100644 (file)
@@ -2,7 +2,7 @@
 .SH NAME
 head \- print the first few lines of a file
 .SH SYNOPSIS
-\fBhead\fR [\fB\-\fIn\fR]\fR [\fIfile\fR] ...\fR
+\fBhead\fR [\fB\-\fIn\fR | \fB\-n\fR \fIn\fR]\fR [\fIfile\fR] ...\fR
 .br
 .de FL
 .TP
@@ -15,9 +15,10 @@ head \- print the first few lines of a file
 # \\$2
 ..
 .SH OPTIONS
-.FL "\-\fIn\fR" "How many lines to print"
+.FL "\-n \fIn\fR" "How many lines to print"
+.FL "\-\fIn\fR" "How many lines to print (backwards-compatible)"
 .SH EXAMPLES
-.EX "head \-6" "Print first 6 lines of \fIstdin\fR"
+.EX "head \-6" "Print first 6 lines of \fIstdin\fR"
 .EX "head \-1 file1 file2" "Print first line of two files"
 .SH DESCRIPTION
 .PP