diff --git descriptor/writer/image_writer.cc descriptor/writer/image_writer.cc
index 4187e813c..ba2eeb6db 100644
--- descriptor/writer/image_writer.cc
+++ descriptor/writer/image_writer.cc
@@ -13,7 +13,7 @@
#include "obj_pak_exception.h"
#include "../image.h"
#include "../../macros.h"
-#include "../../utils/dr_rdpng.h"
+#include "../../makeobj/dr_rdpng.h"
#include "../../utils/simstring.h"
#include "../../simdebug.h"
diff --git makeobj/Makefile makeobj/Makefile
index 1d3f644d6..8f7566d30 100644
--- makeobj/Makefile
+++ makeobj/Makefile
@@ -105,6 +105,7 @@ CXXFLAGS += -Wall -Wextra -Wcast-qual -Wpointer-arith -Wcast-align $(OS_INC) $(O
# VARIANT_SOURCES contains those which need different .o files for makeobj and simutrans.
# At the moment they're all treated identically, of course.
SOLO_SOURCES += makeobj.cc
+SOLO_SOURCES += dr_rdpng.cc
SOLO_SOURCES += ../descriptor/writer/bridge_writer.cc
SOLO_SOURCES += ../descriptor/writer/building_writer.cc
SOLO_SOURCES += ../descriptor/writer/citycar_writer.cc
@@ -133,7 +134,6 @@ SOLO_SOURCES += ../descriptor/writer/vehicle_writer.cc
SOLO_SOURCES += ../descriptor/writer/way_writer.cc
SOLO_SOURCES += ../descriptor/writer/way_obj_writer.cc
SOLO_SOURCES += ../descriptor/writer/xref_writer.cc
-SOLO_SOURCES += ../utils/dr_rdpng.cc
SHARED_SOURCES += ../descriptor/image.cc
SHARED_SOURCES += ../dataobj/freelist.cc
SHARED_SOURCES += ../simdebug.cc
diff --git makeobj/Makeobj.vcxproj makeobj/Makeobj.vcxproj
index b0b699ea9..f2769a6c8 100644
--- makeobj/Makeobj.vcxproj
+++ makeobj/Makeobj.vcxproj
@@ -80,6 +80,7 @@
+
@@ -113,12 +114,12 @@
-
+
@@ -194,7 +195,6 @@
-
diff --git utils/dr_rdpng.cc makeobj/dr_rdpng.cc
similarity index 68%
rename from utils/dr_rdpng.cc
rename to makeobj/dr_rdpng.cc
index 254b9042c..77f7c60cb 100644
--- utils/dr_rdpng.cc
+++ makeobj/dr_rdpng.cc
@@ -3,25 +3,28 @@
* (see LICENSE.txt)
*/
+#include "dr_rdpng.h"
+
+#include "../simmem.h"
+#include "../simdebug.h"
+
+#include
+#include
+#include
+#include
#include
+
#include
-#include
-#include
-#include
-#include // strerror
+
#ifndef _WIN32
+#include "../utils/simstring.h"
+
#include
#include
-#include "../utils/simstring.h"
#endif
-#include "../simmem.h"
-#include "../simdebug.h"
-#include "dr_rdpng.h"
-
-static std::string filename_;
-static void read_png(unsigned char** block, unsigned* width, unsigned* height, FILE* file, const int base_img_size)
+static void read_png(const char *filename, unsigned char **block, uint32 *width, uint32 *height, FILE *file, const sint32 base_img_size)
{
png_structp png_ptr;
png_infop info_ptr;
@@ -36,20 +39,20 @@ static void read_png(unsigned char** block, unsigned* width, unsigned* height, F
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
if (png_ptr == NULL) {
- dbg->error( "while loading PNG", "Could not create read struct in %s.", filename_.c_str() );
+ dbg->error( "while loading PNG", "Could not create read struct in %s.", filename );
exit(1);
}
info_ptr = png_create_info_struct(png_ptr);
if (info_ptr == NULL) {
- dbg->error( "while loading PNG", "Could not create info struct in %s.", filename_.c_str() );
+ dbg->error( "while loading PNG", "Could not create info struct in %s.", filename );
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
exit(1);
}
#ifdef PNG_SETJMP_SUPPORTED
if( setjmp(png_jmpbuf(png_ptr) )) {
- dbg->error( "while loading PNG", "Fatal error in %s.", filename_.c_str() );
+ dbg->error( "while loading PNG", "Fatal error in %s.", filename );
png_destroy_read_struct(&png_ptr, &info_ptr, (png_info**)0);
exit(1);
}
@@ -69,7 +72,7 @@ static void read_png(unsigned char** block, unsigned* width, unsigned* height, F
*height = heightpu32;
if (*height % base_img_size != 0 || *width % base_img_size != 0) {
- dbg->fatal( "while loading PNG", "Invalid image size in %s.", filename_.c_str() );
+ dbg->fatal( "while loading PNG", "Invalid image size in %s.", filename );
exit(1);
}
@@ -142,11 +145,8 @@ static void read_png(unsigned char** block, unsigned* width, unsigned* height, F
}
-bool load_block(unsigned char** block, unsigned* width, unsigned* height, const char* fname, const int base_img_size)
+bool load_block(unsigned char **block, uint32 *width, uint32 *height, const char *fname, const sint32 base_img_size)
{
- // remember the file name for better error messages.
- filename_ = fname;
-
FILE* file = fopen(fname, "rb");
#ifndef _WIN32
@@ -177,7 +177,7 @@ bool load_block(unsigned char** block, unsigned* width, unsigned* height, const
break;
}
struct dirent * ent = NULL;
- while (ent = readdir(dir)) {
+ while ( (ent = readdir(dir)) != NULL ) {
if (!STRICMP(ent->d_name, name.c_str())) {
actual_path += ent->d_name;
break;
@@ -197,7 +197,7 @@ bool load_block(unsigned char** block, unsigned* width, unsigned* height, const
#endif
if (file) {
- read_png(block, width, height, file, base_img_size);
+ read_png(fname, block, width, height, file, base_img_size);
fclose(file);
return true;
}
@@ -206,73 +206,3 @@ bool load_block(unsigned char** block, unsigned* width, unsigned* height, const
return false;
}
}
-
-
-// output either a 32 or 16 or 15 bitmap
-int write_png( const char *file_name, unsigned char *data, int width, int height, int bit_depth )
-{
- // remember the file name for better error messages.
- filename_ = file_name;
-
- png_structp png_ptr = NULL;
- png_infop info_ptr = NULL;
- FILE *fp = fopen(file_name, "wb");
- if (!fp) {
- return 0;
- }
-
- // init structures
- png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- if (!png_ptr) {
- fclose( fp );
- return 0;
- }
-
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr) {
- png_destroy_write_struct( &png_ptr, (png_infopp)NULL );
- fclose( fp );
- return 0;
- }
-
-#ifdef PNG_SETJMP_SUPPORTED
- if( setjmp( png_jmpbuf(png_ptr) ) ) {
- dbg->error( "write_png", "fatal error");
- png_destroy_write_struct(&png_ptr, &info_ptr);
- exit(1);
- }
-#endif
-
- // assign file
- png_init_io(png_ptr, fp);
-
-#if PNG_LIBPNG_VER_MAJOR<=1 && PNG_LIBPNG_VER_MINOR<5
- /* set the zlib compression level */
- png_set_compression_level( png_ptr, Z_BEST_COMPRESSION );
-#endif
-
- // output header
- png_set_IHDR( png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_INTERLACE_NONE, PNG_FILTER_TYPE_DEFAULT );
- png_write_info(png_ptr, info_ptr);
-
- if( bit_depth==32 ) {
- // write image data
- int i;
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
- for( i=0; ifatal( "write_png", "32 bit not supported!" );
- exit(0);
- }
-
- // free all
- png_write_end(png_ptr, info_ptr);
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
- fclose( fp );
- return 1;
-}
diff --git makeobj/dr_rdpng.h makeobj/dr_rdpng.h
new file mode 100644
index 000000000..2ba263494
--- /dev/null
+++ makeobj/dr_rdpng.h
@@ -0,0 +1,16 @@
+/*
+ * This file is part of the Simutrans project under the Artistic License.
+ * (see LICENSE.txt)
+ */
+
+#ifndef MAKEOBJ_DR_RDPNG_H
+#define MAKEOBJ_DR_RDPNG_H
+
+
+#include "../simtypes.h"
+
+
+bool load_block(unsigned char **block, uint32 *width, uint32 *height, const char *fname, const sint32 base_img_size);
+
+
+#endif
diff --git utils/dr_rdpng.h utils/dr_rdpng.h
deleted file mode 100644
index 7c935f6a0..000000000
--- utils/dr_rdpng.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * This file is part of the Simutrans project under the Artistic License.
- * (see LICENSE.txt)
- */
-
-#ifndef UTILS_DR_RDPNG_H
-#define UTILS_DR_RDPNG_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-bool load_block(unsigned char** block, unsigned* width, unsigned* height, const char* fname, const int base_img_size);
-
-// output either a 32 (or 16 or 15 bitmap in future ...)
-int write_png( const char *file_name, unsigned char *data, int width, int height, int bit_depth );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif