# Copyright (c) 2003, Adam Dunkels.
# All rights reserved. 
#
# Redistribution and use in source and binary forms, with or without 
# modification, are permitted provided that the following conditions 
# are met: 
# 1. Redistributions of source code must retain the above copyright 
#    notice, this list of conditions and the following disclaimer. 
# 2. Redistributions in binary form must reproduce the above copyright 
#    notice, this list of conditions and the following disclaimer in the 
#    documentation and/or other materials provided with the distribution. 
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#      This product includes software developed by Adam Dunkels.
# 4. The name of the author may not be used to endorse or promote
#    products derived from this software without specific prior
#    written permission.  
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
#
# This file is part of the Contiki desktop environment
#
# $Id: Makefile.programs,v 1.2 2006/04/17 14:42:28 kthacker Exp $
#
# convert to cpc

UIP_PRGS = ../contiki/apps/www.prg ../contiki/apps/www.dsc \
	../contiki/apps/websrv.prg ../contiki/apps/websrv.dsc \
	../contiki/apps/stelnet.prg ../contiki/apps/stelnet.dsc \
	../contiki/apps/ftp.prg ../contiki/apps/ftp.dsc \
	../contiki/apps/email.prg ../contiki/apps/email.dsc \
	../contiki/apps/dhcp.prg ../contiki/apps/dhcp.dsc \
	../contiki/apps/wget.dsc \
	../contiki/apps/vnc.prg ../contiki/apps/vnc.dsc \
#	../contiki/apps/irc.prg ../contiki/apps/irc.dsc 
#	../contiki/apps/wget.prg 
#	../contiki/apps/telnetd.prg ../contiki/apps/telnetd.dsc \



all: 	./arch/crt0-dsc.o \
	./arch/crt0-prg.o \
	./arch/contiki_labels.o \
	./loader/loader-arch-module.o \
	./apps/welcome.prg \
	../contiki/apps/conio.prg \
	../contiki/apps/about.prg ../contiki/apps/about.dsc \
	../contiki/apps/netconf.prg ../contiki/apps/netconf.dsc \
	../contiki/apps/process.prg ../contiki/apps/process.dsc \
	../contiki/apps/calc.prg ../contiki/apps/calc.dsc \
	../contiki/apps/editor.prg ../contiki/apps/editor.dsc \
	../contiki/apps/dir.prg ./apps/dir.dsc \
	./apps/config.prg \
	./apps/confedit.prg \
	./apps/confedit.dsc \
	../contiki/apps/shell.prg ../contiki/apps/shell.dsc \
    ./apps/memstat.prg ./apps/memstat.dsc
#	$(UIP_PRGS) \

#	./cfs-cpc.drv \
#	./ctk-text.drv \
#	./ctk-default.drv \
#	./ctk-80col.drv \
#	./slip.drv slip.dsc \
#	./cgterm.prg cgterm.dsc \


SYS=cpc

include Makefile.common 

CFLAGS:=$(CFLAGSCOMMON) --compile-only \
	-DWITH_ASCII \
	-DWITH_CONIO \
	-DWITH_LOADER_ARCH=1

# conversion of intel hex record to binary, cpc binary with header, then inject into disc image
define MAKE_DSC
echo -in $(@:.dsc=.ihx) > $@.lnk
	echo arch/crt0-dsc.o >> $@.lnk
	echo $< >> $@.lnk
	echo -e >> $@.lnk
	$(LD) -f $@.lnk
	makebin -p -s 65535 < $(@:.dsc=.ihx) > $@.bin
	cpcfs contiki.dsk p -b -e $@.bin
endef	

%.dsc: %-dsc.o 
	$(MAKE_DSC)

define MAKE_PRG
	echo -ihmwn $(@:.prg=.ihx) > $@.lnk
	echo -k /system/data/sdcc/lib/z80 >> $@.lnk
	echo -l z80 >> $@.lnk
	echo arch/crt0-prg.o >> $@.lnk
	echo loader/loader-arch-module.o >> $@.lnk
	echo arch/contiki_labels.o >> $@.lnk
	echo $^ | xargs -n1 >> $@.lnk
	echo -e >> $@.lnk
	$(LD) -f $@.lnk
	makebin -p -s 65535 < $(@:.prg=.ihx) > $@.bin
	cpcfs contiki.dsk p -b -e $@.bin
endef	

../contiki/apps/irc.prg: ../contiki/apps/ircc.o ../contiki/apps/ircc-strings.o \
	../contiki/apps/irc.o ../contiki/uip/socket.o ../contiki/uip/uipbuf.o
	$(MAKE_PRG)

../contiki/apps/irc.dsc: ../contiki/apps/irc-dsc.o
	$(MAKE_DSC)

./apps/config.prg: apps/config.o
	$(MAKE_PRG)

./apps/confedit.prg: apps/configedit.o
	$(MAKE_PRG)

./apps/confedit.dsc: apps/configedit-dsc.o
	$(MAKE_DSC)

./apps/welcome.prg: apps/welcome.o
	$(MAKE_PRG)

../contiki/apps/about.prg: ../contiki/apps/about.o
	$(MAKE_PRG)

../contiki/apps/calc.prg: ../contiki/apps/calc.o
	$(MAKE_PRG)

./apps/cgterm.prg: ./apps/cgterm.o \
	../contiki/uip/socket.o \
	../contiki/uip/uipbuf.o	\
	lib/lc-asm.o
	$(MAKE_PRG)

./apps/cgterm.dsc: ./apps/cgterm-dsc.o 
	$(MAKE_DSC)

../contiki/apps/dhcp.prg: ../contiki/apps/dhcp.o ../contiki/uip/dhcpc.o ./lib/lc-asm.o
	$(MAKE_PRG)

../contiki/apps/editor.prg: ../contiki/apps/editor.o \
	../contiki/lib/ctk-filedialog.o \
	../contiki/lib/memb.o
	$(MAKE_PRG)

../contiki/apps/email.prg: ../contiki/apps/email.o \
	../contiki/lib/ctk-textedit.o \
	../contiki/apps/smtp-socket.o \
	../contiki/apps/smtp-strings.o \
	../contiki/uip/socket.o \
	../contiki/uip/uipbuf.o \
	./lib/lc-asm.o 
	$(MAKE_PRG)

../contiki/apps/ftp.prg: ../contiki/apps/ftp.o \
	../contiki/apps/ftpc.o \
	../contiki/lib/memb.o
	$(MAKE_PRG)

../contiki/apps/netconf.prg: ../contiki/apps/netconf.o
	$(MAKE_PRG)

../contiki/apps/process.prg: ../contiki/apps/processes.o
	$(MAKE_PRG)

../contiki/apps/process.dsc: ../contiki/apps/processes-dsc.o
	$(MAKE_DSC)

../contiki/apps/dir.prg: ../contiki/apps/directory.o lib/strcasecmp.o
	$(MAKE_PRG)

./apps/dir.dsc: ./apps/directory-dsc.o
	$(MAKE_DSC)

../contiki/apps/shell.prg: ../contiki/apps/shell-gui.o ./apps/shell.o ../contiki/lib/ctk-textentry-cmdline.o
	$(MAKE_PRG)

../contiki/apps/telnetd.prg: ../contiki/apps/telnetd.o \
 	../contiki/apps/shell.o \
	../contiki/lib/memb.o \
	../contiki/apps/telnetd-gui.o
	$(MAKE_PRG)

../contiki/apps/telnetd.dsc: telnetd-dsc.o 
	$(MAKE_DSC)

../contiki/apps/www.prg: $(WWW)
	$(MAKE_PRG)

../contiki/apps/websrv.prg: $(WEBSERVER)
	$(MAKE_PRG)

../contiki/apps/websrv.dsc: ../contiki/apps/webserver-dsc.o
	$(MAKE_DSC)

../contiki/apps/stelnet.prg: $(TELNET)
	$(MAKE_PRG)

../contiki/apps/stelnet.dsc: ../contiki/apps/telnet-dsc.o
	$(MAKE_DSC)

../contiki/apps/wget.prg: $(WGET)
	$(MAKE_PRG)

../contiki/apps/wget.dsc: apps/wget-dsc.o
	$(MAKE_DSC)

../contiki/apps/splip.drv: slip-drv.o rs232dev.o


../contiki/apps/conio.prg: \
	./ctk/ctk-conio-service.o \
	./arch/conio.o
	$(MAKE_PRG)

#ctk-text.drv: ctk-conio-service.o

ctk-80col.drv: ctk-80col.o 

ctk-default.drv: ctk-hires-service.o

default.prg: themeloader.o ctk-hires-theme-default.o



VNC=../contiki/apps/vnc.o \
	../contiki/apps/vnc-viewer.o \
	./apps/vnc-draw.o 

../contiki/apps/vnc.prg: $(VNC)
	$(MAKE_PRG)

#blueround.prg: themeloader.o ctk-hires-theme-blueround.o contiki-labels.o
#	cl65 --module -t c64 -o $@ loader-arch-module.o $^

#default.prg: themeloader.o ctk-hires-theme-default.o contiki-labels.o
#	cl65 -Ln default-prg.labels --module -t c64 -o $@ loader-arch-module.o $^

#enabler.prg: themeloader.o ctk-hires-theme-enabler.o contiki-labels.o
#	cl65 -Ln default-prg.labels --module -t c64 -o $@ loader-arch-module.o $^

#springlight.prg: themeloader.o ctk-hires-theme-springlight.o contiki-labels.o
#	cl65 -Ln default-prg.labels --module -t c64 -o $@ loader-arch-module.o $^

#ravenpine.prg: themeloader.o ctk-hires-theme-ravenpine.o contiki-labels.o
#	cl65 -Ln default-prg.labels --module -t c64 -o $@ loader-arch-module.o $^




./apps/memstat.prg: apps/memstat.o
	$(MAKE_PRG)

./apps/memstat.dsc: apps/memstat-dsc.o
	$(MAKE_DSC)

mtest.prg: mtest.o mtp.o mt.o mtarch.o mtarch-asm.o

lc-test: lc-test.o lc-asm.o
