tests: array01 string01 string02 gen001 gen002 gen003 gen004 ecce
	echo all up to date


clean: array01 string01 string02 gen001 gen002 gen003 gen004
	rm array01 string01 string02 gen001 gen002 gen003 gen004 array01-o string01-o string02-o gen001-o gen002-o gen003-o gen004-o

good:
	cp *.S *.asm *.txt old/

array01: array01.o
	gcc -o array01 array01.o
	gcc -o array01-o array01-o.o
	./array01-o > array01-o.txt
	./array01 > array01.txt
	diff array01-o.txt array01.txt
	diff array01-o.txt old/array01-o.txt
	diff array01.txt old/array01.txt
	diff array01-o.S old/array01-o.S
	diff array01.S old/array01.S
	diff array01.asm old/array01.asm

array01.o: array01.S
	nasm -O1 -f elf -l array01.lst array01.S
	nasm -O1 -f elf -l array01-o.lst array01-o.S

array01.S: array01.t ../lc ../assemble
	../lc -s array01.t
	../assemble -O array01.asm
	mv array01.S array01-o.S
	../assemble array01.asm

string01: string01.o
	gcc -o string01 string01.o
	gcc -o string01-o string01-o.o
	./string01-o > string01-o.txt
	./string01 > string01.txt
	diff string01-o.txt string01.txt
	diff string01.txt old/string01.txt
	diff string01-o.txt old/string01-o.txt
	diff string01.S old/string01.S
	diff string01-o.S old/string01-o.S
	diff string01.asm old/string01.asm

string01.o: string01.S
	nasm -O1 -f elf -l string01.lst string01.S
	nasm -O1 -f elf -l string01-o.lst string01-o.S

string01.S: string01.t ../lc ../assemble
	../lc -s string01.t
	../assemble -O string01.asm
	mv string01.S string01-o.S
	../assemble string01.asm


string02: string02.o
	gcc -o string02 string02.o
	gcc -o string02-o string02-o.o
	./string02-o > string02-o.txt
	./string02 > string02.txt
	diff string02-o.txt string02.txt
	diff string02.txt old/string02.txt
	diff string02-o.txt old/string02-o.txt
	diff string02.S old/string02.S
	diff string02-o.S old/string02-o.S
	diff string02.asm old/string02.asm

string02.o: string02.S
	nasm -O1 -f elf -l string02.lst string02.S
	nasm -O1 -f elf -l string02-o.lst string02-o.S

string02.S: string02.t ../lc ../assemble
	../lc -s string02.t
	../assemble -O string02.asm
	mv string02.S string02-o.S
	../assemble string02.asm


gen001: gen001.o
	gcc -o gen001 gen001.o
	gcc -o gen001-o gen001-o.o
	./gen001-o > gen001-o.txt
	./gen001 > gen001.txt
	diff gen001-o.txt gen001.txt
	diff gen001.txt old/gen001.txt
	diff gen001-o.txt old/gen001-o.txt
	diff gen001.S old/gen001.S
	diff gen001-o.S old/gen001-o.S
	diff gen001.asm old/gen001.asm

gen001.o: gen001.S
	nasm -O1 -f elf -l gen001.lst gen001.S
	nasm -O1 -f elf -l gen001-o.lst gen001-o.S

gen001.S: gen001.t ../lc ../assemble
	../lc -s gen001.t
	../assemble -O gen001.asm
	mv gen001.S gen001-o.S
	../assemble gen001.asm


gen002: gen002.o
	gcc -o gen002-o gen002-o.o
	gcc -o gen002 gen002.o
	./gen002-o > gen002-o.txt
	./gen002 > gen002.txt
	diff gen002-o.txt gen002.txt
	diff gen002.txt old/gen002.txt
	diff gen002-o.txt old/gen002-o.txt
	diff gen002.S old/gen002.S
	diff gen002-o.S old/gen002-o.S
	diff gen002.asm old/gen002.asm

gen002.o: gen002.S
	nasm -O1 -f elf -l gen002.lst gen002.S
	nasm -O1 -f elf -l gen002-o.lst gen002-o.S

gen002.S: gen002.t ../lc ../assemble
	../lc -s gen002.t
	../assemble -O gen002.asm
	mv gen002.S gen002-o.S
	../assemble gen002.asm


gen003: gen003.o
	gcc -o gen003-o gen003-o.o
	gcc -o gen003 gen003.o
	./gen003-o > gen003-o.txt
	./gen003 > gen003.txt
	diff gen003-o.txt gen003.txt
	diff gen003.txt old/gen003.txt
	diff gen003-o.txt old/gen003-o.txt
	diff gen003.S old/gen003.S
	diff gen003-o.S old/gen003-o.S
	diff gen003.asm old/gen003.asm

gen003.o: gen003.S
	nasm -O1 -f elf -l gen003.lst gen003.S
	nasm -O1 -f elf -l gen003-o.lst gen003-o.S

gen003.S: gen003.t ../lc ../assemble
	../lc -s gen003.t
	../assemble -O gen003.asm
	mv gen003.S gen003-o.S
	../assemble gen003.asm


gen004: gen004.o
	gcc -o gen004-o gen004-o.o
	gcc -o gen004 gen004.o
	./gen004-o > gen004-o.txt
	./gen004 > gen004.txt
	diff gen004-o.txt gen004.txt
	diff gen004.txt old/gen004.txt
	diff gen004-o.txt old/gen004-o.txt
	diff gen004.S old/gen004.S
	diff gen004-o.S old/gen004-o.S
	diff gen004.asm old/gen004.asm

gen004.o: gen004.S
	nasm -O1 -f elf -l gen004.lst gen004.S
	nasm -O1 -f elf -l gen004-o.lst gen004-o.S

gen004.S: gen004.t ../lc ../assemble
	../lc -s gen004.t
	../assemble -O gen004.asm
	mv gen004.S gen004-o.S
	../assemble gen004.asm


ecce: ecce.o
	gcc -o ecce-o ecce-o.o
	gcc -o ecce ecce.o
	./ecce-o < ecce.script > ecce-o.txt
	./ecce < ecce.script > ecce.txt
	diff ecce-o.txt ecce.txt
	diff ecce.txt old/ecce.txt
	diff ecce-o.txt old/ecce-o.txt
	diff ecce.S old/ecce.S
	diff ecce-o.S old/ecce-o.S
	diff ecce.asm old/ecce.asm

ecce.o: ecce.S
	nasm -O1 -f elf -l ecce.lst ecce.S
	nasm -O1 -f elf -l ecce-o.lst ecce-o.S

ecce.S: ecce.t ../lc ../assemble
	../lc -s ecce.t
	../assemble -O ecce.asm
	mv ecce.S ecce-o.S
	../assemble ecce.asm
