import os, sys, getopt
import re
import glob

def get_full_path(path, pattern):
	for (dirpath, dirnames, filenames) in os.walk(path):
		match = re.search(pattern, dirpath)
		for filename in filenames:
			if filename.endswith(('.c', '.h')):
				yield os.path.join(dirpath, filename)	

def read_file(file, pattern):
	with open(file, 'r') as outfile:
        	for line in outfile:
			match = re.compile(str(pattern)).match(line)
			if match:
				print(file + " " + match.group())
				

def main(argv):
	path, f_pattern, s_pattern = '', '', ''
	try:
	   opts, args = getopt.getopt(argv,"hi:p:f:s:",["ifile=","file_pattern=","string_pattern="])
	except getopt.GetoptError:
	   print 'test.py -i <path> -p <pattern>'
	   sys.exit(2)
	for opt, arg in opts:
	   print(opt, arg)
	   if opt == '-h':
	      print 'test.py -i <path>'
	      sys.exit()
	   elif opt in ("-i", "--ifile"):
	      path = arg
	   elif opt in ("-f", "--file_pattern"):
	      f_pattern = arg
	   elif opt in ("-s", "--string_pattern"):
	      s_pattern = arg.encode().decode('unicode_escape')
	      print(s_pattern)
	
	files = get_full_path(path, f_pattern)
	for file in files:
		read_file(file, s_pattern)
	
if __name__ == "__main__":
	main(sys.argv[1:])
