+++ /dev/null
-/* depend: */
-/* cflags: */
-/* linker: */
-
-#include <assert.h>
-#include <getopt.h>
-#include <malloc.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-/* constants */
-
-//#define BUFFER_SIZE 4096
-#define BUFFER_SIZE 256
-
-/* macros */
-
-#define CEIL(x, y) (((x) + (y) - 1) / (y))
-#define MIN(x, y) (((x) < (y)) ? (x) : (y))
-#define MAX(x, y) (((x) > (y)) ? (x) : (y))
-
-/* verbose */
-
-#define ERROR 0
-#define WARNING 1
-#define INFO 2
-#define DEBUG 3
-
-#define VERBOSE(level, statement...) do { if (level <= verbose) { statement; } } while(0)
-
-/* gobal variables */
-
-char *progname = NULL;
-int verbose = 0;
-
-/* help function */
-
-void usage (int ret)
-{
- FILE *fd = ret ? stderr : stdout;
- fprintf (fd, "usage: %s\n", progname);
- fprintf (fd, " -h : help message\n");
- fprintf (fd, " -v : verbose level (%d)\n", verbose);
-
- exit (ret);
-}
-
-/* main function */
-
-int main (int argc, char *argv[])
-{
- char buffer[BUFFER_SIZE + 1] = {0};
- char *pt = buffer;
- int i, j = 0, n;
-
- progname = argv[0];
-
- int c;
- while ((c = getopt(argc, argv, "hv:")) != EOF) {
- switch (c) {
- case 'v':
- verbose = atoi (optarg);
- break;
- case 'h':
- VERBOSE (INFO, usage (0));
- break;
- default:
- VERBOSE (ERROR, usage (1));
- }
- }
- if (argc - optind != 0) {
- VERBOSE (ERROR, fprintf (stderr, "%s: invalid option -- %s\n", progname, argv[optind]));
- VERBOSE (ERROR, usage (1));
- }
-
- /* read from input stream */
- while ((n = read (STDIN_FILENO, pt, BUFFER_SIZE - (pt - buffer))) != 0) {
- VERBOSE (DEBUG, fprintf (stdout, "read %d bytes\n", n));
- n += (pt - buffer);
-
- /* look for end of line */
- for (i = 0, j = 0; i < n; i++) {
- if (buffer[i] == '\n') {
- buffer[i] = 0;
- VERBOSE (DEBUG, fprintf (stdout, "line(%d): %s\n", j, buffer + j));
- j = i + 1;
- }
- }
-
- /* keep remainding */
- if (j < n) {
- for (i = 0; i < n - j; i++) {
- buffer[i] = buffer[i + j];
- }
- pt = buffer + n - j;
- for (i = n - j; i < BUFFER_SIZE; i++) {
- buffer[i] = 0;
- }
- }
- }
-
- /* check that nothing is left behind */
-
- VERBOSE (DEBUG, fprintf (stdout, "last\n"));
- VERBOSE (DEBUG, fprintf (stdout, "line(%d): %s\n", j, buffer + j));
-
- return 0;
-}
-
-// test: calc.exe -h
-// test: calc.exe -h | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
-// test: calc.exe -_ 2> /dev/null | awk 'END { if (NR == 0) { exit(0) } else exit (1) }'
-// test: calc.exe -_ 2>&1 | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
-// test: echo "foo\nbar\nfoobar" | calc.exe -v3
-
-/* vim: set ts=4 sw=4 et: */