From cb3c325e5f8bcb09f390ef7a1af0ef0442fe9462 Mon Sep 17 00:00:00 2001 From: bjarni Date: Sun, 24 Jul 2005 20:47:42 +0000 Subject: [PATCH] (svn r2703) - Feature: [OSX] Added a native alert window to show whatever error() needs to print (Tobin made this, while I fixed some issued in it) - As a bonus, we now have an objective C file (os/macosx/macos.m) to use the functions Apple made to interact with OS stuff --- Makefile | 17 +++++++++++++++-- fileio.c | 4 ++++ os/macosx/macos.h | 6 ++++++ os/macosx/macos.m | 15 +++++++++++++++ unix.c | 11 +++++++---- 5 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 os/macosx/macos.h create mode 100644 os/macosx/macos.m diff --git a/Makefile b/Makefile index 459fe810c3..cea5a31a56 100644 --- a/Makefile +++ b/Makefile @@ -718,6 +718,8 @@ C_SOURCES += video/null_v.c CXX_SOURCES = +OBJC_SOURCES = + ifdef WITH_SDL C_SOURCES += sdl.c C_SOURCES += sound/sdl_s.c @@ -734,7 +736,11 @@ C_SOURCES += unix.c C_SOURCES += music/extmidi.c endif -OBJS = $(C_SOURCES:%.c=%.o) $(CXX_SOURCES:%.cpp=%.o) +ifdef OSX +OBJC_SOURCES += os/macosx/macos.m +endif + +OBJS = $(C_SOURCES:%.c=%.o) $(CXX_SOURCES:%.cpp=%.o) $(OBJC_SOURCES:%.m=%.o) ifdef BEOS CXX_SOURCES += music/bemidi.cpp @@ -795,6 +801,9 @@ quiet_cmd_c_compile = '===> Compiling $<' quiet_cmd_cxx_compile = '===> Compiling $<' cmd_cxx_compile = $(CXX) $(COMPILE_PARAMS) +quiet_cmd_objc_compile = '===> Compiling $<' + cmd_objc_compile = $(CC) $(COMPILE_PARAMS) + ############################################################################## # @@ -1036,7 +1045,7 @@ upgradeconf: $(MAKE_CONFIG) ### Internal build rules # This makes sure the .deps dir is always around. -DEPS_MAGIC := $(shell mkdir -p .deps .deps/music .deps/sound .deps/video) +DEPS_MAGIC := $(shell mkdir -p .deps .deps/music .deps/sound .deps/video .deps/os .deps/os/macosx) # Introduce the dependencies -include $(DEPS) @@ -1054,6 +1063,10 @@ DEPS_MAGIC := $(shell mkdir -p .deps .deps/music .deps/sound .deps/video) $(call cmd,cxx_compile) @mv $(<:%.cpp=%.d) $(<:%.cpp=.deps/%.d) +%.o: %.m $(MAKE_CONFIG) endian_target.h table/strings.h + $(call cmd,objc_compile) + @mv $(<:%.m=%.d) $(<:%.m=.deps/%.d) + # Silence stale header dependencies %.h: @true diff --git a/fileio.c b/fileio.c index a7d141a8b7..25bda0b296 100644 --- a/fileio.c +++ b/fileio.c @@ -165,6 +165,10 @@ void FioOpenFile(int slot, const char *filename) *s = tolower(*s); f = fopen(buf, "rb"); } + + if (f == NULL) + sprintf(buf, "%s%s", _path.data_dir, filename); //makes it print the primary datadir path instead of the secundary one + #endif } #endif diff --git a/os/macosx/macos.h b/os/macosx/macos.h new file mode 100644 index 0000000000..c01bfe84c7 --- /dev/null +++ b/os/macosx/macos.h @@ -0,0 +1,6 @@ +#ifndef MACOS_H +#define MACOS_H + +void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel ); + +#endif /* MACOS_H */ \ No newline at end of file diff --git a/os/macosx/macos.m b/os/macosx/macos.m new file mode 100644 index 0000000000..f09a8d3d4d --- /dev/null +++ b/os/macosx/macos.m @@ -0,0 +1,15 @@ +#include + +/* + * This file contains objective C + * Apple uses objective C instead of plain C to interact with OS specific/native functions + * + * Note: TrueLight's crosscompiler can handle this, but it likely needs a manual modification for each change in this file. + * To insure that the crosscompiler still works, let him try any changes before they are committed + */ + +void ShowMacDialog ( const char *title, const char *message, const char *buttonLabel ) +{ + NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil); +} + diff --git a/unix.c b/unix.c index 6c93ad993d..8a4a533262 100644 --- a/unix.c +++ b/unix.c @@ -53,6 +53,10 @@ ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;) // ULONG __stack = #endif +#if defined(__APPLE__) +#include "os/macosx/macos.h" +#endif + static char *_fios_path; static char *_fios_save_path; static char *_fios_scn_path; @@ -467,10 +471,9 @@ void ShowInfo(const char *str) void ShowOSErrorBox(const char *buf) { #if defined(__APPLE__) - // this creates an error in the console and then opens the console. - // Colourcodes are not used in the console, so they are skipped here - fprintf(stderr, "Error: %s", buf); - system("/Applications/Utilities/Console.app/Contents/MacOS/Console &"); + // this creates an NSAlertPanel with the contents of 'buf' + // this is the native and nicest way to do this on OSX + ShowMacDialog( buf, "See readme for more info\nMost likely you are missing files from the original TTD", "Quit" ); #else // all systems, but OSX fprintf(stderr, "\033[1;31mError: %s\033[0;39m\n", buf);