[med-svn] [hail] 01/07: Imported Upstream version 0.1.0

Kevin Murray daube-guest at moszumanska.debian.org
Sat Jan 9 23:12:23 UTC 2016


This is an automated email from the git hooks/post-receive script.

daube-guest pushed a commit to branch master
in repository hail.

commit a8a6abfeef5edc6ab3157bef3d0d8b0c01903cec
Author: Kevin Murray <spam at kdmurray.id.au>
Date:   Sun Jul 12 16:11:13 2015 +1000

    Imported Upstream version 0.1.0
---
 .gitignore |  2 ++
 Makefile   | 17 +++++++++++++++
 README.md  | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 hail.1     | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
 hail.c     | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 206 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f3d0a49
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+hail
+*.sw*
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..09b4197
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,17 @@
+CC      ?= gcc
+CFLAGS  +=-O3 -std=gnu99
+PREFIX  ?= $(HOME)
+
+all: hail
+
+hail: hail.c
+	$(CC) $(CFLAGS) -o $@ $<
+
+install: hail hail.1
+	mkdir -p $(PREFIX)/bin
+	mkdir -p $(PREFIX)/man/man1
+	cp hail $(PREFIX)/bin
+	cp hail.1 $(PREFIX)/man/man1
+
+clean:
+	rm -f hail
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..db18ebd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,59 @@
+hail
+====
+
+Extract lines from a file
+
+
+Installation
+------------
+
+Hail has no dependencies other than a C compiler which implements the GNU-C99
+standard. To install:
+
+    git clone https://github.com/kdmurray91/hail.git
+    cd hail
+    make
+    make install
+
+
+About
+-----
+
+Hail gets its name from a contraction of `head` and `tail`, the common
+alternative to this program. It extracts lines from a file, taken on stdin,
+and prints them on stdout. It's so simple that the Unix wizards of old never
+bothered. But I'm lazy and prone to procrastination.
+
+Hail takes any number of `x`-`y` pairings as arguments. These pairs are
+integral numbers, corresponding to the first and last lines to print. The
+final number may be excluded to indicate that the remainder of the file
+should be printed
+
+
+Examples
+--------
+
+    # prints 1 through 10, i.e. does nothing
+    seq 1 10 | hail 1-
+
+    # prints 1 through 3, i.e. equivalent to `head -n 3`
+    seq 1 10 | hail 1-3
+
+    # prints 3 through 5, i.e. equivalent to `head -n 5 | tail -n 3`
+    seq 1 10 | hail 3-5
+
+    # prints 5 through 10, i.e. equivalent to `tail -n 6`
+    seq 1 10 | hail 5-
+
+    # prints 2, 3, 5 and 7, which is where I'll give up on my comparisons to
+    # head and tail
+    seq 1 10 | hail 2-3 5-5 7-7
+
+
+License
+-------
+
+Copyright 2015 Kevin Murray <spam at kdmurray.id.au>
+
+Licensed under the GNU General Public License, version 3 or (at your option)
+any later version.
diff --git a/hail.1 b/hail.1
new file mode 100644
index 0000000..a5795e7
--- /dev/null
+++ b/hail.1
@@ -0,0 +1,58 @@
+.TH "HAIL" "1" "February 2015" "" ""
+.
+.SH "NAME"
+\fBhail\fR \- Extract lines from a file
+.
+.SH "SYNOPSIS"
+\fBhail\fR \fIFIRST\fR\-\fILAST\fR \.\.\.
+.
+.SH "DESCRIPTION"
+Hail gets its name from a contraction of \fBhead\fR and \fBtail\fR, the common
+alternative to this program\. It extracts lines from a file, taken on stdin,
+and prints them on stdout\. It\'s so simple that the Unix wizards of old never
+bothered\. But I\'m lazy and prone to procrastination\.
+.
+.SH "SYNTAX"
+Hail takes any number of \fBx\fR\-\fBy\fR pairings as arguments\. These pairs
+are (1-based) integral numbers, corresponding to the first and last lines to
+print\. The final number may be excluded to indicate that the remainder of the
+file should be printed
+.
+.SH "EXAMPLES"
+# prints 1 through 10, i\.e\. does nothing
+.
+.P
+seq 1 10 | hail 1\-
+.
+.P
+# prints 1 through 3, i\.e\. equivalent to \fBhead \-n 3\fR
+.
+.P
+seq 1 10 | hail 1\-3
+.
+.P
+# prints 3 through 5, i\.e\. equivalent to \fBhead \-n 5 | tail \-n 3\fR
+.
+.P
+seq 1 10 | hail 3\-5
+.
+.P
+# prints 5 through 10, i\.e\. equivalent to \fBtail \-n 6\fR
+.
+.P
+seq 1 10 | hail 5\-
+.
+.P
+# prints 2, 3, 5 and 7, which is where I\'ll give up on my comparisons to # head and tail
+.
+.P
+seq 1 10 | hail 2\-3 5\-5 7\-7
+.
+.SH "AUTHOR"
+Kevin Murray (daube) \fIspam at kdmurray\.id\.au\fR
+.
+.SH "COPYRIGHT"
+Copyright 2015 Kevin Murray \fIspam at kdmurray\.id\.au\fR
+.
+.P
+Licensed under the GNU General Public License, version 3 or (at your option) any later version\.
diff --git a/hail.c b/hail.c
new file mode 100644
index 0000000..0d010f0
--- /dev/null
+++ b/hail.c
@@ -0,0 +1,70 @@
+/*
+ * ============================================================================
+ *
+ *       Filename:  hail.c
+ *    Description:  Extract lines x to y
+ *        License:  GPLv3+
+ *         Author:  Kevin Murray, spam at kdmurray.id.au
+ *
+ * ============================================================================
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+
+/* Defined as a macro to allow use of argv[0]. */
+#define usage()                                                             \
+        fprintf(stderr, "USAGE: %s <first>-<last> [<first>-<last ...]\n",   \
+                argv[0])
+
+int
+main(int argc, const char **argv)
+{
+    FILE *fp = stdin;
+    char *buf = NULL;
+    size_t len = 0;
+    ssize_t res = 0;
+    size_t lineno = 0;
+    size_t first, last;
+    int i = 0;
+
+    /* We expect to have at least one pair of start-finish line nums. */
+    if (argc < 2) {
+        usage();
+        return EXIT_FAILURE ;
+    }
+
+    /* For each pair of <start>-<finish> */
+    for (i = 1; i < argc; i++) {
+        /* Parse the <x>-<y> from argv, storing how many elements we parsed. */
+        res = sscanf(argv[i], "%zu-%zu", &first, &last);
+        /* we expect at least one value, so error out if we don't have one. */
+        if (res < 1) {
+            putchar('\n');
+            usage();
+            fflush(stdout);
+            free(buf);
+            return EXIT_FAILURE ;
+        }
+        /* We have something like 2-, so we go till the last line. */
+        if (res == 1) {
+            last = SIZE_MAX;
+        }
+        /* Main brains of hail: Grab line and print it if it's in the range. */
+        while (lineno < last) {
+            if (getline(&buf, &len, fp) < 1) {
+                /* EOF or error */
+                break;
+            }
+            if (++lineno >= first) {
+                fputs(buf, stdout);
+            }
+        }
+    }
+    /* Clean up and exit nicely */
+    fflush(stdout);
+    free(buf);
+    return EXIT_SUCCESS ;
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/hail.git



More information about the debian-med-commit mailing list