#!/usr/bin/env python from sys import argv try: last = int(argv[1]) except: print "No last number" exit(2) last = last + 1 fool_str = '' file_num = 0 filename ='' c_footer = '\treturn 0;\n}\n' # put a c source file def fizzbuzz(string, num): filename = 'func_' + str(num) + '.c' c_header = '#include\nint {}'.format('func' + str(num)) + '()\n{\n' st = '\tprintf("' + string + '");\n' f = open(filename,'w') f.write(c_header) f.write(st) f.write(c_footer) f.close() return '' def main(num): filename = 'main.c' c_header = '#include\n' f = open(filename, 'w') f.write(c_header) for x in range(num): proto = 'int ' + 'func' + str(x) + '();\n' f.write(proto) f.write('int main()\n{\n') for x in range(num): func = '\t' + 'func' + str(x) + '();\n' f.write(func) f.write(c_footer) f.close() def makefile(num): filename = 'Makefile' header_list = ['all:\n', 'link:\n', 'clean:\n'] f = open(filename, 'w') f.write(header_list[0]) for x in range(num): filename = 'func_' + str(x) + '.c' makeall = '\t'+ 'gcc -Wall -c ' + filename + '\n' f.write(makeall) f.write('\tgcc -Wall -c main.c\n') f.write(header_list[1]) makelink = '\t'+ 'gcc -Wall *.o -o ' + argv[1] + '\n' makelink2 = '\t'+ 'strip ' + argv[1] + '\n' f.write(makelink) f.write(makelink2) f.write(header_list[2]) makeclean = '\t'+ 'rm -rf Makefile func_*.c *.o main.c ' + argv[1] + '\n' f.write(makeclean) f.close() for x in range(1,last): if not (x % 15): fool_str = fool_str + 'fizzbuzz\\n' elif not (x % 5): fool_str = fool_str + 'buzz\\n' elif not (x % 3): fool_str = fool_str + 'fizz\\n' else: fool_str = fool_str + str(x) + '\\n' if (len(fool_str.split('\\n')) == 16) \ or (x == (last - 1)): fool_str = fizzbuzz(fool_str, file_num) file_num = file_num + 1 main(file_num) makefile(file_num)