From 056e1ebed94379db41ebb2e40cc88a873cfb4411 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 8 Apr 2009 10:17:09 +0000 Subject: initial commit of netsurf framebuffer library svn path=/trunk/libnsfb/; revision=7060 --- test/Makefile | 110 +++ test/nsglobe.c | 2933 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/plottest.c | 172 ++++ 3 files changed, 3215 insertions(+) create mode 100644 test/Makefile create mode 100644 test/nsglobe.c create mode 100644 test/plottest.c (limited to 'test') diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..a87bc36 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,110 @@ +# Child makefile fragment for libhubbub +# +# Toolchain is provided by top-level makefile +# +# Variables provided by top-level makefile +# +# COMPONENT The name of the component +# EXPORT The location of the export directory +# TOP The location of the source tree root +# RELEASEDIR The place to put release objects +# DEBUGDIR The place to put debug objects +# +# do_include Canned command sequence to include a child makefile +# +# Variables provided by parent makefile: +# +# DIR The name of the directory we're in, relative to $(TOP) +# +# Variables we can manipulate: +# +# ITEMS_CLEAN The list of items to remove for "make clean" +# ITEMS_DISTCLEAN The list of items to remove for "make distclean" +# TARGET_TESTS The list of target names to run for "make test" +# +# SOURCES The list of sources to build for $(COMPONENT) +# +# Plus anything from the toolchain + +# Push parent directory onto the directory stack +sp := $(sp).x +dirstack_$(sp) := $(d) +d := $(DIR) + +ifeq ($(MAKECMDGOALS),test) +# Extend toolchain settings +CFLAGS := $(CFLAGS) -I$(TOP)/include/ +LDFLAGS := $(LDFLAGS) -Wl,--whole-archive -lnsfb0 -Wl,--no-whole-archive -lSDL +endif + +ifdef PROFILE + CFLAGS := $(CFLAGS) -pg -fno-omit-frame-pointer + LDFLAGS := $(LDFLAGS) -pg +endif + +# Tests +TESTS_$(d) := plottest + +# Items for top-level makefile to use +ITEMS_CLEAN := $(ITEMS_CLEAN) \ + $(addprefix $(d), $(addsuffix $(EXEEXT), $(TESTS_$(d)))) \ + $(addprefix $(d), $(addsuffix .gcda, $(TESTS_$(d)))) \ + $(addprefix $(d), $(addsuffix .gcno, $(TESTS_$(d)))) \ + $(addprefix $(d), $(addsuffix .d, $(TESTS_$(d)))) +ITEMS_DISTCLEAN := $(ITEMS_DISTCLEAN) $(d)log + +# Targets for top-level makefile to run +TARGET_TESTS := $(TARGET_TESTS) test_$(d) + +# Now we get to hack around so that we know what directory we're in. +# $(d) no longer exists when running the commands for a target, so we can't +# simply use it verbatim. Assigning to a variable doesn't really help, as +# there's no guarantee that someone else hasn't overridden that variable. +# So, what we do is make the target depend on $(d), then pick it out of the +# dependency list when running commands. This isn't pretty, but is effective. +test_$(d): $(d) $(addprefix $(d), $(TESTS_$(d))) + @$(PERL) $(TOP)/$ $(1)" + @$$(CC) -c -g $$(DEBUGCFLAGS) -o $$@.o $(1) + @$$(LD) -g -o $$@ $$@.o -lhubbub-debug $$(LDFLAGS) -lgcov + @$$(RM) $$(RMFLAGS) $$@.o + +endef + +$(eval $(foreach TEST,$(addprefix $(d), $(TESTS_$(d))), \ + $(call dep_test,$(addsuffix .c, $(TEST)),$(addsuffix .d, $(TEST)),$(TEST)))) + +ifeq ($(MAKECMDGOALS),test) +-include $(sort $(DEP_$(d))) +endif + +$(eval $(foreach TEST,$(addprefix $(d), $(TESTS_$(d))), \ + $(call compile_test,$(addsuffix .c, $(TEST)),$(TEST),$(addsuffix .d, $(TEST))))) + +# Now include any children we may have +MAKE_INCLUDES := $(wildcard $(d)*/Makefile) +$(eval $(foreach INC, $(MAKE_INCLUDES), $(call do_include,$(INC)))) + +# Finally, pop off the directory stack +d := $(dirstack_$(sp)) +sp := $(basename $(sp)) diff --git a/test/nsglobe.c b/test/nsglobe.c new file mode 100644 index 0000000..9ba98bb --- /dev/null +++ b/test/nsglobe.c @@ -0,0 +1,2933 @@ +/* GIMP RGBA C-Source image dump (nnglobe.c) */ + +const struct { + unsigned int width; + unsigned int height; + unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ + unsigned char pixel_data[132 * 135 * 4 + 1]; +} nsglobe = { + 132, 135, 4, + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\4\12\15\377\24.=\377\36Qn\3773x\236\377G\211\253\377\\\301\370\377\\\301" + "\370\377\201\324\367\377|\326\377\377z\325\377\377z\325\377\377z\325\377" + "\377x\324\377\377v\323\377\377v\323\377\377o\317\377\377Z\277\367\377Z\277" + "\367\377G\211\253\3773x\236\377\36Qn\377\17$0\377\4\12\15\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\10\24\32\377\31Fb\377G\211\253\377|\326\377\377\211\334" + "\377\377\207\333\377\377\207\333\377\377\207\333\377\377\177\330\377\377" + "~\327\377\377~\327\377\377~\327\377\377~\327\377\377|\326\377\377z\325\377" + "\377z\325\377\377x\324\377\377v\323\377\377t\322\377\377t\322\377\377t\322" + "\377\377t\322\377\377o\317\377\377o\317\377\377k\315\377\377k\315\377\377" + "k\315\377\377Z\277\367\377G\211\253\377\36Qn\377\10\27\40\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\25\211\263\377\25\211\263\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\377]\306\377\377" + "]\304\375\377]\304\375\377]\304\375\377]\304\375\377]\306\377\377W\303\377" + "\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303" + "\377\377W\303\377\377V\302\377\377V\302\377\377W\303\377\377W\303\377\377" + "T\301\376\377T\301\376\377N\276\377\377T\301\376\377N\276\377\377N\276\377" + "\377T\301\376\377J\274\377\377J\274\377\377T\301\376\377J\274\377\377N\276" + "\377\377J\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273\377\377" + "D\271\376\377H\273\377\377D\271\376\377D\271\376\377B\270\376\377B\270\376" + "\377B\270\376\377B\270\376\377<\265\376\377@\267\377\377<\265\376\377<\265" + "\376\377<\265\376\377;\264\376\3775\262\377\3775\262\377\3775\262\377\377" + "5\262\377\3772\260\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377" + "\377,\255\377\377,\255\377\377(\252\376\377(\252\376\377'\252\376\377\27" + "[\207\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377!\216\323\377" + "\37\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377\32\243\376\377" + "\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\21\237\377\377" + "\21\237\377\377\17\236\377\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\10" + "\27\40\377T\301\376\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377" + "V\302\377\377V\302\377\377W\303\377\377W\303\377\377]\304\375\377V\302\377" + "\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377V\302\377\377]\306" + "\377\377]\304\375\377]\306\377\377]\304\375\377]\306\377\377]\304\375\377" + "]\304\375\377]\304\375\377\10\24\32\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377>\211\263\377W\303\377\377W\303\377\377]\304\375\377W\303\377\377W" + "\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377" + "\377T\301\376\377W\303\377\377W\303\377\377W\303\377\377V\302\377\377T\301" + "\376\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377R\300\376\377" + "R\300\376\377N\276\377\377J\274\377\377T\301\376\377J\274\377\377J\274\377" + "\377J\274\377\377J\274\377\377J\274\377\377H\273\377\377H\273\377\377H\273" + "\377\377H\273\377\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377" + "B\270\376\377B\270\376\377<\265\376\377B\270\376\377<\265\376\377;\264\376" + "\377;\264\376\377;\264\376\3775\262\377\377;\264\376\3777\262\377\3771\257" + "\377\3772\260\377\3772\260\377\3772\260\377\3771\257\377\3771\257\377\377" + "/\256\377\377,\255\377\377,\255\377\377,\255\377\377\37\222\335\377\36Qn" + "\377\6\16\24\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\24""5H\377\37\246\376\377\33\244\376\377\32\243\376\377\27\242\377\377" + "\32\243\376\377\32\243\376\377\27\242\377\377\27\242\377\377\21\237\377\377" + "\21\237\377\377\17\236\377\377\17\236\377\377\11\33'\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377>\211\263\377V\302\377\377T\301\376\377T\301\376\377" + "V\302\377\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377W\303\377" + "\377W\303\377\377W\303\377\377W\303\377\377]\304\375\377V\302\377\377]\304" + "\375\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377W\303\377\377" + "W\303\377\377W\303\377\377V\302\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\24""5H\377W\303\377\377W\303\377\377W\303\377\377W\303\377" + "\377W\303\377\377W\303\377\377W\303\377\377T\301\376\377W\303\377\377W\303" + "\377\377W\303\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" + "T\301\376\377T\301\376\377N\276\377\377N\276\377\377R\300\376\377N\276\377" + "\377N\276\377\377L\275\377\377J\274\377\377J\274\377\377J\274\377\377J\274" + "\377\377I\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273\377\377" + "D\271\376\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377B\270\376" + "\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377;\264" + "\376\377;\264\376\3775\262\377\377;\264\376\3777\262\377\3777\262\377\377" + "5\262\377\3771\257\377\3772\260\377\3771\257\377\3771\257\377\377/\256\377" + "\377,\255\377\377,\255\377\3771\210\275\377\25\211\263\377W\303\377\377V\302\377\377V\302\377\377V\302\377\377" + "V\302\377\377V\302\377\377W\303\377\377T\301\376\377T\301\376\377T\301\376" + "\377T\301\376\377T\301\376\377N\276\377\377N\276\377\377N\276\377\377N\276" + "\377\377N\276\377\377R\300\376\377N\276\377\377N\276\377\377L\275\377\377" + "L\275\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377H\273\377" + "\377H\273\377\377I\274\377\377D\271\376\377D\271\376\377D\271\376\377D\271" + "\376\377@\267\377\377D\266\372\377@\267\377\377@\267\377\377<\265\376\377" + "<\265\376\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377;\264\376" + "\3775\262\377\3777\262\377\3775\262\377\3775\262\377\3771\257\377\3772\260" + "\377\377/\256\377\3771\257\377\377/\256\377\377,\255\377\377,\255\377\377" + "*\253\377\377\17$0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\10\24\32\377\32e\225\377\32\243\376\377\33" + "\244\376\377\32\243\376\377\27\242\377\377\27\242\377\377\32\243\376\377" + "\27\242\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377" + "\17\236\377\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377D\266\372\377T\301\376\377J\274\377\377Q\277\377\377Q\277\377\377T\301" + "\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" + "V\302\377\377V\302\377\377V\302\377\377V\302\377\377V\302\377\377V\302\377" + "\377V\302\377\377V\302\377\377T\301\376\377V\302\377\377W\303\377\377V\302" + "\377\377V\302\377\377\36Qn\377\0\0\0\377\0\0\0\377\4\12\15\377\35Wz\377C" + "\267\373\377V\302\377\377V\302\377\377V\302\377\377T\301\376\377T\301\376" + "\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377T\301\376\377N\276" + "\377\377T\301\376\377N\276\377\377T\301\376\377T\301\376\377N\276\377\377" + "N\276\377\377N\276\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377" + "\377J\274\377\377I\274\377\377I\274\377\377I\274\377\377H\273\377\377H\273" + "\377\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377@\267\377\377" + "D\271\376\377@\267\377\377<\265\376\377@\267\377\377@\267\377\377<\265\376" + "\377<\265\376\377<\265\376\3778\263\376\3775\262\377\3777\262\377\3777\262" + "\377\3777\262\377\3775\262\377\3772\260\377\3772\260\377\3771\257\377\377" + "/\256\377\377/\256\377\377,\255\377\377,\255\377\377*\253\377\377,\255\377" + "\377\32e\225\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\11\33'\377\36k\234\377\37\246\376\377\37\246\376\377\33\244\376\377" + "\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377" + "\32\243\376\377\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377" + "\32\225\347\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\6\16\24\377>\211\263\377J\274\377\377T\301\376\377T\301\376\377Q\277" + "\377\377Q\277\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" + "T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376" + "\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377T\301" + "\376\377T\301\376\377D\266\372\377\6\16\24\377\35Wz\377D\266\372\377T\301" + "\376\377V\302\377\377T\301\376\377T\301\376\377T\301\376\377T\301\376\377" + "T\301\376\377T\301\376\377T\301\376\377T\301\376\377N\276\377\377T\301\376" + "\377T\301\376\377N\276\377\377N\276\377\377L\275\377\377N\276\377\377N\276" + "\377\377L\275\377\377L\275\377\377L\275\377\377I\274\377\377L\275\377\377" + "I\274\377\377I\274\377\377I\274\377\377I\274\377\377D\271\376\377H\273\377" + "\377D\271\376\377D\271\376\377D\271\376\377@\267\377\377D\271\376\377@\267" + "\377\377@\267\377\377<\265\376\377<\265\376\377<\265\376\377<\265\376\377" + "<\265\376\377<\265\376\3778\263\376\3778\263\376\3778\263\376\3777\262\377" + "\3777\262\377\3771\257\377\3771\257\377\3771\257\377\3771\257\377\3771\257" + "\377\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377*\253\377\377" + "*\253\377\377\30\230\355\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\24." + "=\377\36k\234\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376" + "\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" + "\377\21\237\377\377\27\242\377\377\21\237\377\377\21\237\377\377\17\236\377" + "\377\16\235\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\17$0\3773x\236\377I\274\377\377Q\277" + "\377\377J\274\377\377T\301\376\377J\274\377\377T\301\376\377J\274\377\377" + "T\301\376\377T\301\376\377N\276\377\377T\301\376\377T\301\376\377T\301\376" + "\377T\301\376\377Q\277\377\377T\301\376\377T\301\376\377N\276\377\377T\301" + "\376\377T\301\376\377V\302\377\377J\274\377\377T\301\376\377T\301\376\377" + "T\301\376\377T\301\376\377J\274\377\377T\301\376\377J\274\377\377T\301\376" + "\377T\301\376\377J\274\377\377N\276\377\377N\276\377\377N\276\377\377N\276" + "\377\377N\276\377\377N\276\377\377N\276\377\377L\275\377\377L\275\377\377" + "L\275\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377\377G\272\377" + "\377G\272\377\377I\274\377\377H\273\377\377D\271\376\377D\271\376\377D\271" + "\376\377D\271\376\377B\270\376\377B\270\376\377@\267\377\377@\267\377\377" + "@\267\377\377@\267\377\377@\267\377\377<\265\376\377<\265\376\3778\263\376" + "\377=\265\376\3778\263\376\3778\263\376\3778\263\376\3777\262\377\3771\257" + "\376\377&p\234\3771\210\275\3772\260\377\3771\257\377\3771\257\377\377/\256" + "\377\377,\255\377\377,\255\377\377*\253\377\377,\255\377\377*\253\377\377" + "'\252\376\377'\252\376\377\24""5H\377\3\4\6\377\31Fb\377!\216\323\377#\250" + "\376\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244" + "\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237" + "\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377\17\236" + "\377\377\22\231\364\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377\36" + "Qn\377>\211\263\377T\301\376\377T\301\376\377J\274\377\377T\301\376\377N" + "\276\377\377N\276\377\377N\276\377\377J\274\377\377T\301\376\377J\274\377" + "\377T\301\376\377Q\277\377\377T\301\376\377J\274\377\377T\301\376\377N\276" + "\377\377T\301\376\377T\301\376\377Q\277\377\377T\301\376\377J\274\377\377" + "J\274\377\377T\301\376\377T\301\376\377T\301\376\377J\274\377\377T\301\376" + "\377J\274\377\377T\301\376\377N\276\377\377N\276\377\377N\276\377\377L\275" + "\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377\377I\274\377\377" + "L\275\377\377G\272\377\377L\275\377\377G\272\377\377G\272\377\377G\272\377" + "\377G\272\377\377D\271\376\377D\271\376\377D\271\376\377D\271\376\377B\270" + "\376\377B\270\376\377B\270\376\377B\270\376\377@\267\377\377@\267\377\377" + "<\265\376\377<\265\376\377<\265\376\377<\265\376\377=\265\376\3778\263\376" + "\3778\263\376\3778\263\376\3771\210\275\377\35Wz\377\17$0\377\0\0\0\377\0" + "\0\0\377\24""5H\3771\257\377\3771\257\377\377/\256\377\377,\255\377\377," + "\255\377\377,\255\377\377*\253\377\377*\253\377\377*\253\377\377'\252\376" + "\377'\252\376\377\37\222\335\377\30\230\355\377#\250\376\377#\250\376\377" + "\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377" + "\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377\377" + "\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377\17\236\377\377" + "\17\236\377\377\27[\207\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\11\33'\377\35Wz\377D\266\372\377N\276\377\377N\276\377" + "\377N\276\377\377T\301\376\377N\276\377\377N\276\377\377T\301\376\377T\301" + "\376\377J\274\377\377N\276\377\377T\301\376\377N\276\377\377T\301\376\377" + "J\274\377\377T\301\376\377J\274\377\377Q\277\377\377T\301\376\377T\301\376" + "\377J\274\377\377J\274\377\377T\301\376\377J\274\377\377T\301\376\377J\274" + "\377\377J\274\377\377L\275\377\377L\275\377\377L\275\377\377L\275\377\377" + "L\275\377\377L\275\377\377L\275\377\377I\274\377\377I\274\377\377I\274\377" + "\377G\272\377\377G\272\377\377G\272\377\377G\272\377\377G\272\377\377D\271" + "\376\377D\271\376\377D\271\376\377D\271\376\377B\270\376\377B\270\376\377" + "@\267\377\377@\267\377\377<\265\376\377@\267\377\377<\265\376\377<\265\376" + "\377<\265\376\377=\265\376\377\37\222\335\377&p\234\377\36Qn\377\24.=\377" + "\3\4\6\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\6\16\24\377" + "/\256\377\377/\256\377\377,\255\377\377,\255\377\377,\255\377\377*\253\377" + "\377*\253\377\377'\252\376\377'\252\376\377'\252\376\377#\250\376\377#\250" + "\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377\37\246\376" + "\377\33\244\376\377\33\244\376\377\32\243\376\377\32\243\376\377\27\242\377" + "\377\32\243\376\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377" + "\377\17\236\377\377\17\236\377\377\17\236\377\377\21\233\371\377\6\16\24" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\3\4\6\377D\266\372\377J\274\377\377J\274\377\377Q\277\377\377J\274\377" + "\377Q\277\377\377Q\277\377\377J\274\377\377J\274\377\377T\301\376\377J\274" + "\377\377Q\277\377\377J\274\377\377T\301\376\377Q\277\377\377J\274\377\377" + "T\301\376\377T\301\376\377J\274\377\377T\301\376\377Q\277\377\377J\274\377" + "\377J\274\377\377J\274\377\377J\274\377\377Q\277\377\377J\274\377\377J\274" + "\377\377J\274\377\377I\274\377\377I\274\377\377J\274\377\377I\274\377\377" + "H\273\377\377H\273\377\377G\272\377\377I\274\377\377G\272\377\377G\272\377" + "\377G\272\377\377D\271\376\377G\272\377\377B\270\376\377B\270\376\377B\270" + "\376\377B\270\376\377B\270\376\377B\270\376\377<\265\376\377<\265\376\377" + "?\267\377\377<\265\376\377;\264\376\377?\267\377\377;\264\376\377\32e\225" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377&\212\311\377*\253\377\377/\256\377" + "\377(\252\376\377+\254\377\377(\252\376\377'\252\376\377'\252\376\377'\252" + "\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376\377\37\246\376\377" + "\37\246\376\377\37\246\376\377\37\246\376\377\32\243\376\377\32\243\376\377" + "\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377" + "\21\237\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377" + "\17\236\377\377\35Wz\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\24""5H\377I\274\377\377J\274\377\377J\274" + "\377\377Q\277\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377" + "Q\277\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377" + "\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377J\274" + "\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377" + "I\274\377\377J\274\377\377J\274\377\377J\274\377\377I\274\377\377H\273\377" + "\377H\273\377\377H\273\377\377H\273\377\377H\273\377\377G\272\377\377G\272" + "\377\377G\272\377\377B\270\376\377D\271\376\377D\271\376\377B\270\376\377" + "B\270\376\377B\270\376\3778\263\376\377?\267\377\377<\265\376\377<\265\376" + "\377?\267\377\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377;\264" + "\376\3775\262\377\377&\212\311\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\27" + "[\207\377/\256\377\377(\252\376\377/\256\377\377(\252\376\377'\252\376\377" + "'\252\376\377'\252\376\377#\250\376\377#\250\376\377#\250\376\377#\250\376" + "\377\37\246\376\377\37\246\376\377\37\246\376\377\33\244\376\377\32\243\376" + "\377\32\243\376\377\27\242\377\377\27\242\377\377\27\242\377\377\27\242\377" + "\377\27\242\377\377\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377" + "\377\16\235\377\377\17\236\377\377\37\222\335\377\3\4\6\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\4\12\15\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377&p\234" + "\377I\274\377\377I\274\377\377I\274\377\377I\274\377\377J\274\377\377J\274" + "\377\377J\274\377\377J\274\377\377J\274\377\377J\274\377\377D\266\372\377" + "\0\0\0\377\11\33'\377\17$0\377\31Fb\377\36Qn\377&p\234\377&p\234\3773x\236" + "\377&\212\311\377&\212\311\377&\212\311\377D\266\372\377I\274\377\377I\274" + "\377\377H\273\377\377H\273\377\377I\274\377\377H\273\377\377H\273\377\377" + "H\273\377\377D\271\376\377H\273\377\377\37\222\335\377&\212\311\377&p\234" + "\377&p\234\377\27[\207\377\31Fb\377\31Fb\377\17$0\377\17$0\377\10\27\40\377" + "\0\0\0\377\35Wz\377<\265\376\377B\270\376\377<\265\376\377<\265\376\377;" + "\264\376\377;\264\376\377;\264\376\377;\264\376\377;\264\376\377;\264\376" + "\3771\257\377\377\1\2\2\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\10\27\40\377\31Fb\377\36k\234\377(\252\376\377*" + "\253\377\377(\252\376\377+\254\377\377(\252\376\377(\252\376\377%\250\376" + "\377%\250\376\377#\250\376\377#\250\376\377\37\246\376\377\37\246\376\377" + "\37\246\376\377\37\246\376\377\33\244\376\377\33\244\376\377\32\243\376\377" + "\27\242\377\377\27\242\377\377\27\242\377\377\21\237\377\377\27\242\377\377" + "\21\237\377\377\21\237\377\377\21\237\377\377\17\236\377\377\16\235\377\377" + "\16\235\377\377\17\236\377\377\24""5H\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\27[\207\377\35Wz\377\17$0\377\0\0\0\377:\262\373\377H\273" + "\377\377H\273\377\377H\273\377\377H\273\377\377H\273\377\377H\273\377\377" + "H\273\377\377I\274\377\377J\274\377\377J\274\377\377!\216\323\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377=\265\376\377H\273\377\377H\273\377\377H\273" + "\377\377I\274\377\377H\273\377\377H\273\377\377D\271\376\377H\273\377\377" + "D\271\376\377D\271\376\377\31Fb\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\31Fb\377<\265" + "\376\377<\265\376\377<\265\376\377<\265\376\377;\264\376\377:\263\374\377" + ";\264\376\3775\262\377\3775\262\377\3775\262\377\3775\262\377\377\17$0\377" + "\0\0\0\377\1\2\2\377\0\0\0\377\10\27\40\377\25 +#include +#include + +#include "libnsfb.h" +#include "libnsfb_plot.h" + +extern const struct { + unsigned int width; + unsigned int height; + unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ + unsigned char pixel_data[132 * 135 * 4 + 1]; +} nsglobe; + +int main(int argc, char **argv) +{ + nsfb_t *nsfb; + nsfb_bbox_t box; + nsfb_bbox_t box2; + nsfb_bbox_t box3; + uint8_t *fbptr; + int fbstride; + int p[] = { 300,300, 350,350, 400,300, 450,250, 400,200}; + int loop; + + nsfb = nsfb_init(NSFB_FRONTEND_SDL); + if (nsfb == NULL) { + fprintf(stderr, "Unable to initialise nsfb with SDL frontend\n"); + return 1; + } + + if (nsfb_init_frontend(nsfb) == -1) { + fprintf(stderr, "Unable to initialise nsfb frontend\n"); + + } + + /* get the geometry of the whole screen */ + box.x0 = box.y0 = 0; + nsfb_get_geometry(nsfb, &box.x1, &box.y1, NULL); + + nsfb_get_framebuffer(nsfb, &fbptr, &fbstride); + + /* claim the whole screen for update */ + nsfb_claim(nsfb, &box); + + /* first test, repeatedly clear the graphics area, should result in teh + * same operation as a single clear to the final colour + */ + for (loop = 0; loop < 256;loop++) { + nsfb_plot_clg(nsfb, 0xffffff00 | loop); + } + + /* draw radial lines from the origin */ + for (loop = 0; loop < box.x1; loop += 20) { + box2 = box; + box2.x1 = loop; + nsfb_plot_line(nsfb, &box2, 1, 0xff000000, false, false); + } + + /* draw radial lines from the bottom right */ + for (loop = 0; loop < box.x1; loop += 20) { + box2 = box; + box2.x0 = loop; + nsfb_plot_line(nsfb, &box2, 1, 0xffff0000, false, false); + } + + /* draw radial lines from the bottom left */ + for (loop = 0; loop < box.x1; loop += 20) { + box2.x0 = box.x0; + box2.x1 = loop; + box2.y0 = box.y1; + box2.y1 = box.y0; + nsfb_plot_line(nsfb, &box2, 1, 0xff00ff00, false, false); + } + + /* draw radial lines from the top right */ + for (loop = 0; loop < box.x1; loop += 20) { + box2.x0 = box.x1; + box2.x1 = loop; + box2.y0 = box.y0; + box2.y1 = box.y1; + nsfb_plot_line(nsfb, &box2, 1, 0xff0000ff, false, false); + } + + /* draw an unclipped rectangle */ + box2.x0 = box2.y0 = 100; + box2.x1 = box2.y1 = 300; + + nsfb_plot_rectangle_fill(nsfb, &box2, 0xff0000ff); + + nsfb_plot_rectangle(nsfb, &box2, 1, 0xff00ff00, false, false); + + nsfb_plot_polygon(nsfb, p, 5, 0xffff0000); + + nsfb_plot_set_clip(nsfb, &box2); + + box3.x0 = box3.y0 = 200; + box3.x1 = box3.y1 = 400; + + nsfb_plot_rectangle_fill(nsfb, &box3, 0xff00ffff); + + nsfb_plot_rectangle(nsfb, &box3, 1, 0xffffff00, false, false); + + for (loop = 100; loop < 400;loop++) { + nsfb_plot_point(nsfb, loop, 150, 0xffaa1111); + nsfb_plot_point(nsfb, loop, 160, 0x99aa1111); + } + + nsfb_plot_set_clip(nsfb, NULL); + + box3.x0 = box3.y0 = 400; + box3.x1 = box3.y1 = 600; + + nsfb_plot_ellipse_fill(nsfb, &box3, 0xffff0000); + + nsfb_plot_ellipse(nsfb, &box3, 0xff0000ff); + + box3.x0 = 500; + box3.x1 = 700; + box3.y0 = 400; + box3.y1 = 500; + + nsfb_plot_ellipse_fill(nsfb, &box3, 0xffff0000); + + nsfb_plot_ellipse(nsfb, &box3, 0xff0000ff); + + box3.x0 = 600; + box3.x1 = 700; + box3.y0 = 300; + box3.y1 = 500; + + nsfb_plot_ellipse_fill(nsfb, &box3, 0xff0000ff); + + nsfb_plot_ellipse(nsfb, &box3, 0xffff0000); + + nsfb_plot_copy(nsfb,400,400,100,100,600,200); + + box3.x0 = 50; + box3.x1 = 200; + box3.y0 = 300; + box3.y1 = 500; + + nsfb_plot_bitmap(nsfb, &box3, (nsfb_colour_t *)nsglobe.pixel_data, nsglobe.width, nsglobe.height, nsglobe.width, true); + + nsfb_release(nsfb, &box); + + /* random rectangles in clipped area*/ + box2.x0 = 400; + box2.y0 = 50; + box2.x1 = 600; + box2.y1 = 100; + + nsfb_plot_set_clip(nsfb, &box2); + + srand(1234); + + for (loop=0; loop < 10000; loop++) { + nsfb_claim(nsfb, &box2); + box3.x0 = rand() / (RAND_MAX / box.x1); + box3.y0 = rand() / (RAND_MAX / box.y1); + box3.x1 = rand() / (RAND_MAX / 400); + box3.y1 = rand() / (RAND_MAX / 400); + nsfb_plot_rectangle_fill(nsfb, &box3, 0xff000000 | rand()); + nsfb_release(nsfb, &box2); + } + + + while (true ) + nsfb_input(nsfb); + + return 0; +} -- cgit v1.2.3