diff --git a/.gitignore b/.gitignore index e69de29..f39fee1 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +/atanua-1.3.141220-2a58d7f.tar.gz +/atanua141220.zip diff --git a/0001-Don-t-crash-on-file-open-failures.patch b/0001-Don-t-crash-on-file-open-failures.patch new file mode 100644 index 0000000..49997f0 --- /dev/null +++ b/0001-Don-t-crash-on-file-open-failures.patch @@ -0,0 +1,54 @@ +From 3c61cf9ff02dcebc22f97778d4806db144c15eb9 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Thu, 12 Nov 2015 10:31:17 +0100 +Subject: [PATCH 1/7] Don't crash on file open failures + +--- + src/basecode/angelcodefont.cpp | 2 +- + src/core/simutils.cpp | 2 +- + src/include/fileutils.h | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/basecode/angelcodefont.cpp b/src/basecode/angelcodefont.cpp +index d109d0e..77d4d9a 100644 +--- a/src/basecode/angelcodefont.cpp ++++ b/src/basecode/angelcodefont.cpp +@@ -209,7 +209,7 @@ void ACFont::load(const char *filename) + + void ACFont::load(File * f) + { +- if (f == NULL) return; ++ if (f->f == NULL) return; + if (f->readbyte() != 0x42) return; // B + if (f->readbyte() != 0x4d) return; // M + if (f->readbyte() != 0x46) return; // F +diff --git a/src/core/simutils.cpp b/src/core/simutils.cpp +index 3f90dc9..bc8a0bb 100644 +--- a/src/core/simutils.cpp ++++ b/src/core/simutils.cpp +@@ -461,7 +461,7 @@ void do_flush_boxloadqueue() + gBoxLoadQueue.pop_back(); + gBoxBeingLoaded = item->mBox; + File *bf = do_preload_box(item->mFilename); +- if (bf == NULL) ++ if (bf->f == NULL) + { + // pretty catastrophic, but we'll do what we can.. + gBoxBeingLoaded = NULL; +diff --git a/src/include/fileutils.h b/src/include/fileutils.h +index 04f164e..bd1ca61 100644 +--- a/src/include/fileutils.h ++++ b/src/include/fileutils.h +@@ -28,8 +28,8 @@ using namespace std; + + class File + { +- FILE * f; + public: ++ FILE * f; + File(); + File(FILE *aFileHandle); + File(const char *aFilename, const char *aFileOpenTypes); +-- +2.5.0 + diff --git a/0002-Check-the-correct-pointer-for-NULL.patch b/0002-Check-the-correct-pointer-for-NULL.patch new file mode 100644 index 0000000..a3e2489 --- /dev/null +++ b/0002-Check-the-correct-pointer-for-NULL.patch @@ -0,0 +1,27 @@ +From 293cd0dabd9db6a57167ea88cd42f5f507e23156 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Sat, 14 Nov 2015 16:47:38 +0100 +Subject: [PATCH 2/7] Check the correct pointer for NULL + +--- + src/basecode/toolkit.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/basecode/toolkit.cpp b/src/basecode/toolkit.cpp +index 26c79d0..aa25363 100644 +--- a/src/basecode/toolkit.cpp ++++ b/src/basecode/toolkit.cpp +@@ -407,8 +407,8 @@ SDL_Cursor *load_cursor(const char *aFilename, int hotx, int hoty) + SDL_Cursor *cursor; + int ix, iy, n; + unsigned char *imgdata = stbi_load(aFilename, &ix, &iy, &n, 4); +- +- if (data == NULL) ++ ++ if (imgdata == NULL) + return NULL; + + if (ix > 32 || iy > 32) +-- +2.5.0 + diff --git a/0003-A-bit-better-error-handling.patch b/0003-A-bit-better-error-handling.patch new file mode 100644 index 0000000..e7fdc5b --- /dev/null +++ b/0003-A-bit-better-error-handling.patch @@ -0,0 +1,74 @@ +From 0908ea1059c337e6e3a314ae46d3b0f06596a0b1 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Sat, 14 Nov 2015 16:42:43 +0100 +Subject: [PATCH 3/7] A bit better error handling. + +--- + src/basecode/angelcodefont.cpp | 6 +++++- + src/basecode/toolkit.cpp | 6 ++++++ + src/core/fileutils.cpp | 2 ++ + 3 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/src/basecode/angelcodefont.cpp b/src/basecode/angelcodefont.cpp +index 77d4d9a..a675f25 100644 +--- a/src/basecode/angelcodefont.cpp ++++ b/src/basecode/angelcodefont.cpp +@@ -200,11 +200,15 @@ void ACFont::load(FILE *handle) + void ACFont::load(const char *filename) + { + File * f = new File(fopen(filename, "rb")); +- if (f) ++ if (f->f) + { + load(f); + delete f; + } ++ else ++ { ++ perror(filename); ++ } + } + + void ACFont::load(File * f) +diff --git a/src/basecode/toolkit.cpp b/src/basecode/toolkit.cpp +index aa25363..7dc28eb 100644 +--- a/src/basecode/toolkit.cpp ++++ b/src/basecode/toolkit.cpp +@@ -215,7 +215,10 @@ static void do_loadtexture(const char * aFilename, int clamp = 1) + unsigned char *data = stbi_load(aFilename, &x, &y, &n, 4); + + if (data == NULL) ++ { ++ perror(aFilename); + return; ++ } + + int l, w, h; + w = x; +@@ -409,7 +412,10 @@ SDL_Cursor *load_cursor(const char *aFilename, int hotx, int hoty) + unsigned char *imgdata = stbi_load(aFilename, &ix, &iy, &n, 4); + + if (imgdata == NULL) ++ { ++ perror(aFilename); + return NULL; ++ } + + if (ix > 32 || iy > 32) + { +diff --git a/src/core/fileutils.cpp b/src/core/fileutils.cpp +index e9678ea..a28b06e 100644 +--- a/src/core/fileutils.cpp ++++ b/src/core/fileutils.cpp +@@ -38,6 +38,8 @@ File::File(FILE *aFileHandle) + File::File(const char *aFilename, const char *aFileOpenTypes) + { + f = fopen(aFilename, aFileOpenTypes); ++ if (!f) ++ perror(aFilename); + } + + File::~File() +-- +2.5.0 + diff --git a/0004-Fix-Linux-build.patch b/0004-Fix-Linux-build.patch new file mode 100644 index 0000000..529025b --- /dev/null +++ b/0004-Fix-Linux-build.patch @@ -0,0 +1,281 @@ +From 543d4db2431d644a894102dba8e82d9b7848c298 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Thu, 12 Nov 2015 10:16:50 +0100 +Subject: [PATCH 4/7] Fix Linux build + +--- + makefile | 246 +++++++++++++++++++++++++++++++-------------------------------- + 1 file changed, 123 insertions(+), 123 deletions(-) + +diff --git a/makefile b/makefile +index 4a365f4..4d31b04 100644 +--- a/makefile ++++ b/makefile +@@ -1,141 +1,141 @@ + all: atanua + + atanua-cpp-src = \ +-fileio.cpp \ +-BoxStitchingInformation.cpp \ +-and8chip.cpp \ +-or8chip.cpp \ +-nand8chip.cpp \ +-nor8chip.cpp \ +-slidingaverage.cpp \ +-switchchip.cpp \ +-16segchip.cpp \ +-ledgrid.cpp \ +-box.cpp \ +-extpin.cpp \ +-chip7489.cpp \ +-audiochip.cpp \ +-7segchip.cpp \ +-and3chip.cpp \ +-andchip.cpp \ +-angelcodefont.cpp \ +-atanuaconfig.cpp \ +-basechipfactory.cpp \ +-buttonchip.cpp \ +-stepper.cpp \ +-chip309.cpp \ +-chip27xx.cpp \ +-chip74193.cpp \ +-chip74165.cpp \ +-chip74192.cpp \ +-chip.cpp \ +-chip2051.cpp \ +-chip7400.cpp \ +-chip7402.cpp \ +-chip7404.cpp \ +-chip7408.cpp \ +-chip7410.cpp \ +-chip74138.cpp \ +-chip74139.cpp \ +-chip74151.cpp \ +-chip74154.cpp \ +-chip74163.cpp \ +-chip74164.cpp \ +-chip74181.cpp \ +-chip74191.cpp \ +-chip74195.cpp \ +-chip7420.cpp \ +-chip74240.cpp \ +-chip74241.cpp \ +-chip74244.cpp \ +-chip74245.cpp \ +-chip74283.cpp \ +-chip7432.cpp \ +-chip7447.cpp \ +-chip74574.cpp \ +-chip7473.cpp \ +-chip7474.cpp \ +-chip7485.cpp \ +-chip7486.cpp \ +-chip7490.cpp \ +-clockchip.cpp \ +-dchip.cpp \ +-dflipflop.cpp \ +-dxchip.cpp \ +-extrapin.cpp \ +-fileutils.cpp \ +-jkchip.cpp \ +-jkflipflop.cpp \ +-label.cpp \ +-ledchip.cpp \ +-logicprobe.cpp \ +-main.cpp \ +-mersennetwister.cpp \ +-muxchip.cpp \ +-nand3chip.cpp \ +-nandchip.cpp \ +-nativefunctions.cpp \ +-net.cpp \ +-nor3chip.cpp \ +-norchip.cpp \ +-notchip.cpp \ +-or3chip.cpp \ +-orchip.cpp \ +-pin.cpp \ +-pluginchip.cpp \ +-pluginchipfactory.cpp \ +-sedchip.cpp \ +-serchip.cpp \ +-simutils.cpp \ +-srchip.cpp \ +-srflipflop.cpp \ +-srnegchip.cpp \ +-staticlevelchip.cpp \ +-tchip.cpp \ +-tflipflop.cpp \ +-toolkit.cpp \ +-wire.cpp \ +-xorchip.cpp \ +-tinyxml/tinystr.cpp \ +-tinyxml/tinyxml.cpp \ +-tinyxml/tinyxmlerror.cpp \ +-tinyxml/tinyxmlparser.cpp \ +- ++src/core/fileio.cpp \ ++src/core/BoxStitchingInformation.cpp \ ++src/chip/and8chip.cpp \ ++src/chip/or8chip.cpp \ ++src/chip/nand8chip.cpp \ ++src/chip/nor8chip.cpp \ ++src/core/slidingaverage.cpp \ ++src/chip/switchchip.cpp \ ++src/chip/16segchip.cpp \ ++src/chip/ledgrid.cpp \ ++src/chip/box.cpp \ ++src/chip/extpin.cpp \ ++src/chip/chip7489.cpp \ ++src/chip/audiochip.cpp \ ++src/chip/7segchip.cpp \ ++src/chip/and3chip.cpp \ ++src/chip/andchip.cpp \ ++src/basecode/angelcodefont.cpp \ ++src/core/basechipfactory.cpp \ ++src/chip/buttonchip.cpp \ ++src/chip/stepper.cpp \ ++src/chip/chip309.cpp \ ++src/chip/chip27xx.cpp \ ++src/chip/chip74193.cpp \ ++src/chip/chip74165.cpp \ ++src/chip/chip74192.cpp \ ++src/core/chip.cpp \ ++src/chip/chip2051.cpp \ ++src/chip/chip7400.cpp \ ++src/chip/chip7402.cpp \ ++src/chip/chip7404.cpp \ ++src/chip/chip7408.cpp \ ++src/chip/chip7410.cpp \ ++src/chip/chip74138.cpp \ ++src/chip/chip74139.cpp \ ++src/chip/chip74151.cpp \ ++src/chip/chip74154.cpp \ ++src/chip/chip74163.cpp \ ++src/chip/chip74164.cpp \ ++src/chip/chip74181.cpp \ ++src/chip/chip74191.cpp \ ++src/chip/chip74195.cpp \ ++src/chip/chip7420.cpp \ ++src/chip/chip74240.cpp \ ++src/chip/chip74241.cpp \ ++src/chip/chip74244.cpp \ ++src/chip/chip74245.cpp \ ++src/chip/chip74283.cpp \ ++src/chip/chip7432.cpp \ ++src/chip/chip7447.cpp \ ++src/chip/chip74574.cpp \ ++src/chip/chip7473.cpp \ ++src/chip/chip7474.cpp \ ++src/chip/chip7485.cpp \ ++src/chip/chip7486.cpp \ ++src/chip/chip7490.cpp \ ++src/chip/clockchip.cpp \ ++src/chip/dchip.cpp \ ++src/chip/dflipflop.cpp \ ++src/chip/dxchip.cpp \ ++src/chip/extrapin.cpp \ ++src/core/fileutils.cpp \ ++src/chip/jkchip.cpp \ ++src/chip/jkflipflop.cpp \ ++src/chip/label.cpp \ ++src/chip/ledchip.cpp \ ++src/chip/logicprobe.cpp \ ++src/core/main.cpp \ ++src/basecode/mersennetwister.cpp \ ++src/chip/muxchip.cpp \ ++src/chip/nand3chip.cpp \ ++src/chip/nandchip.cpp \ ++src/core/nativefunctions.cpp \ ++src/core/net.cpp \ ++src/chip/nor3chip.cpp \ ++src/chip/norchip.cpp \ ++src/chip/notchip.cpp \ ++src/chip/or3chip.cpp \ ++src/chip/orchip.cpp \ ++src/core/pin.cpp \ ++src/core/pluginchip.cpp \ ++src/core/pluginchipfactory.cpp \ ++src/chip/sedchip.cpp \ ++src/chip/serchip.cpp \ ++src/core/simutils.cpp \ ++src/chip/srchip.cpp \ ++src/chip/srflipflop.cpp \ ++src/chip/srnegchip.cpp \ ++src/chip/staticlevelchip.cpp \ ++src/chip/tchip.cpp \ ++src/chip/tflipflop.cpp \ ++src/basecode/toolkit.cpp \ ++src/core/wire.cpp \ ++src/chip/xorchip.cpp \ ++src/core/AtanuaConfig.cpp \ ++src/tinyxml_2_5_3/tinyxml/tinystr.cpp \ ++src/tinyxml_2_5_3/tinyxml/tinyxml.cpp \ ++src/tinyxml_2_5_3/tinyxml/tinyxmlerror.cpp \ ++src/tinyxml_2_5_3/tinyxml/tinyxmlparser.cpp \ + + atanua-c-src = \ +-8051/core.c \ +-8051/disasm.c \ +-8051/opcodes.c \ +-stb/stb_image.c \ +-stb/stb_image_write.c \ +-glee/GLee.c ++src/8051/core.c \ ++src/8051/disasm.c \ ++src/8051/opcodes.c \ ++src/stb/stb_image.c \ ++src/stb/stb_image_write.c \ ++src/glee/GLee.c + + atanua-obj = $(atanua-cpp-src:.cpp=.o) $(atanua-c-src:.c=.o) + + CXX = clang + CC = clang ++CFLAGS = -O3 ++ ++gtk_CFLAGS = $(shell pkg-config --cflags gtk+-3.0) ++glib_CFLAGS = $(shell pkg-config --cflags glib-2.0) ++sdl_CFLAGS = $(shell pkg-config --cflags sdl) ++gtk_LDFLAGS = $(shell pkg-config --libs gtk+-3.0) ++glib_LDFLAGS = $(shell pkg-config --libs glib-2.0) ++sdl_LDFLAGS = $(shell pkg-config --libs sdl) + +-CXXFLAGS = \ +--O3 \ +--I/usr/include/c++/4.5 \ +--I/usr/include/c++/4.5/i686-linux-gnu \ +--I/usr/X11R6/include \ +--Itinyxml \ +--I/usr/include/gtk-3.0 \ +--I/usr/include/cairo \ +--I/usr/include/glib-2.0 \ +--I/usr/lib/glib-2.0/include \ +--I/usr/include/pango-1.0 \ +--I/usr/lib/gtk-3.0/include \ +--I/usr/include/atk-1.0 \ +--I/usr/lib/i386-linux-gnu/glib-2.0/include \ +--I/usr/lib/x86_64-linux-gnu/glib-2.0/include \ +--I/usr/include/gdk-pixbuf-2.0 ++override CFLAGS += $(gtk_CFLAGS) ++override CFLAGS += $(glib_CFLAGS) ++override CFLAGS += $(sdl_CFLAGS) ++override CFLAGS += -Isrc -Isrc/include -Isrc/tinyxml_2_5_3/tinyxml + ++override CXXFLAGS += $(CFLAGS) + ++override LDFLAGS += $(gtk_LDFLAGS) ++override LDFLAGS += $(glib_LDFLAGS) ++override LDFLAGS += $(sdl_LDFLAGS) ++override LDFLAGS += -lGL -lGLU -lm -ldl -lstdc++ + + atanua: $(atanua-obj) +- $(CXX) `pkg-config --cflags gtk+-3.0` `pkg-config --cflags glib-2.0` -o $@ $(atanua-obj) -L. -lSDLmain -lSDL -lGL -lGLU `pkg-config --libs gtk+-3.0` `pkg-config --libs glib-2.0` -O3 $(CXXFLAGS) ++ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ + + clean: + rm $(atanua-obj) atanua +-- +2.5.0 + diff --git a/0005-Allow-builds-without-bundling-the-libraries.patch b/0005-Allow-builds-without-bundling-the-libraries.patch new file mode 100644 index 0000000..3d54470 --- /dev/null +++ b/0005-Allow-builds-without-bundling-the-libraries.patch @@ -0,0 +1,170 @@ +From ccf3bd265e4631376919dd3b5cbaf95f17f6cb8e Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Sat, 14 Nov 2015 18:14:43 +0100 +Subject: [PATCH 5/7] Allow builds without bundling the libraries + +--- + makefile | 64 ++++++++++++++++++++++++++++++++++++++++----------- + src/core/main.cpp | 2 +- + src/include/toolkit.h | 22 ++++-------------- + 3 files changed, 56 insertions(+), 32 deletions(-) + +diff --git a/makefile b/makefile +index 4d31b04..9386d70 100644 +--- a/makefile ++++ b/makefile +@@ -95,43 +95,79 @@ src/chip/tflipflop.cpp \ + src/basecode/toolkit.cpp \ + src/core/wire.cpp \ + src/chip/xorchip.cpp \ +-src/core/AtanuaConfig.cpp \ ++src/core/AtanuaConfig.cpp ++ ++atanua-c-src = \ ++src/8051/core.c \ ++src/8051/disasm.c \ ++src/8051/opcodes.c ++ ++atanua-obj = $(atanua-cpp-src:.cpp=.o) $(atanua-c-src:.c=.o) ++ ++tinyxml-cpp-src = \ + src/tinyxml_2_5_3/tinyxml/tinystr.cpp \ + src/tinyxml_2_5_3/tinyxml/tinyxml.cpp \ + src/tinyxml_2_5_3/tinyxml/tinyxmlerror.cpp \ + src/tinyxml_2_5_3/tinyxml/tinyxmlparser.cpp \ + +-atanua-c-src = \ +-src/8051/core.c \ +-src/8051/disasm.c \ +-src/8051/opcodes.c \ ++tinyxml-obj = $(tinyxml-cpp-src:.cpp=.o) ++ ++stb-c-src = \ + src/stb/stb_image.c \ +-src/stb/stb_image_write.c \ ++src/stb/stb_image_write.c ++ ++stb-obj = $(stb-c-src:.c=.o) ++ ++glee-c-src = \ + src/glee/GLee.c + +-atanua-obj = $(atanua-cpp-src:.cpp=.o) $(atanua-c-src:.c=.o) ++glee-obj = $(glee-c-src:.c=.o) + + CXX = clang + CC = clang + CFLAGS = -O3 + +-gtk_CFLAGS = $(shell pkg-config --cflags gtk+-3.0) + glib_CFLAGS = $(shell pkg-config --cflags glib-2.0) +-sdl_CFLAGS = $(shell pkg-config --cflags sdl) +-gtk_LDFLAGS = $(shell pkg-config --libs gtk+-3.0) + glib_LDFLAGS = $(shell pkg-config --libs glib-2.0) ++ ++gtk_CFLAGS = $(shell pkg-config --cflags gtk+-3.0) ++gtk_LDFLAGS = $(shell pkg-config --libs gtk+-3.0) ++ ++sdl_CFLAGS = $(shell pkg-config --cflags sdl) + sdl_LDFLAGS = $(shell pkg-config --libs sdl) + +-override CFLAGS += $(gtk_CFLAGS) ++ifdef UNBUNDLE ++ ++# Link against the system libraries ++tinyxml_LDFLAGS += -ltinyxml ++stb_LDFLAGS += -lstbi ++glee_LDFLAGS += -lGLee ++ ++else ++ ++# Build bundled copies ++tinyxml_CFLAGS = -Isrc/tinyxml_2_5_3/tinyxml ++stb_CFLAGS = -Isrc/stb ++glee_CFLAGS = -Isrc/glee ++atanua-obj += $(tinyxml-obj) $(stb-obj) $(glee-obj) ++ ++endif ++ + override CFLAGS += $(glib_CFLAGS) ++override CFLAGS += $(gtk_CFLAGS) + override CFLAGS += $(sdl_CFLAGS) +-override CFLAGS += -Isrc -Isrc/include -Isrc/tinyxml_2_5_3/tinyxml +- ++override CFLAGS += $(stb_CFLAGS) ++override CFLAGS += $(tinyxml_CFLAGS) ++override CFLAGS += $(glee_CFLAGS) ++override CFLAGS += -Isrc -Isrc/include -I/usr/include/GL -I/usr/include/OpenGL + override CXXFLAGS += $(CFLAGS) + +-override LDFLAGS += $(gtk_LDFLAGS) + override LDFLAGS += $(glib_LDFLAGS) ++override LDFLAGS += $(gtk_LDFLAGS) + override LDFLAGS += $(sdl_LDFLAGS) ++override LDFLAGS += $(stb_LDFLAGS) ++override LDFLAGS += $(tinyxml_LDFLAGS) ++override LDFLAGS += $(glee_LDFLAGS) + override LDFLAGS += -lGL -lGLU -lm -ldl -lstdc++ + + atanua: $(atanua-obj) +diff --git a/src/core/main.cpp b/src/core/main.cpp +index 635a669..a92d2bc 100644 +--- a/src/core/main.cpp ++++ b/src/core/main.cpp +@@ -27,7 +27,7 @@ distribution. + #include "basechipfactory.h" + #include "pluginchipfactory.h" + +-#include "stb/stb_image_write.h" ++#include + + #define C_MENUBG 0xff3f4f4f + #define C_WIDGETBG 0xff3f5f6f +diff --git a/src/include/toolkit.h b/src/include/toolkit.h +index 061962a..f24ae43 100644 +--- a/src/include/toolkit.h ++++ b/src/include/toolkit.h +@@ -54,35 +54,23 @@ distribution. + #define LINUX_VERSION + #endif + ++#include ++#include ++#include ++#include ++#include + + #ifdef WINDOWS_VERSION + #include // needed to get GL stuff to work +-#include +-#include "stb/stb_image.h" +-#include "glee/glee.h" +-#include +-#include + #define stricmp _stricmp + #define strdup _strdup + #endif + +- + #ifdef OSX_VERSION +-#include +-#include "stb/stb_image.h" +-#include "glee/GLee.h" +-#include +-#include + #define stricmp(a,b) strcasecmp((a),(b)) + #endif + +- + #ifdef LINUX_VERSION +-#include +-#include "stb/stb_image.h" +-#include "glee/GLee.h" +-#include +-#include + #define stricmp(a,b) strcasecmp((a),(b)) + #endif + +-- +2.5.0 + diff --git a/0006-Allow-overriding-the-data-directory-on-build.patch b/0006-Allow-overriding-the-data-directory-on-build.patch new file mode 100644 index 0000000..eb908fd --- /dev/null +++ b/0006-Allow-overriding-the-data-directory-on-build.patch @@ -0,0 +1,1233 @@ +From cbb3138054b86c5c11632def023d5a5a1b8b545d Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Sat, 14 Nov 2015 17:14:25 +0100 +Subject: [PATCH 6/7] Allow overriding the data/ directory on build + +--- + src/basecode/angelcodefont.cpp | 2 +- + src/chip/16segchip.cpp | 36 ++++++++++++++++++------------------ + src/chip/7segchip.cpp | 18 +++++++++--------- + src/chip/and3chip.cpp | 4 ++-- + src/chip/and8chip.cpp | 4 ++-- + src/chip/andchip.cpp | 4 ++-- + src/chip/audiochip.cpp | 2 +- + src/chip/buttonchip.cpp | 2 +- + src/chip/chip2051.cpp | 2 +- + src/chip/chip27xx.cpp | 2 +- + src/chip/chip309.cpp | 18 +++++++++--------- + src/chip/chip7400.cpp | 2 +- + src/chip/chip7402.cpp | 2 +- + src/chip/chip7404.cpp | 2 +- + src/chip/chip7408.cpp | 2 +- + src/chip/chip7410.cpp | 2 +- + src/chip/chip74138.cpp | 2 +- + src/chip/chip74139.cpp | 2 +- + src/chip/chip74151.cpp | 2 +- + src/chip/chip74154.cpp | 2 +- + src/chip/chip74163.cpp | 2 +- + src/chip/chip74164.cpp | 2 +- + src/chip/chip74165.cpp | 2 +- + src/chip/chip74181.cpp | 2 +- + src/chip/chip74191.cpp | 2 +- + src/chip/chip74192.cpp | 2 +- + src/chip/chip74193.cpp | 2 +- + src/chip/chip74195.cpp | 2 +- + src/chip/chip7420.cpp | 2 +- + src/chip/chip74240.cpp | 2 +- + src/chip/chip74241.cpp | 2 +- + src/chip/chip74244.cpp | 2 +- + src/chip/chip74245.cpp | 2 +- + src/chip/chip74283.cpp | 2 +- + src/chip/chip7432.cpp | 2 +- + src/chip/chip7447.cpp | 2 +- + src/chip/chip74574.cpp | 2 +- + src/chip/chip7473.cpp | 2 +- + src/chip/chip7474.cpp | 2 +- + src/chip/chip7485.cpp | 2 +- + src/chip/chip7486.cpp | 2 +- + src/chip/chip7489.cpp | 2 +- + src/chip/chip7490.cpp | 2 +- + src/chip/clockchip.cpp | 4 ++-- + src/chip/dchip.cpp | 2 +- + src/chip/dflipflop.cpp | 2 +- + src/chip/dxchip.cpp | 2 +- + src/chip/jkchip.cpp | 2 +- + src/chip/jkflipflop.cpp | 2 +- + src/chip/ledchip.cpp | 4 ++-- + src/chip/ledgrid.cpp | 4 ++-- + src/chip/logicprobe.cpp | 2 +- + src/chip/muxchip.cpp | 2 +- + src/chip/nand3chip.cpp | 4 ++-- + src/chip/nand8chip.cpp | 4 ++-- + src/chip/nandchip.cpp | 4 ++-- + src/chip/nor3chip.cpp | 4 ++-- + src/chip/nor8chip.cpp | 4 ++-- + src/chip/norchip.cpp | 4 ++-- + src/chip/notchip.cpp | 4 ++-- + src/chip/or3chip.cpp | 4 ++-- + src/chip/or8chip.cpp | 4 ++-- + src/chip/orchip.cpp | 4 ++-- + src/chip/sedchip.cpp | 4 ++-- + src/chip/serchip.cpp | 2 +- + src/chip/srchip.cpp | 2 +- + src/chip/srflipflop.cpp | 2 +- + src/chip/srnegchip.cpp | 2 +- + src/chip/staticlevelchip.cpp | 4 ++-- + src/chip/stepper.cpp | 2 +- + src/chip/switchchip.cpp | 2 +- + src/chip/tchip.cpp | 2 +- + src/chip/tflipflop.cpp | 2 +- + src/chip/xorchip.cpp | 4 ++-- + src/core/main.cpp | 12 ++++++------ + src/include/atanua.h | 6 +++++- + 76 files changed, 137 insertions(+), 133 deletions(-) + +diff --git a/src/basecode/angelcodefont.cpp b/src/basecode/angelcodefont.cpp +index a675f25..176c69f 100644 +--- a/src/basecode/angelcodefont.cpp ++++ b/src/basecode/angelcodefont.cpp +@@ -94,7 +94,7 @@ void ACFontPagesBlock::load(File * f) + f->readchars(name[i], l); + char temp[256]; + // should actually take the directory from the .fnt filename string.. +- sprintf(temp,"data/%s",name[i]); ++ sprintf(temp,DATADIR "/%s",name[i]); + glhandle[i] = load_texture(temp, 1); + } + } +diff --git a/src/chip/16segchip.cpp b/src/chip/16segchip.cpp +index 817dabe..bdc47e3 100644 +--- a/src/chip/16segchip.cpp ++++ b/src/chip/16segchip.cpp +@@ -75,24 +75,24 @@ SixteenSegChip::SixteenSegChip(int aColor, int aInverse) + mInputPin[15].set(2.95,ypos,this,"Pin 17: M"); ypos -= step; + mInputPin[16].set(2.95,ypos,this,"Pin 18: DP"); ypos -= step; + +- mTexture[0] = load_texture("data/16seg_base.png"); +- mTexture[1] = load_texture("data/16seg_a1.png"); +- mTexture[2] = load_texture("data/16seg_a2.png"); +- mTexture[3] = load_texture("data/16seg_j.png"); +- mTexture[4] = load_texture("data/16seg_h.png"); +- mTexture[5] = load_texture("data/16seg_f.png"); +- mTexture[6] = load_texture("data/16seg_e.png"); +- mTexture[7] = load_texture("data/16seg_n.png"); +- mTexture[8] = load_texture("data/16seg_d1.png"); +- mTexture[9] = load_texture("data/16seg_d2.png"); +- mTexture[10] = load_texture("data/16seg_k.png"); +- mTexture[11] = load_texture("data/16seg_b.png"); +- mTexture[12] = load_texture("data/16seg_g1.png"); +- mTexture[13] = load_texture("data/16seg_g2.png"); +- mTexture[14] = load_texture("data/16seg_c.png"); +- mTexture[15] = load_texture("data/16seg_l.png"); +- mTexture[16] = load_texture("data/16seg_m.png"); +- mTexture[17] = load_texture("data/16seg_dp.png"); ++ mTexture[0] = load_texture(DATADIR "/16seg_base.png"); ++ mTexture[1] = load_texture(DATADIR "/16seg_a1.png"); ++ mTexture[2] = load_texture(DATADIR "/16seg_a2.png"); ++ mTexture[3] = load_texture(DATADIR "/16seg_j.png"); ++ mTexture[4] = load_texture(DATADIR "/16seg_h.png"); ++ mTexture[5] = load_texture(DATADIR "/16seg_f.png"); ++ mTexture[6] = load_texture(DATADIR "/16seg_e.png"); ++ mTexture[7] = load_texture(DATADIR "/16seg_n.png"); ++ mTexture[8] = load_texture(DATADIR "/16seg_d1.png"); ++ mTexture[9] = load_texture(DATADIR "/16seg_d2.png"); ++ mTexture[10] = load_texture(DATADIR "/16seg_k.png"); ++ mTexture[11] = load_texture(DATADIR "/16seg_b.png"); ++ mTexture[12] = load_texture(DATADIR "/16seg_g1.png"); ++ mTexture[13] = load_texture(DATADIR "/16seg_g2.png"); ++ mTexture[14] = load_texture(DATADIR "/16seg_c.png"); ++ mTexture[15] = load_texture(DATADIR "/16seg_l.png"); ++ mTexture[16] = load_texture(DATADIR "/16seg_m.png"); ++ mTexture[17] = load_texture(DATADIR "/16seg_dp.png"); + } + + SixteenSegChip::~SixteenSegChip() +diff --git a/src/chip/7segchip.cpp b/src/chip/7segchip.cpp +index b35fcdd..0168dfe 100644 +--- a/src/chip/7segchip.cpp ++++ b/src/chip/7segchip.cpp +@@ -62,15 +62,15 @@ SevenSegChip::SevenSegChip(int aColor, int aInverse) + mPin.push_back(&mInputPin[7]); + mInputPin[7].set(2.0, 4.5, this,mInverse?"Pin 5:D.P#":"Pin 5:D.P"); + +- mTexture[0] = load_texture("data/7seg_base.png"); +- mTexture[1] = load_texture("data/7seg_a.png"); +- mTexture[2] = load_texture("data/7seg_b.png"); +- mTexture[3] = load_texture("data/7seg_c.png"); +- mTexture[4] = load_texture("data/7seg_d.png"); +- mTexture[5] = load_texture("data/7seg_e.png"); +- mTexture[6] = load_texture("data/7seg_f.png"); +- mTexture[7] = load_texture("data/7seg_g.png"); +- mTexture[8] = load_texture("data/7seg_h.png"); ++ mTexture[0] = load_texture(DATADIR "/7seg_base.png"); ++ mTexture[1] = load_texture(DATADIR "/7seg_a.png"); ++ mTexture[2] = load_texture(DATADIR "/7seg_b.png"); ++ mTexture[3] = load_texture(DATADIR "/7seg_c.png"); ++ mTexture[4] = load_texture(DATADIR "/7seg_d.png"); ++ mTexture[5] = load_texture(DATADIR "/7seg_e.png"); ++ mTexture[6] = load_texture(DATADIR "/7seg_f.png"); ++ mTexture[7] = load_texture(DATADIR "/7seg_g.png"); ++ mTexture[8] = load_texture(DATADIR "/7seg_h.png"); + + int i; + for (i = 0; i < 8; i++) +diff --git a/src/chip/and3chip.cpp b/src/chip/and3chip.cpp +index bd9935d..53497d3 100644 +--- a/src/chip/and3chip.cpp ++++ b/src/chip/and3chip.cpp +@@ -35,9 +35,9 @@ AND3Chip::AND3Chip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/and3_us.png"); ++ mTexture = load_texture(DATADIR "/and3_us.png"); + else +- mTexture = load_texture("data/and3_fi.png"); ++ mTexture = load_texture(DATADIR "/and3_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/and8chip.cpp b/src/chip/and8chip.cpp +index 6c61c9e..f62b626 100644 +--- a/src/chip/and8chip.cpp ++++ b/src/chip/and8chip.cpp +@@ -49,9 +49,9 @@ AND8Chip::AND8Chip(int aUS) + mInputPin[7].set(0, ypos, this, "Input H"); + mOutputPin.set(3.5, 1.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/and8_us.png"); ++ mTexture = load_texture(DATADIR "/and8_us.png"); + else +- mTexture = load_texture("data/and8_fi.png"); ++ mTexture = load_texture(DATADIR "/and8_fi.png"); + + int i; + for (i = 0; i < 8; i++) +diff --git a/src/chip/andchip.cpp b/src/chip/andchip.cpp +index 20640c9..8883ee4 100644 +--- a/src/chip/andchip.cpp ++++ b/src/chip/andchip.cpp +@@ -33,9 +33,9 @@ ANDChip::ANDChip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/and_us.png"); ++ mTexture = load_texture(DATADIR "/and_us.png"); + else +- mTexture = load_texture("data/and_fi.png"); ++ mTexture = load_texture(DATADIR "/and_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/audiochip.cpp b/src/chip/audiochip.cpp +index b0819d1..ce90274 100644 +--- a/src/chip/audiochip.cpp ++++ b/src/chip/audiochip.cpp +@@ -52,7 +52,7 @@ AudioChip::AudioChip() + mPin.push_back(&mPinA[0]); + mPinA[0].set(0, ypos, this, "A0"); ypos += 0.5; + +- mTexture = load_texture("data/audio.png"); ++ mTexture = load_texture(DATADIR "/audio.png"); + + int i; + for (i = 0; i < 8; i++) +diff --git a/src/chip/buttonchip.cpp b/src/chip/buttonchip.cpp +index da1593d..48657f8 100644 +--- a/src/chip/buttonchip.cpp ++++ b/src/chip/buttonchip.cpp +@@ -29,7 +29,7 @@ ButtonChip::ButtonChip(int aCharacter) + set(0,0,2,2,NULL); + mPin.push_back(&mOutputPin); + mOutputPin.set(0.75, 1.5, this, "Output"); +- mTexture = load_texture("data/button.png"); ++ mTexture = load_texture(DATADIR "/button.png"); + mPressed = 0; + } + +diff --git a/src/chip/chip2051.cpp b/src/chip/chip2051.cpp +index a24571d..9610daa 100644 +--- a/src/chip/chip2051.cpp ++++ b/src/chip/chip2051.cpp +@@ -124,7 +124,7 @@ Chip2051::Chip2051() + mClock = 0; + mResetCounter = 0; + +- mTexture = load_texture("data/chip_20pin.png"); ++ mTexture = load_texture(DATADIR "/chip_20pin.png"); + } + + void Chip2051::render(int aChipId) +diff --git a/src/chip/chip27xx.cpp b/src/chip/chip27xx.cpp +index cdd3f3e..586fa89 100644 +--- a/src/chip/chip27xx.cpp ++++ b/src/chip/chip27xx.cpp +@@ -114,7 +114,7 @@ Chip27xx::Chip27xx(int aType) + mPin.push_back(&mOutputPin[2]); + mOutputPin[2].set(xpos, 3.1, this, "Pin 11:DQ2"); xpos += 0.5475; + +- mTexture = load_texture("data/chip_24pin.png"); ++ mTexture = load_texture(DATADIR "/chip_24pin.png"); + } + + Chip27xx::~Chip27xx() +diff --git a/src/chip/chip309.cpp b/src/chip/chip309.cpp +index 68068f8..06a858d 100644 +--- a/src/chip/chip309.cpp ++++ b/src/chip/chip309.cpp +@@ -73,15 +73,15 @@ Chip309::Chip309() + mPin.push_back(&mInputPin[0]); + mInputPin[0].set(2.5, yp, this, "Pin 15:A"); yp += 0.5; + +- mTexture[0] = load_texture("data/309.png"); +- mTexture[1] = load_texture("data/309_b.png"); +- mTexture[2] = load_texture("data/309_c.png"); +- mTexture[3] = load_texture("data/309_d.png"); +- mTexture[4] = load_texture("data/309_e.png"); +- mTexture[5] = load_texture("data/309_f.png"); +- mTexture[6] = load_texture("data/309_a.png"); +- mTexture[7] = load_texture("data/309_g.png"); +- mTexture[8] = load_texture("data/309_h.png"); ++ mTexture[0] = load_texture(DATADIR "/309.png"); ++ mTexture[1] = load_texture(DATADIR "/309_b.png"); ++ mTexture[2] = load_texture(DATADIR "/309_c.png"); ++ mTexture[3] = load_texture(DATADIR "/309_d.png"); ++ mTexture[4] = load_texture(DATADIR "/309_e.png"); ++ mTexture[5] = load_texture(DATADIR "/309_f.png"); ++ mTexture[6] = load_texture(DATADIR "/309_a.png"); ++ mTexture[7] = load_texture(DATADIR "/309_g.png"); ++ mTexture[8] = load_texture(DATADIR "/309_h.png"); + + mData = 0; + mVisibleData = 0; +diff --git a/src/chip/chip7400.cpp b/src/chip/chip7400.cpp +index 7a08177..28105e9 100644 +--- a/src/chip/chip7400.cpp ++++ b/src/chip/chip7400.cpp +@@ -56,7 +56,7 @@ Chip7400::Chip7400() + mPin.push_back(&mOutputPin[3]); + mOutputPin[3].set(xpos, 1.5, this, "Pin 6:Y2"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7400::render(int aChipId) +diff --git a/src/chip/chip7402.cpp b/src/chip/chip7402.cpp +index e42be4e..1f54434 100644 +--- a/src/chip/chip7402.cpp ++++ b/src/chip/chip7402.cpp +@@ -56,7 +56,7 @@ Chip7402::Chip7402() + mPin.push_back(&mInputPinA[3]); + mInputPinA[3].set(xpos, 1.5, this, "Pin 6:B2"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7402::render(int aChipId) +diff --git a/src/chip/chip7404.cpp b/src/chip/chip7404.cpp +index 47e3396..804cceb 100644 +--- a/src/chip/chip7404.cpp ++++ b/src/chip/chip7404.cpp +@@ -59,7 +59,7 @@ Chip7404::Chip7404() + mPin.push_back(&mOutputPin[5]); + mOutputPin[5].set(xpos, 1.5, this, "Pin 6:Y3"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7404::render(int aChipId) +diff --git a/src/chip/chip7408.cpp b/src/chip/chip7408.cpp +index c90aeb2..58860aa 100644 +--- a/src/chip/chip7408.cpp ++++ b/src/chip/chip7408.cpp +@@ -56,7 +56,7 @@ Chip7408::Chip7408() + mPin.push_back(&mOutputPin[3]); + mOutputPin[3].set(xpos, 1.5, this, "Pin 6:Y2"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7408::render(int aChipId) +diff --git a/src/chip/chip7410.cpp b/src/chip/chip7410.cpp +index e038595..3b81ebc 100644 +--- a/src/chip/chip7410.cpp ++++ b/src/chip/chip7410.cpp +@@ -57,7 +57,7 @@ Chip7410::Chip7410() + mPin.push_back(&mOutputPin[2]); + mOutputPin[2].set(xpos , 1.5, this, "Pin 6:Y2"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7410::render(int aChipId) +diff --git a/src/chip/chip74138.cpp b/src/chip/chip74138.cpp +index aa94eae..e2ed102 100644 +--- a/src/chip/chip74138.cpp ++++ b/src/chip/chip74138.cpp +@@ -60,7 +60,7 @@ Chip74138::Chip74138() + mPin.push_back(&mOutputPin[7]); + mOutputPin[7].set(xpos , 1.75, this, "Pin 7:DATA OUTPUT Y7"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + } + + void Chip74138::render(int aChipId) +diff --git a/src/chip/chip74139.cpp b/src/chip/chip74139.cpp +index 7e76e89..ef35462 100644 +--- a/src/chip/chip74139.cpp ++++ b/src/chip/chip74139.cpp +@@ -58,7 +58,7 @@ Chip74139::Chip74139() + mPin.push_back(&mOutputPin[1][3]); + mOutputPin[1][3].set(xpos, 1.75, this, "Pin 7:DATA OUTPUT 1Y3"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + } + + void Chip74139::render(int aChipId) +diff --git a/src/chip/chip74151.cpp b/src/chip/chip74151.cpp +index 4fd020f..b7ea7d2 100644 +--- a/src/chip/chip74151.cpp ++++ b/src/chip/chip74151.cpp +@@ -61,7 +61,7 @@ Chip74151::Chip74151() + mPin.push_back(&mStrobePin); + mStrobePin.set(xpos, 1.75, this, "Pin 7:STROBE"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + } + + void Chip74151::render(int aChipId) +diff --git a/src/chip/chip74154.cpp b/src/chip/chip74154.cpp +index dae0d7f..44568c7 100644 +--- a/src/chip/chip74154.cpp ++++ b/src/chip/chip74154.cpp +@@ -75,7 +75,7 @@ Chip74154::Chip74154() + mPin.push_back(&mOutputPin[10]); + mOutputPin[10].set(xpos, 3.1, this, "Pin 11:OUTPUT 10"); xpos += 0.5475; + +- mTexture = load_texture("data/chip_24pin.png"); ++ mTexture = load_texture(DATADIR "/chip_24pin.png"); + } + + void Chip74154::render(int aChipId) +diff --git a/src/chip/chip74163.cpp b/src/chip/chip74163.cpp +index 560afea..2b8936c 100644 +--- a/src/chip/chip74163.cpp ++++ b/src/chip/chip74163.cpp +@@ -46,7 +46,7 @@ Chip74163::Chip74163() + DEF_PIN(mInputPin[3], 1.75, "Pin 6:DATA INPUT D"); + DEF_PIN(mEnablePPin, 1.75, "Pin 7:ENABLE P"); + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + + mOldClock = 0; + mValue = 0; +diff --git a/src/chip/chip74164.cpp b/src/chip/chip74164.cpp +index 12c8140..417ec67 100644 +--- a/src/chip/chip74164.cpp ++++ b/src/chip/chip74164.cpp +@@ -57,7 +57,7 @@ Chip74164::Chip74164() + mPin.push_back(&mOutputPin[3]); + mOutputPin[3].set(xpos , 1.5, this, "Pin 6:OUTPUT QD"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + + mOldClock = 0; + } +diff --git a/src/chip/chip74165.cpp b/src/chip/chip74165.cpp +index a54a84a..e5c2ce5 100644 +--- a/src/chip/chip74165.cpp ++++ b/src/chip/chip74165.cpp +@@ -58,7 +58,7 @@ Chip74165::Chip74165() + mPin.push_back(&mNegOutput); + mNegOutput.set(xpos, 1.75, this, "Pin 7:OUTPUT (Q7)#"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + mLastClock = 0; + mValue = 0; + } +diff --git a/src/chip/chip74181.cpp b/src/chip/chip74181.cpp +index 9a7db7b..7dc0dc3 100644 +--- a/src/chip/chip74181.cpp ++++ b/src/chip/chip74181.cpp +@@ -75,7 +75,7 @@ Chip74181::Chip74181() + mPin.push_back(&mOutputPin[2]); + mOutputPin[2].set(xpos, 3.1, this, "Pin 11:F2"); xpos += 0.5475; + +- mTexture = load_texture("data/chip_24pin.png"); ++ mTexture = load_texture(DATADIR "/chip_24pin.png"); + } + + void Chip74181::render(int aChipId) +diff --git a/src/chip/chip74191.cpp b/src/chip/chip74191.cpp +index 11b594d..33129a6 100644 +--- a/src/chip/chip74191.cpp ++++ b/src/chip/chip74191.cpp +@@ -60,7 +60,7 @@ Chip74191::Chip74191() + mOutputPin[3].set(xpos, 1.75, this, "Pin 7:QD output"); xpos += 0.54; + + mClock = 0; +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + } + + void Chip74191::render(int aChipId) +diff --git a/src/chip/chip74192.cpp b/src/chip/chip74192.cpp +index b1d58c5..d5f245d 100644 +--- a/src/chip/chip74192.cpp ++++ b/src/chip/chip74192.cpp +@@ -58,7 +58,7 @@ Chip74192::Chip74192() + mPin.push_back(&mOutputPin[3]); + mOutputPin[3].set(xpos, 1.75, this, "Pin 7:QD"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + + mValue = 0; + mCountDownLastState = 0; +diff --git a/src/chip/chip74193.cpp b/src/chip/chip74193.cpp +index ddc32b1..22ecfef 100644 +--- a/src/chip/chip74193.cpp ++++ b/src/chip/chip74193.cpp +@@ -58,7 +58,7 @@ Chip74193::Chip74193() + mPin.push_back(&mOutputPin[3]); + mOutputPin[3].set(xpos, 1.75, this, "Pin 7:QD"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + + mValue = 0; + mCountDownLastState = 0; +diff --git a/src/chip/chip74195.cpp b/src/chip/chip74195.cpp +index 9982877..8b580e5 100644 +--- a/src/chip/chip74195.cpp ++++ b/src/chip/chip74195.cpp +@@ -61,7 +61,7 @@ Chip74195::Chip74195() + mPin.push_back(&mInputPin[3]); + mInputPin[3].set(xpos, 1.75, this, "Pin 7:P3"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + + mClock = 0; + } +diff --git a/src/chip/chip7420.cpp b/src/chip/chip7420.cpp +index 010c109..cfe0cef 100644 +--- a/src/chip/chip7420.cpp ++++ b/src/chip/chip7420.cpp +@@ -54,7 +54,7 @@ Chip7420::Chip7420() + mPin.push_back(&mOutputPin[1]); + mOutputPin[1].set(xpos, 1.5, this, "Pin 6:Y1"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7420::render(int aChipId) +diff --git a/src/chip/chip74240.cpp b/src/chip/chip74240.cpp +index 95ab186..edb1a2c 100644 +--- a/src/chip/chip74240.cpp ++++ b/src/chip/chip74240.cpp +@@ -67,7 +67,7 @@ Chip74240::Chip74240() + mPin.push_back(&mOutputPin[7]); + mOutputPin[7].set(xpos, 2.1, this, "Pin 9:2Y1"); xpos += 0.54; + +- mTexture = load_texture("data/chip_20pin.png"); ++ mTexture = load_texture(DATADIR "/chip_20pin.png"); + } + + void Chip74240::render(int aChipId) +diff --git a/src/chip/chip74241.cpp b/src/chip/chip74241.cpp +index ea32737..d4c6e45 100644 +--- a/src/chip/chip74241.cpp ++++ b/src/chip/chip74241.cpp +@@ -67,7 +67,7 @@ Chip74241::Chip74241() + mPin.push_back(&mOutputPin[7]); + mOutputPin[7].set(xpos, 2.1, this, "Pin 9:2Y1"); xpos += 0.54; + +- mTexture = load_texture("data/chip_20pin.png"); ++ mTexture = load_texture(DATADIR "/chip_20pin.png"); + } + + void Chip74241::render(int aChipId) +diff --git a/src/chip/chip74244.cpp b/src/chip/chip74244.cpp +index 1a961b1..328173b 100644 +--- a/src/chip/chip74244.cpp ++++ b/src/chip/chip74244.cpp +@@ -67,7 +67,7 @@ Chip74244::Chip74244() + mPin.push_back(&mOutputPin[7]); + mOutputPin[7].set(xpos, 2.1, this, "Pin 9:2Y1"); xpos += 0.54; + +- mTexture = load_texture("data/chip_20pin.png"); ++ mTexture = load_texture(DATADIR "/chip_20pin.png"); + } + + void Chip74244::render(int aChipId) +diff --git a/src/chip/chip74245.cpp b/src/chip/chip74245.cpp +index 7796859..a00e249 100644 +--- a/src/chip/chip74245.cpp ++++ b/src/chip/chip74245.cpp +@@ -67,7 +67,7 @@ Chip74245::Chip74245() + mPin.push_back(&mBusAPin[7]); + mBusAPin[7].set(xpos, 2.1, this, "Pin 9:A8"); xpos += 0.54; + +- mTexture = load_texture("data/chip_20pin.png"); ++ mTexture = load_texture(DATADIR "/chip_20pin.png"); + } + + void Chip74245::render(int aChipId) +diff --git a/src/chip/chip74283.cpp b/src/chip/chip74283.cpp +index 2f0c2a4..a04d6c2 100644 +--- a/src/chip/chip74283.cpp ++++ b/src/chip/chip74283.cpp +@@ -58,7 +58,7 @@ Chip74283::Chip74283() + mPin.push_back(&mInputPinC); + mInputPinC.set(xpos, 1.75, this, "Pin 7:C0"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + } + + void Chip74283::render(int aChipId) +diff --git a/src/chip/chip7432.cpp b/src/chip/chip7432.cpp +index 17318d2..fb698b2 100644 +--- a/src/chip/chip7432.cpp ++++ b/src/chip/chip7432.cpp +@@ -56,7 +56,7 @@ Chip7432::Chip7432() + mPin.push_back(&mOutputPin[3]); + mOutputPin[3].set(xpos, 1.5, this, "Pin 6:Y2"); xpos += 0.54; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7432::render(int aChipId) +diff --git a/src/chip/chip7447.cpp b/src/chip/chip7447.cpp +index 96f812b..ad7a539 100644 +--- a/src/chip/chip7447.cpp ++++ b/src/chip/chip7447.cpp +@@ -58,7 +58,7 @@ Chip7447::Chip7447() + mPin.push_back(&mInputPin[0]); + mInputPin[0].set(xpos, 1.75, this, "Pin 7:A0"); xpos += 0.54; + +- mTexture = load_texture("data/chip_16pin.png"); ++ mTexture = load_texture(DATADIR "/chip_16pin.png"); + } + + void Chip7447::render(int aChipId) +diff --git a/src/chip/chip74574.cpp b/src/chip/chip74574.cpp +index e29f94f..6ecd305 100644 +--- a/src/chip/chip74574.cpp ++++ b/src/chip/chip74574.cpp +@@ -67,7 +67,7 @@ Chip74574::Chip74574() + mPin.push_back(&mInputPin[7]); + mInputPin[7].set(xpos, 2.1, this, "Pin 8:8D"); xpos += 0.54; + +- mTexture = load_texture("data/chip_20pin.png"); ++ mTexture = load_texture(DATADIR "/chip_20pin.png"); + + mState = 0; + mClock = 0; +diff --git a/src/chip/chip7473.cpp b/src/chip/chip7473.cpp +index a842018..1981597 100644 +--- a/src/chip/chip7473.cpp ++++ b/src/chip/chip7473.cpp +@@ -64,7 +64,7 @@ Chip7473::Chip7473() + mClock[0] = 1; + mClock[1] = 1; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7473::render(int aChipId) +diff --git a/src/chip/chip7474.cpp b/src/chip/chip7474.cpp +index 05fa486..1c5500f 100644 +--- a/src/chip/chip7474.cpp ++++ b/src/chip/chip7474.cpp +@@ -58,7 +58,7 @@ Chip7474::Chip7474() + mClock[0] = 0; + mClock[1] = 0; + +- mTexture = load_texture("data/chip_14pin.png"); ++ mTexture = load_texture(DATADIR "/chip_14pin.png"); + } + + void Chip7474::render(int aChipId) +diff --git a/src/chip/chip7485.cpp b/src/chip/chip7485.cpp +index 35ca1b3..759d3f4 100644 +--- a/src/chip/chip7485.cpp ++++ b/src/chip/chip7485.cpp +@@ -60,7 +60,7 @@ Chip7485::Chip7485() + mOutputPin[2].set(xpos , 1.75, this, "Pin 1:A gConfig.mPhysicsKHz) + mNagOnce = 1; + else +@@ -95,7 +95,7 @@ ClockChip::ClockChip(float aFreqHz) + set(0, 0, 2, 2.25,NULL); + mPin.push_back(&mOutputPin); + mOutputPin.set(0.75, 1.75, this, "Output"); +- mTexture = load_texture("data/clock.png"); ++ mTexture = load_texture(DATADIR "/clock.png"); + mTimePos = 0; + } + +diff --git a/src/chip/dchip.cpp b/src/chip/dchip.cpp +index 5703137..04a233d 100644 +--- a/src/chip/dchip.cpp ++++ b/src/chip/dchip.cpp +@@ -34,7 +34,7 @@ DChip::DChip() + mOutputPinA.set(3.5, 0.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(3.5, 1.25, this, "Inverted output"); +- mTexture = load_texture("data/d.png"); ++ mTexture = load_texture(DATADIR "/d.png"); + mOldState = 0; + + mInputPinA.mReadOnly = 1; +diff --git a/src/chip/dflipflop.cpp b/src/chip/dflipflop.cpp +index b39011b..0d4588d 100644 +--- a/src/chip/dflipflop.cpp ++++ b/src/chip/dflipflop.cpp +@@ -40,7 +40,7 @@ DFlipFlop::DFlipFlop() + mOutputPinA.set(4.5, 1.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(4.5, 3.25, this, "Inverted output"); +- mTexture = load_texture("data/d_flipflop.png"); ++ mTexture = load_texture(DATADIR "/d_flipflop.png"); + mState = 0; + mClock = 0; + +diff --git a/src/chip/dxchip.cpp b/src/chip/dxchip.cpp +index eae5e5b..8645c78 100644 +--- a/src/chip/dxchip.cpp ++++ b/src/chip/dxchip.cpp +@@ -57,7 +57,7 @@ DxChip::DxChip() + mPin.push_back(&mOutputPin[7]); + mOutputPin[7].set(4.5, 7.25, this, "Output 7"); + +- mTexture = load_texture("data/dx.png"); ++ mTexture = load_texture(DATADIR "/dx.png"); + + mInputPin[0].mReadOnly = 1; + mInputPin[1].mReadOnly = 1; +diff --git a/src/chip/jkchip.cpp b/src/chip/jkchip.cpp +index 0d74707..ae5c6b9 100644 +--- a/src/chip/jkchip.cpp ++++ b/src/chip/jkchip.cpp +@@ -34,7 +34,7 @@ JKChip::JKChip() + mOutputPinA.set(3.5, 0.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(3.5, 1.25, this, "Inverted output"); +- mTexture = load_texture("data/jk.png"); ++ mTexture = load_texture(DATADIR "/jk.png"); + mOldState = 0; + + mInputPinA.mReadOnly = 1; +diff --git a/src/chip/jkflipflop.cpp b/src/chip/jkflipflop.cpp +index aefe8ad..9c59147 100644 +--- a/src/chip/jkflipflop.cpp ++++ b/src/chip/jkflipflop.cpp +@@ -42,7 +42,7 @@ JKFlipFlop::JKFlipFlop() + mOutputPinA.set(4.5, 1.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(4.5, 3.25, this, "Inverted output"); +- mTexture = load_texture("data/jk_flipflop.png"); ++ mTexture = load_texture(DATADIR "/jk_flipflop.png"); + mState = 0; + mClock = 0; + +diff --git a/src/chip/ledchip.cpp b/src/chip/ledchip.cpp +index 6e0b6d5..6de6e4a 100644 +--- a/src/chip/ledchip.cpp ++++ b/src/chip/ledchip.cpp +@@ -31,8 +31,8 @@ LEDChip::LEDChip(int aColor, int aInverse) + set(0, 0, 1, 2.5, NULL); + mPin.push_back(&mInputPin); + mInputPin.set((mW-0.5)/2, mH-0.5, this, mInverse?"Input#":"Input"); +- mBaseTexture = load_texture("data/led.png"); +- mFlareTexture = load_texture("data/flare.png"); ++ mBaseTexture = load_texture(DATADIR "/led.png"); ++ mFlareTexture = load_texture(DATADIR "/flare.png"); + mInverse = aInverse; + + mInputPin.mReadOnly = 1; +diff --git a/src/chip/ledgrid.cpp b/src/chip/ledgrid.cpp +index 015ce02..ddf83e6 100644 +--- a/src/chip/ledgrid.cpp ++++ b/src/chip/ledgrid.cpp +@@ -55,8 +55,8 @@ LedGrid::LedGrid(int aSize, int aColor, int aInverse) + mInputPin[i+mSize].set(mSize, (mSize - i - 1) * step + ypos,this,mPinDescription[i+mSize]); + } + +- mBaseTexture = load_texture("data/ledgrid_base.png"); +- mLitTexture = load_texture("data/ledgrid_lit.png"); ++ mBaseTexture = load_texture(DATADIR "/ledgrid_base.png"); ++ mLitTexture = load_texture(DATADIR "/ledgrid_lit.png"); + + for (i = 0; i < mSize * 2; i++) + mInputPin[i].mReadOnly = 1; +diff --git a/src/chip/logicprobe.cpp b/src/chip/logicprobe.cpp +index 14980fe..236b799 100644 +--- a/src/chip/logicprobe.cpp ++++ b/src/chip/logicprobe.cpp +@@ -53,7 +53,7 @@ LogicProbe::LogicProbe() + mPin.push_back(&mInputPin[0]); + mInputPin[0].set(0, ypos, this, "Bit 0"); ypos += 0.56; + +- mTexture = load_texture("data/lcd.png"); ++ mTexture = load_texture(DATADIR "/lcd.png"); + mPlayhead = 0; + mState = 1; + mLastTick = 0; +diff --git a/src/chip/muxchip.cpp b/src/chip/muxchip.cpp +index 2249450..df9b22f 100644 +--- a/src/chip/muxchip.cpp ++++ b/src/chip/muxchip.cpp +@@ -45,7 +45,7 @@ MuxChip::MuxChip() + mOutputPinA.set(4.5, 1.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(4.5, 3.25, this, "Inverted output"); +- mTexture = load_texture("data/mux.png"); ++ mTexture = load_texture(DATADIR "/mux.png"); + + mInputPin[0].mReadOnly = 1; + mInputPin[1].mReadOnly = 1; +diff --git a/src/chip/nand3chip.cpp b/src/chip/nand3chip.cpp +index e7c5e68..b315388 100644 +--- a/src/chip/nand3chip.cpp ++++ b/src/chip/nand3chip.cpp +@@ -35,9 +35,9 @@ NAND3Chip::NAND3Chip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/nand3_us.png"); ++ mTexture = load_texture(DATADIR "/nand3_us.png"); + else +- mTexture = load_texture("data/nand3_fi.png"); ++ mTexture = load_texture(DATADIR "/nand3_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/nand8chip.cpp b/src/chip/nand8chip.cpp +index a970750..09d9816 100644 +--- a/src/chip/nand8chip.cpp ++++ b/src/chip/nand8chip.cpp +@@ -49,9 +49,9 @@ NAND8Chip::NAND8Chip(int aUS) + mInputPin[7].set(0, ypos, this, "Input H"); + mOutputPin.set(3.5, 1.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/nand8_us.png"); ++ mTexture = load_texture(DATADIR "/nand8_us.png"); + else +- mTexture = load_texture("data/nand8_fi.png"); ++ mTexture = load_texture(DATADIR "/nand8_fi.png"); + + int i; + for (i = 0; i < 8; i++) +diff --git a/src/chip/nandchip.cpp b/src/chip/nandchip.cpp +index 3f46a9a..476593a 100644 +--- a/src/chip/nandchip.cpp ++++ b/src/chip/nandchip.cpp +@@ -33,9 +33,9 @@ NANDChip::NANDChip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/nand_us.png"); ++ mTexture = load_texture(DATADIR "/nand_us.png"); + else +- mTexture = load_texture("data/nand_fi.png"); ++ mTexture = load_texture(DATADIR "/nand_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/nor3chip.cpp b/src/chip/nor3chip.cpp +index 4544d75..68013ae 100644 +--- a/src/chip/nor3chip.cpp ++++ b/src/chip/nor3chip.cpp +@@ -35,9 +35,9 @@ NOR3Chip::NOR3Chip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/nor3_us.png"); ++ mTexture = load_texture(DATADIR "/nor3_us.png"); + else +- mTexture = load_texture("data/nor3_fi.png"); ++ mTexture = load_texture(DATADIR "/nor3_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/nor8chip.cpp b/src/chip/nor8chip.cpp +index 9b453f9..fa4e5d4 100644 +--- a/src/chip/nor8chip.cpp ++++ b/src/chip/nor8chip.cpp +@@ -49,9 +49,9 @@ NOR8Chip::NOR8Chip(int aUS) + mInputPin[7].set(0, ypos, this, "Input H"); + mOutputPin.set(3.5, 1.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/nor8_us.png"); ++ mTexture = load_texture(DATADIR "/nor8_us.png"); + else +- mTexture = load_texture("data/nor8_fi.png"); ++ mTexture = load_texture(DATADIR "/nor8_fi.png"); + + int i; + for (i = 0; i < 8; i++) +diff --git a/src/chip/norchip.cpp b/src/chip/norchip.cpp +index b35964b..65cc164 100644 +--- a/src/chip/norchip.cpp ++++ b/src/chip/norchip.cpp +@@ -33,9 +33,9 @@ NORChip::NORChip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/nor_us.png"); ++ mTexture = load_texture(DATADIR "/nor_us.png"); + else +- mTexture = load_texture("data/nor_fi.png"); ++ mTexture = load_texture(DATADIR "/nor_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/notchip.cpp b/src/chip/notchip.cpp +index 3302c8f..c4cb950 100644 +--- a/src/chip/notchip.cpp ++++ b/src/chip/notchip.cpp +@@ -31,9 +31,9 @@ NOTChip::NOTChip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/not_us.png"); ++ mTexture = load_texture(DATADIR "/not_us.png"); + else +- mTexture = load_texture("data/not_fi.png"); ++ mTexture = load_texture(DATADIR "/not_fi.png"); + + mInputPin.mReadOnly = 1; + } +diff --git a/src/chip/or3chip.cpp b/src/chip/or3chip.cpp +index 636e817..3b3cb02 100644 +--- a/src/chip/or3chip.cpp ++++ b/src/chip/or3chip.cpp +@@ -35,9 +35,9 @@ OR3Chip::OR3Chip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/or3_us.png"); ++ mTexture = load_texture(DATADIR "/or3_us.png"); + else +- mTexture = load_texture("data/or3_fi.png"); ++ mTexture = load_texture(DATADIR "/or3_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/or8chip.cpp b/src/chip/or8chip.cpp +index 0f95d13..da26e3e 100644 +--- a/src/chip/or8chip.cpp ++++ b/src/chip/or8chip.cpp +@@ -49,9 +49,9 @@ OR8Chip::OR8Chip(int aUS) + mInputPin[7].set(0, ypos, this, "Input H"); + mOutputPin.set(3.5, 1.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/or8_us.png"); ++ mTexture = load_texture(DATADIR "/or8_us.png"); + else +- mTexture = load_texture("data/or8_fi.png"); ++ mTexture = load_texture(DATADIR "/or8_fi.png"); + + int i; + for (i = 0; i < 8; i++) +diff --git a/src/chip/orchip.cpp b/src/chip/orchip.cpp +index 15ae73f..fc32456 100644 +--- a/src/chip/orchip.cpp ++++ b/src/chip/orchip.cpp +@@ -33,9 +33,9 @@ ORChip::ORChip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/or_us.png"); ++ mTexture = load_texture(DATADIR "/or_us.png"); + else +- mTexture = load_texture("data/or_fi.png"); ++ mTexture = load_texture(DATADIR "/or_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/sedchip.cpp b/src/chip/sedchip.cpp +index 9f229e9..1298a9e 100644 +--- a/src/chip/sedchip.cpp ++++ b/src/chip/sedchip.cpp +@@ -30,8 +30,8 @@ SEDChip::SEDChip() + set(0, 0, 1, 2.5, "Smoke Emitting Diode"); + mPin.push_back(&mInputPin); + mInputPin.set((mW-0.5)/2, mH-0.5, this, "Input"); +- mBaseTexture = load_texture("data/sed.png"); +- mFlareTexture = load_texture("data/sedr.png"); ++ mBaseTexture = load_texture(DATADIR "/sed.png"); ++ mFlareTexture = load_texture(DATADIR "/sedr.png"); + for (i = 0; i < 32; i++) + mParticle[i].live = 0; + +diff --git a/src/chip/serchip.cpp b/src/chip/serchip.cpp +index 40b9032..cb2d421 100644 +--- a/src/chip/serchip.cpp ++++ b/src/chip/serchip.cpp +@@ -36,7 +36,7 @@ SERChip::SERChip() + mOutputPinA.set(3.5, 0.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(3.5, 1.25, this, "Inverted output"); +- mTexture = load_texture("data/ser.png"); ++ mTexture = load_texture(DATADIR "/ser.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/chip/srchip.cpp b/src/chip/srchip.cpp +index 5cc3e0d..13caa19 100644 +--- a/src/chip/srchip.cpp ++++ b/src/chip/srchip.cpp +@@ -34,7 +34,7 @@ SRChip::SRChip() + mOutputPinA.set(3.5, 0.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(3.5, 1.25, this, "Inverted output"); +- mTexture = load_texture("data/sr.png"); ++ mTexture = load_texture(DATADIR "/sr.png"); + mOldState = 0; + + mInputPinA.mReadOnly = 1; +diff --git a/src/chip/srflipflop.cpp b/src/chip/srflipflop.cpp +index 1507295..db0e426 100644 +--- a/src/chip/srflipflop.cpp ++++ b/src/chip/srflipflop.cpp +@@ -37,7 +37,7 @@ SRFlipFlop::SRFlipFlop() + mOutputPinA.set(4.5, 1.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(4.5, 3.25, this, "Inverted output"); +- mTexture = load_texture("data/sr_flipflop.png"); ++ mTexture = load_texture(DATADIR "/sr_flipflop.png"); + mState = 0; + mClock = 0; + +diff --git a/src/chip/srnegchip.cpp b/src/chip/srnegchip.cpp +index d6264f7..a025cef 100644 +--- a/src/chip/srnegchip.cpp ++++ b/src/chip/srnegchip.cpp +@@ -34,7 +34,7 @@ SRNegChip::SRNegChip() + mOutputPinA.set(3.5, 0.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(3.5, 1.25, this, "Inverted output"); +- mTexture = load_texture("data/sr_neg.png"); ++ mTexture = load_texture(DATADIR "/sr_neg.png"); + mOldState = 0; + + mInputPinA.mReadOnly = 1; +diff --git a/src/chip/staticlevelchip.cpp b/src/chip/staticlevelchip.cpp +index 212a2b3..22f93cb 100644 +--- a/src/chip/staticlevelchip.cpp ++++ b/src/chip/staticlevelchip.cpp +@@ -31,12 +31,12 @@ StaticLevelChip::StaticLevelChip(int aLevel) + if (aLevel) + { + mOutputPin.set(0.75, 1.5, this, "Output"); +- mTexture = load_texture("data/vcc.png"); ++ mTexture = load_texture(DATADIR "/vcc.png"); + } + else + { + mOutputPin.set(0.75, 0, this, "Output"); +- mTexture = load_texture("data/gnd.png"); ++ mTexture = load_texture(DATADIR "/gnd.png"); + } + } + +diff --git a/src/chip/stepper.cpp b/src/chip/stepper.cpp +index ca26e3b..1f12d9d 100644 +--- a/src/chip/stepper.cpp ++++ b/src/chip/stepper.cpp +@@ -57,7 +57,7 @@ StepperMotor::StepperMotor(int aMode) + + mCurrentBits = 3; + mCurrentAngle = 0; +- mTexture = load_texture("data/stepper.png"); ++ mTexture = load_texture(DATADIR "/stepper.png"); + } + + void drawarrow(float x, float y, float angle, int color) +diff --git a/src/chip/switchchip.cpp b/src/chip/switchchip.cpp +index d2a024d..838f0c9 100644 +--- a/src/chip/switchchip.cpp ++++ b/src/chip/switchchip.cpp +@@ -29,7 +29,7 @@ SwitchChip::SwitchChip(int aCharacter) + set(0,0,2,2.5,NULL); + mPin.push_back(&mOutputPin); + mOutputPin.set(0.75, 1.9, this, "Output"); +- mTexture = load_texture("data/switch.png"); ++ mTexture = load_texture(DATADIR "/switch.png"); + mPressed = 0; + mSwitchedOn = 0; + } +diff --git a/src/chip/tchip.cpp b/src/chip/tchip.cpp +index 2525e89..509e92f 100644 +--- a/src/chip/tchip.cpp ++++ b/src/chip/tchip.cpp +@@ -34,7 +34,7 @@ TChip::TChip() + mOutputPinA.set(3.5, 0.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(3.5, 1.25, this, "Inverted output"); +- mTexture = load_texture("data/t.png"); ++ mTexture = load_texture(DATADIR "/t.png"); + mOldState = 0; + + mInputPinA.mReadOnly = 1; +diff --git a/src/chip/tflipflop.cpp b/src/chip/tflipflop.cpp +index 4ec3293..958d5e6 100644 +--- a/src/chip/tflipflop.cpp ++++ b/src/chip/tflipflop.cpp +@@ -40,7 +40,7 @@ TFlipFlop::TFlipFlop() + mOutputPinA.set(4.5, 1.25, this, "Output"); + mPin.push_back(&mOutputPinB); + mOutputPinB.set(4.5, 3.25, this, "Inverted output"); +- mTexture = load_texture("data/t_flipflop.png"); ++ mTexture = load_texture(DATADIR "/t_flipflop.png"); + mState = 0; + mClock = 0; + +diff --git a/src/chip/xorchip.cpp b/src/chip/xorchip.cpp +index e072a3a..80269f0 100644 +--- a/src/chip/xorchip.cpp ++++ b/src/chip/xorchip.cpp +@@ -33,9 +33,9 @@ XORChip::XORChip(int aUS) + mPin.push_back(&mOutputPin); + mOutputPin.set(3.5, 0.75, this, "Output"); + if (aUS) +- mTexture = load_texture("data/xor_us.png"); ++ mTexture = load_texture(DATADIR "/xor_us.png"); + else +- mTexture = load_texture("data/xor_fi.png"); ++ mTexture = load_texture(DATADIR "/xor_fi.png"); + + mInputPinA.mReadOnly = 1; + mInputPinB.mReadOnly = 1; +diff --git a/src/core/main.cpp b/src/core/main.cpp +index a92d2bc..f6833fe 100644 +--- a/src/core/main.cpp ++++ b/src/core/main.cpp +@@ -1760,12 +1760,12 @@ int main(int argc, char** args) + // For imgui - Enable keyboard UNICODE processing for the text field. + SDL_EnableUNICODE(1); + +- fn.load("data/vera31.fnt"); +- fn14.load("data/vera14.fnt"); ++ fn.load(DATADIR "/vera31.fnt"); ++ fn14.load(DATADIR "/vera14.fnt"); + + #ifndef __APPLE__ // Use the higher-resolution OSX icon instead + int x, y, n; +- unsigned char *data = stbi_load("data/icon.png", &x, &y, &n, 4); ++ unsigned char *data = stbi_load(DATADIR "/icon.png", &x, &y, &n, 4); + if (data) + { + SDL_Surface *icon = SDL_CreateRGBSurfaceFrom(data,x,y,32,x*4,0x000000ff,0x0000ff00, 0x00ff0000, 0xff000000); +@@ -1779,9 +1779,9 @@ int main(int argc, char** args) + + if (gConfig.mCustomCursors) + { +- cursor_drag = load_cursor("data/cursor_drag.png", 10, 0); +- cursor_scissors = load_cursor("data/cursor_scissors.png", 6, 6); +- cursor_normal = load_cursor("data/cursor_ptr.png", 0, 0); ++ cursor_drag = load_cursor(DATADIR "/cursor_drag.png", 10, 0); ++ cursor_scissors = load_cursor(DATADIR "/cursor_scissors.png", 6, 6); ++ cursor_normal = load_cursor(DATADIR "/cursor_ptr.png", 0, 0); + SDL_SetCursor(cursor_normal); + } + +diff --git a/src/include/atanua.h b/src/include/atanua.h +index a80e879..a0a05ac 100644 +--- a/src/include/atanua.h ++++ b/src/include/atanua.h +@@ -23,6 +23,10 @@ distribution. + #include + #include "toolkit.h" + ++#ifndef DATADIR ++#define DATADIR "data" ++#endif ++ + using namespace std; + + +@@ -214,4 +218,4 @@ extern int gSelectKeyMask; + extern int gCloneKeyMask; + extern int gBlackBackground; + +-char *mystrdup(const char *data); +\ No newline at end of file ++char *mystrdup(const char *data); +-- +2.5.0 + diff --git a/0007-Rename-TiXmlNode-ELEMENT-and-TEXT.patch b/0007-Rename-TiXmlNode-ELEMENT-and-TEXT.patch new file mode 100644 index 0000000..a68fd80 --- /dev/null +++ b/0007-Rename-TiXmlNode-ELEMENT-and-TEXT.patch @@ -0,0 +1,193 @@ +From 216140bd0109a1c0829f9296b5abd971bee263c7 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Sat, 14 Nov 2015 18:19:33 +0100 +Subject: [PATCH 7/7] Rename TiXmlNode::ELEMENT and ::TEXT + +Tinyxml 2.6 renamed it and this fixes build against that version +available system-wide. We could update the in-tre version as well, but +this seems like a lesser effort. +--- + src/core/AtanuaConfig.cpp | 4 ++-- + src/core/fileio.cpp | 12 ++++++------ + src/core/pluginchipfactory.cpp | 4 ++-- + src/tinyxml_2_5_3/tinyxml/tinyxml.cpp | 6 +++--- + src/tinyxml_2_5_3/tinyxml/tinyxml.h | 10 +++++----- + 5 files changed, 18 insertions(+), 18 deletions(-) + +diff --git a/src/core/AtanuaConfig.cpp b/src/core/AtanuaConfig.cpp +index dd7d64f..acc5d83 100644 +--- a/src/core/AtanuaConfig.cpp ++++ b/src/core/AtanuaConfig.cpp +@@ -191,14 +191,14 @@ void AtanuaConfig::load() + TiXmlNode *root; + for (root = doc.FirstChild(); root != 0; root = root->NextSibling()) + { +- if (root->Type() == TiXmlNode::ELEMENT) ++ if (root->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(root->Value(), "AtanuaConfig")==0) + { + TiXmlNode *part; + for (part = root->FirstChild(); part != 0; part = part->NextSibling()) + { +- if (part->Type() == TiXmlNode::ELEMENT) ++ if (part->Type() == TiXmlNode::TINYXML_ELEMENT) + { + + if (stricmp(part->Value(), "FontSystem") == 0) +diff --git a/src/core/fileio.cpp b/src/core/fileio.cpp +index a5866f8..d37bd9a 100644 +--- a/src/core/fileio.cpp ++++ b/src/core/fileio.cpp +@@ -327,7 +327,7 @@ void do_loadxml(FILE * f, int box) + + for (pChild = doc.FirstChild(); pChild != 0; pChild = pChild->NextSibling()) + { +- if (pChild->Type() == TiXmlNode::ELEMENT) ++ if (pChild->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(pChild->Value(), "Atanua") == 0) + { +@@ -338,7 +338,7 @@ void do_loadxml(FILE * f, int box) + TiXmlNode *part; + for (part = pChild->FirstChild(); part != 0; part = part->NextSibling()) + { +- if (part->Type() == TiXmlNode::ELEMENT) ++ if (part->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(part->Value(), "Chip")==0) + { +@@ -421,7 +421,7 @@ void do_loadxml(FILE * f, int box) + TiXmlNode *text; + for (text = part->FirstChild(); text != 0; text = text->NextSibling()) + { +- if (text->Type() == TiXmlNode::TEXT) ++ if (text->Type() == TiXmlNode::TINYXML_TEXT) + { + + MemoryFile f; +@@ -731,7 +731,7 @@ void do_loadxmltobinary(FILE * f, File * outf, BoxcacheData * bd) + + for (pChild = doc.FirstChild(); pChild != 0; pChild = pChild->NextSibling()) + { +- if (pChild->Type() == TiXmlNode::ELEMENT) ++ if (pChild->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(pChild->Value(), "Atanua") == 0) + { +@@ -751,7 +751,7 @@ void do_loadxmltobinary(FILE * f, File * outf, BoxcacheData * bd) + TiXmlNode *part; + for (part = pChild->FirstChild(); part != 0; part = part->NextSibling()) + { +- if (part->Type() == TiXmlNode::ELEMENT) ++ if (part->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(part->Value(), "Chip")==0) + { +@@ -832,7 +832,7 @@ void do_loadxmltobinary(FILE * f, File * outf, BoxcacheData * bd) + TiXmlNode *text; + for (text = part->FirstChild(); text != 0; text = text->NextSibling()) + { +- if (text->Type() == TiXmlNode::TEXT) ++ if (text->Type() == TiXmlNode::TINYXML_TEXT) + { + const char *v = text->Value(); + int wholebyte = 0; +diff --git a/src/core/pluginchipfactory.cpp b/src/core/pluginchipfactory.cpp +index 01a9192..5e7ee32 100644 +--- a/src/core/pluginchipfactory.cpp ++++ b/src/core/pluginchipfactory.cpp +@@ -44,14 +44,14 @@ PluginChipFactory::PluginChipFactory() + TiXmlNode *root; + for (root = doc.FirstChild(); root != 0; root = root->NextSibling()) + { +- if (root->Type() == TiXmlNode::ELEMENT) ++ if (root->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(root->Value(), "AtanuaConfig")==0) + { + TiXmlNode *part; + for (part = root->FirstChild(); part != 0; part = part->NextSibling()) + { +- if (part->Type() == TiXmlNode::ELEMENT) ++ if (part->Type() == TiXmlNode::TINYXML_ELEMENT) + { + if (stricmp(part->Value(), "Plugin") == 0) + { +diff --git a/src/tinyxml_2_5_3/tinyxml/tinyxml.cpp b/src/tinyxml_2_5_3/tinyxml/tinyxml.cpp +index 5de21f6..09e9686 100644 +--- a/src/tinyxml_2_5_3/tinyxml/tinyxml.cpp ++++ b/src/tinyxml_2_5_3/tinyxml/tinyxml.cpp +@@ -502,7 +502,7 @@ const TiXmlDocument* TiXmlNode::GetDocument() const + + + TiXmlElement::TiXmlElement (const char * _value) +- : TiXmlNode( TiXmlNode::ELEMENT ) ++ : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) + { + firstChild = lastChild = 0; + value = _value; +@@ -511,7 +511,7 @@ TiXmlElement::TiXmlElement (const char * _value) + + #ifdef TIXML_USE_STL + TiXmlElement::TiXmlElement( const std::string& _value ) +- : TiXmlNode( TiXmlNode::ELEMENT ) ++ : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) + { + firstChild = lastChild = 0; + value = _value; +@@ -520,7 +520,7 @@ TiXmlElement::TiXmlElement( const std::string& _value ) + + + TiXmlElement::TiXmlElement( const TiXmlElement& copy) +- : TiXmlNode( TiXmlNode::ELEMENT ) ++ : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) + { + firstChild = lastChild = 0; + copy.CopyTo( this ); +diff --git a/src/tinyxml_2_5_3/tinyxml/tinyxml.h b/src/tinyxml_2_5_3/tinyxml/tinyxml.h +index c6f40cc..2f9e25e 100644 +--- a/src/tinyxml_2_5_3/tinyxml/tinyxml.h ++++ b/src/tinyxml_2_5_3/tinyxml/tinyxml.h +@@ -463,10 +463,10 @@ public: + enum NodeType + { + DOCUMENT, +- ELEMENT, ++ TINYXML_ELEMENT, + COMMENT, + UNKNOWN, +- TEXT, ++ TINYXML_TEXT, + DECLARATION, + TYPECOUNT + }; +@@ -1209,7 +1209,7 @@ public: + normal, encoded text. If you want it be output as a CDATA text + element, set the parameter _cdata to 'true' + */ +- TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TEXT) ++ TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; +@@ -1218,14 +1218,14 @@ public: + + #ifdef TIXML_USE_STL + /// Constructor. +- TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT) ++ TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + #endif + +- TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TEXT ) { copy.CopyTo( this ); } ++ TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } + void operator=( const TiXmlText& base ) { base.CopyTo( this ); } + + // Write this text object to a FILE stream. +-- +2.5.0 + diff --git a/atanua-fix-build.patch b/atanua-fix-build.patch new file mode 100644 index 0000000..9f87dfb --- /dev/null +++ b/atanua-fix-build.patch @@ -0,0 +1,14 @@ +diff --git a/src/core/main.cpp b/src/core/main.cpp +index f6833fe..c81bde3 100644 +--- a/src/core/main.cpp ++++ b/src/core/main.cpp +@@ -27,7 +27,8 @@ distribution. + #include "basechipfactory.h" + #include "pluginchipfactory.h" + +-#include ++#define STB_IMAGE_WRITE_IMPLEMENTATION ++#include "stb/stb_image_write.h" + + #define C_MENUBG 0xff3f4f4f + #define C_WIDGETBG 0xff3f5f6f diff --git a/atanua.desktop b/atanua.desktop new file mode 100644 index 0000000..8422563 --- /dev/null +++ b/atanua.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Atanua +GenericName=Atanua Logic Simulator +Comment=Real Time Logic Simulator +Exec=atanua %f +Icon=atanua +Terminal=false +Type=Application +Categories=Electronics; +MimeType=application/x-atanua-simulation; diff --git a/atanua.spec b/atanua.spec new file mode 100644 index 0000000..b30e119 --- /dev/null +++ b/atanua.spec @@ -0,0 +1,107 @@ +%global commit 2a58d7fb349de3062dea61b0fb072f8e7370dde6 +%global shortcommit %(c=%{commit}; echo ${c:0:7}) + +Name: atanua +Version: 1.3.141220 +Release: 1%{?dist} +Summary: Real Time Logic Simulator + +Group: Applications/Engineering +License: zlib and Bitstream Vera +# atanua: zlib +# vera fonts: Bitstream Vera +URL: http://sol.gfxile.net/atanua/ +Source0: https://github.com/jarikomppa/atanua/archive/%{commit}/%{name}-%{version}-%{shortcommit}.tar.gz +Source1: http://sol.gfxile.net/zip/atanua141220.zip +Source2: atanua.desktop +Source3: x-atanua-simulation.xml + +# https://github.com/jarikomppa/atanua/pull/4 +Patch1: 0001-Don-t-crash-on-file-open-failures.patch +Patch2: 0002-Check-the-correct-pointer-for-NULL.patch +Patch3: 0003-A-bit-better-error-handling.patch +Patch4: 0004-Fix-Linux-build.patch +Patch5: 0005-Allow-builds-without-bundling-the-libraries.patch +Patch6: 0006-Allow-overriding-the-data-directory-on-build.patch +Patch7: 0007-Rename-TiXmlNode-ELEMENT-and-TEXT.patch +Patch8: atanua-fix-build.patch + +BuildRequires: desktop-file-utils +BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(sdl) +BuildRequires: mesa-libGL-devel +BuildRequires: mesa-libGLU-devel +BuildRequires: tinyxml-devel +BuildRequires: stbi-devel +BuildRequires: GLee-devel +BuildRequires: gcc-c++ + +%description +Atanua is a real-time logic simulator, designed to help in learning of basic +boolean logic and electronics. It uses OpenGL hardware-accelerated rendering +and a custom UI designed for a fast workflow and a very low learning curve, +letting the students concentrate on learning the subject instead of spending +time learning the tool. + + +%prep +%setup -q -n %{name}-%{commit} -a1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 + + +%build +make %{?_smp_mflags} CFLAGS='%{optflags} -DDATADIR=\"%{_datadir}/atanua\"' \ + CC=%{__cc} CXX=%{__cxx} UNBUNDLE=1 + + +%install +install -d %{buildroot}%{_bindir} +install -d %{buildroot}%{_datadir} +install -d %{buildroot}%{_datadir}/mime/packages +install -d %{buildroot}%{_datadir}/pixmaps + +install atanua %{buildroot}%{_bindir} +cp -a data %{buildroot}%{_datadir}/atanua +cp -a data/icon.png %{buildroot}%{_datadir}/pixmaps/atanua.png + +install -pm644 %{SOURCE3} %{buildroot}%{_datadir}/mime/packages/ +desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE2} + + +%post +/bin/touch --no-create %{_datadir}/mime/packages &>/dev/null || : + + +%postun +if [ $1 -eq 0 ] +then + /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : +fi + + +%posttrans +/usr/bin/update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : + + +%files +%{_bindir}/atanua +%{_datadir}/atanua +%{_datadir}/applications/atanua.desktop +%{_datadir}/mime/packages/x-atanua-simulation.xml +%{_datadir}/pixmaps/atanua.png +%doc readme.md +%license LICENSE +%license data/vera_copyright.txt + + +%changelog +* Sat Nov 14 2015 Lubomir Rintel - 1.3.141220-1 +- Initial packaging diff --git a/sources b/sources index e69de29..f9d799c 100644 --- a/sources +++ b/sources @@ -0,0 +1,2 @@ +94e3c3ecc9c74f37fbe385e34bcef4e6 atanua-1.3.141220-2a58d7f.tar.gz +9e4eb19407446a816dbdcd1d23481755 atanua141220.zip diff --git a/x-atanua-simulation.xml b/x-atanua-simulation.xml new file mode 100644 index 0000000..5a5850e --- /dev/null +++ b/x-atanua-simulation.xml @@ -0,0 +1,8 @@ + + + + + Atanua Logic Simulation + + +