YACC = yacc
LEX = flex -I8
CC = lc
CFLAGS = -d_POSIX_SOURCE -j85 -j86 -j104 -z5000

OFILES = scan.o util.o main.o number.o storage.o load.o execute.o getopt.o

all: bc

usedist:
	Copy bc.c.dist bc.c
	Copy scan.c.dist scan.c
	Copy y.tab.h.dist y.tab.h
	touch bc.c scan.c y.tab.h

clean:
	-Delete $(OFILES)

bc: bc.o $(OFILES) global.o
	blink FROM LIB:c.o bc.o $(OFILES) global.o TO bc LIB LIB:lc.lib NOICONS SC SD

sbc: sbc.o $(OFILES) global.o
	blink FROM LIB:c.o sbc.o $(OFILES) global.o TO sbc LIB LIB:lc.lib NOICONS SC SD

scan.c: scan.l
	$(LEX) scan.l
	@-Delete scan.c
	Rename lex.yy.c scan.c

bc.c: bc.y
	@echo "expect 1 shift/reduce conflict"
	$(YACC) -d bc.y
	@-Delete bc.c
	Rename y.tab.c bc.c

sbc.c: sbc.y
	$(YACC) -d sbc.y
	@-Delete sbc.c
	Rename y.tab.c sbc.c

bcdefs.h: config.h const.h version.h number.h
	touch bcdefs.h

.c.o:
	$(CC) $(CFLAGS) $*

getopt.o: getopt.c getopt.h tailor.h
bc.o: bc.c bcdefs.h config.h const.h version.h number.h global.h proto.h
execute.o: execute.c bcdefs.h config.h const.h version.h number.h global.h proto.h
global.o: global.c bcdefs.h config.h const.h version.h number.h global.h math.h
load.o: load.c bcdefs.h config.h const.h version.h number.h global.h proto.h
main.o: main.c bcdefs.h config.h const.h version.h number.h global.h proto.h
number.o: number.c bcdefs.h config.h const.h version.h number.h proto.h
storage.o: storage.c bcdefs.h config.h const.h version.h number.h global.h proto.h
scan.o: scan.c bcdefs.h config.h const.h version.h number.h y.tab.h global.h proto.h
util.o: util.c bcdefs.h config.h const.h version.h number.h global.h proto.h
sbc.o: sbc.c bcdefs.h config.h const.h version.h number.h global.h proto.h
