#! /usr/bin/env python

"Replace tabs with spaces in argument files.  Print names of changed files."

import os
import sys
import getopt

def main():
    tabsize = 8
    try:
        opts, args = getopt.getopt(sys.argv[1:], "t:")
        if not args:
            raise getopt.error, "At least one file argument required"
    except getopt.error, msg:
        print msg
        print "usage:", sys.argv[0], "[-t tabwidth] file ..."
        return
    for optname, optvalue in opts:
        if optname == '-t':
            tabsize = int(optvalue)

    for file in args:
        process(file, tabsize)

def process(file, tabsize):
    try:
        f = open(file)
        text = f.read()
        f.close()
    except IOError, msg:
        print "%s: I/O error: %s" % (`file`, str(msg))
        return
    newtext = text.expandtabs(tabsize)
    if newtext == text:
        return
    backup = file + "~"
    try:
        os.unlink(backup)
    except os.error:
        pass
    try:
        os.rename(file, backup)
    except os.error:
        pass
    f = open(file, "w")
    f.write(newtext)
    f.close()
    print file

if __name__ == '__main__':
    main()
