SRC = source\ 
SOUT = $(OUT)standalone\ 
YOUT = $(OUT)symbols\ 
BUILDER = $(OUT)..\AcidBuilder\AcidBuilder.exe

.SUFFIXES: .s .exe .atr

{$(SRC)}.s.{$(OBJ)}.exe:
	@echo $(@F)
	@if not exist "$(OBJ)\" md "$(OBJ)\"
	@if not exist "$(YOUT)\" md "$(YOUT)\"
	@for %x in ("$(SRC)$(@B).s") do @mads -s -c -i:include -t:"$(YOUT)$(@B).lab" -l:"$(YOUT)$(@B).lst" -o:"$(OBJ)$(@B).exe" -i:"$(SRC)\" -i:"$(OBJ)\" "%~fx"

{$(SRC)}.s.{$(OBJ)}.sys:
	@echo $(@F)
	@if not exist "$(OBJ)\" md "$(OBJ)\"
	@if not exist "$(YOUT)\" md "$(YOUT)\"
	@for %x in ("$(SRC)$(@B).s") do @mads -s -c -i:include -t:"$(YOUT)$(@B).lab" -l:"$(YOUT)$(@B).lst" -o:"$(OBJ)$(@B).sys" -i:"$(SRC)\" -i:"$(OBJ)\" "%~fx"

{$(SRC)}.s.{$(SOUT)}.xex:
	@echo $(@F)
	@if not exist "$(SOUT)\" md "$(SOUT)\"
	@for %x in ("$(SRC)$(@B).s") do @mads -s -c -i:include -d:GENLIBRARY=1 -d:STANDALONE=1 -t:"$(SOUT)$(@B).lab" -l:"$(SOUT)$(@B).lst" -o:"$(SOUT)$(@B).xex" -i:"$(SRC)\" "%~fx"
	
all: $(OUT)acidos.atr standalone-tests

clean:
	@if {$(OBJ)}=={} (echo ERROR: OBJ is empty; I won't clean the root. && exit /b 10)
	@if {$(OUT)}=={} (echo ERROR: OUT is empty; I won't clean the root. && exit /b 10)
	@if exist "$(OBJ)*.obx" del "$(OBJ)*.obx"
	@if exist "$(OUT)acidos.atr" del "$(OUT)acidos.atr"
	@if exist "$(OUT)*.lst" del "$(OUT)*.lst"
	@if exist "$(OUT)*.lab" del "$(OUT)*.lab"
	@if exist "$(YOUT)*.lst" del "$(YOUT)*.lst"
	@if exist "$(YOUT)*.lab" del "$(YOUT)*.lab"
	@if exist "$(SOUT)*.xex" del "$(SOUT)*.xex"
	@if exist "$(SOUT)*.lst" del "$(SOUT)*.lst"
	@if exist "$(SOUT)*.lab" del "$(SOUT)*.lab"

$(OUT)acidos.atr: $(SRC)filelist.txt $(OBJ)dos.sys $(OBJ)autorun.sys $(OBJ)tests.txt tests $(BUILDER)
	@echo $(@F)
	@if not exist "$(OUT)\" md "$(OUT)\"
	@"$(BUILDER)" mkfsdos2 "$(SRC)filelist.txt" "$(OBJ)\"  "$(OUT)acidos.atr"

$(OBJ)dos.sys: $(SRC)dos.s
$(OBJ)autorun.sys: $(SRC)autorun.s $(SRC)init.s $(SRC)library.s
$(OBJ)tests.txt: $(SRC)tests.txt
	@copy "$(SRC)tests.txt" "$(OBJ)" /y

test-library: $(SRC)library.s $(SRC)init.s

tests:	\
	$(OBJ)menu.exe \
	$(OBJ)tdisplay.exe \
	$(OBJ)tintrupt.exe \
	$(OBJ)tmthpack.exe \
	$(OBJ)tcio.exe \
	$(OBJ)options.exe \
	$(OBJ)mdisk.exe \
	$(OBJ)mcntrolr.exe

standalone-tests:	\
	$(SOUT)tdisplay.xex \
	$(SOUT)tintrupt.xex \
	$(SOUT)tmthpack.xex \
	$(SOUT)tcio.xex \
	$(SOUT)options.xex \
	$(SOUT)mdisk.xex \
	$(SOUT)mcntrolr.xex

$(SOUT)menu.xex						$(OBJ)menu.exe:							$(SRC)menu.s test-library
$(SOUT)tdisplay.xex					$(OBJ)tdisplay.exe:						$(SRC)tdisplay.s test-library
$(SOUT)tintrupt.xex					$(OBJ)tintrupt.exe:						$(SRC)tintrupt.s test-library
$(SOUT)tmthpack.xex					$(OBJ)tmthpack.exe:						$(SRC)tmthpack.s test-library
$(SOUT)tcio.xex						$(OBJ)tcio.exe:							$(SRC)tcio.s test-library
$(SOUT)options.xex					$(OBJ)options.exe:						$(SRC)options.s test-library
$(SOUT)mdisk.xex					$(OBJ)mdisk.exe:						$(SRC)mdisk.s test-library
$(SOUT)mcntrolr.xex					$(OBJ)mcntrolr.exe:						$(SRC)mcntrolr.s test-library
