#! /usr/bin/python

import os, re, string, sys, getopt

def version():
    print "Generic Colouriser 0.6"
    sys.exit()

def help():
    print "Generic Colouriser 0.6"
    print
    print "-e --stderr    redirect stderr. If this option is selected, "
    print "               do not automatically redirect stdout"
    print "-s --stdout    redirect stdout, even if -e is selected"
    print "-c name --config=name    use name as configuration file for grcat"
    print "--colour=word  word is one of: on, off, auto"
    print
    sys.exit()


try:
    optlist, args = getopt.getopt(sys.argv[1:], "sec:", ["stdout", "stderr", "config=", "colour="] )
except:
    help()

stdoutf = 0
stderrf = 0

# configure file for grcat
cfile = ""

colour = 1

for i in optlist:
    if i[0] in ["--stderr", "-e"]:
        stderrf = 1
    elif i[0] in ["--stdout", "-s"]:
        stdoutf = 1
    elif i[0] in ["--config", "-c"]:
        cfile = i[1]
    elif i[0] == "--colour":
        if i[1] == "on":
            colour = 1
        elif i[1] == "off":
            colour = 0
        elif i[1] == "auto":
            colour = sys.stdout.isatty()
        else:
            help()

stdoutff = 1
stderrff = 0
if stderrf == 1:
    stdoutff = 0
    stderrff = 1
if stdoutf == 1:
    stdoutff = 1


if cfile == "":
    conffilename = [os.environ['HOME']+"/.grc/grc.conf", "/etc/grc.conf"]
    for i in conffilename:
        if os.path.isfile(i):
            conffile = i
            break
    regexplist = []

    f = open(conffile, "r")
    while 1:
        l = f.readline()
        if l == "":
            break
        if l[0] == "#" or l[0] == '\012':
            continue
        regexp = l[:-1]
        if re.search(regexp, string.join(args)):
            cfile = f.readline()[:-1]
            break

if cfile != "" and colour:
    cho, chi = os.pipe()

    pid1 = os.fork()
    if pid1 == 0: # child
        if stdoutff:
            os.dup2(chi, 1)
        if stderrff:
            os.dup2(chi, 2)
        os.close(cho)
        os.close(chi)
        os.execvp(args[0], args)


    pid2 = os.fork()
    if pid2 == 0: # child
        os.dup2(cho, 0)
        os.close(chi)
        os.close(cho)
        os.execvp("grcat", ["grcat", cfile])

    os.waitpid(pid1, 0)
    os.close(chi)
    os.waitpid(pid2, 0)
    os.close(cho)
        
else:
    if os.fork() == 0:
        os.execvp(args[0], args)
    os.wait()

