#!/usr/bin/env python

import sys
import time
import getopt

def usage_and_exit(errorcode):
    import os.path
    stream = errorcode and sys.stderr or sys.stdout
    stream.write("""Usage: %s OPTIONS
    
Options:
  --help, -h:     Show this usage message.
  --long, -l:     Use long datestamp format.
  --diff, -d:     Include timestamp difference.
  --prefix=ARG:   Prefix each line of output with ARG.
""" % (os.path.basename(sys.argv[0])))
    sys.exit(errorcode)

def main():
    long = diff = 0
    prefix = ''
    opts, args = getopt.getopt(sys.argv[1:], 'dhl',
                               ['prefix=', 'diff', 'long', 'help'])
    if len(args):
        usage_and_exit(1)
    for name, value in opts:
        if name == '-h' or name == '--help':
            usage_and_exit(0)
        elif name == '-l' or name == '--long':
            long = 1
        elif name == '-d' or name == '--diff':
            diff = 1
        elif name == '--prefix':
            prefix = value + ' '

    def _print_line(line, prev_time):
        the_time = time.time()
        time_str = time.asctime(time.localtime(the_time))
        if not long:
            time_str = time_str[11:19]
        diff_val = prev_time is not None and (the_time - prev_time) or 0.0
        diff_str = diff and ' %016.4f' % (diff_val) or ''
        sys.stdout.write('[%s%s%s] %s' % (prefix, time_str, diff_str, line))
        sys.stdout.flush()
        return the_time

    last_time = _print_line("[ START TIME ]--------------------------------------------\n", None)
    while 1:
        line = sys.stdin.readline()
        if not line:
            break
        last_time = _print_line(line, last_time)
    _print_line("[ END TIME ]----------------------------------------------\n", last_time)

if __name__ == "__main__":
    main()

