#! /usr/bin/python3
import os.path
import sys
import shlex
import re

from headerutils import *


files = list()
replace = list()
find = ""
usage = False

for x in sys.argv[1:]:
  if x[0:2] == "-h":
    usage = True
  elif x[0:2] == "-f" and find == "":
    find = x[2:]
  elif x[0:2] == "-r":
    replace.append (x[2:])
  elif x[0:1] == "-":
    print ("Error: unrecognized option " + x)
    usage = True
  else:
    files.append (x)

if find == "":
  usage = True

if usage:
  print ("replace-header -fheader -rheader [-rheader] file1 [filen.]")
  sys.exit(0)

string = ""
for x in replace:
  string = string + " '"+x+"'"
print ("Replacing '"+find+"'  with"+string)

for x in files:
  src = readwholefile (x)
  src = find_replace_include (find, replace, src)
  if (len(src) > 0):
    print (x + ": Changed")
    out = open(x, "w")
    for line in src:
      out.write (line);
    out.close ()
  else:
    print (x)



