--- /dev/null
+CC := c++
+CFLAGS = -std=c++98 -Wall -Wextra -Werror -Wpedantic
+
+ifneq ("$(wildcard .debug)","")
+ CFLAGS += -g
+endif
+
+RM := rm -f
+
+INCDIR := inc
+INCDIR += $(addsuffix /inc, $(SUBPROJECTS));
+ifneq ($(INCLUDE),)
+ INCLUDE := $(addprefix -I, $(INCDIR))
+endif
+
+SRCDIR := .
+
+SOURCES := main.cpp \
+ Fixed.cpp \
+ Point.cpp \
+ bsp.cpp \
+
+SOURCES := $(addprefix $(SRCDIR)/, $(SOURCES))
+
+OBJECTS := $(SOURCES:.cpp=.o)
+
+NAME := fixed
+
+all : $(NAME)
+
+debug : .debug
+ $(MAKE) all
+
+nodebug :
+ $(RM) .debug
+ $(MAKE) re
+
+.% :
+ $(MAKE) fclean
+ touch $@
+
+$(NAME) : $(OBJECTS)
+ $(CC) $(CFLAGS) -o $@ $^ $(LINKS)
+
+%.o : %.cpp
+ $(CC) $(CFLAGS) -o $@ -c $< $(INCLUDE)
+
+clean :
+ $(RM) $(OBJECTS)
+
+fclean : clean
+ $(RM) $(NAME)
+
+re : fclean
+ $(MAKE) all
--- /dev/null
+#include "Fixed.h"
+#include "Point.h"
+#include <iostream>
+
+int main()
+{
+ Point a(0, 0);
+ Point b(1, 0);
+ Point c(0, 1);
+ Point d(0.75f, 0.75f);
+ Point e(1, 1);
+
+ std::cout << d << " lies inside triangle "
+ << a << ", " << b << ", " << e
+ << ": " << std::boolalpha << bsp(a, b, e, d) << ".\n";
+ std::cout << d << " lies inside triangle "
+ << a << ", " << e << ", " << c
+ << ": " << std::boolalpha << bsp(a, e, c, d) << ".\n";
+ std::cout << d << " lies inside triangle "
+ << e << ", " << b << ", " << c
+ << ": " << std::boolalpha << bsp(e, b, c, d) << ".\n";
+ std::cout << d << " lies inside triangle "
+ << a << ", " << b << ", " << c
+ << ": " << std::boolalpha << bsp(a, b, c, d) << ".\n";
+ return (0);
+}