changeset 2188:8d6b24c1eec7 draft

(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
author bjarni <bjarni@openttd.org>
date Sun, 24 Jul 2005 20:47:42 +0000
parents ec59060e9c43
children c91103115fd1
files Makefile fileio.c os/macosx/macos.h os/macosx/macos.m unix.c
diffstat 5 files changed, 47 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile
+++ b/Makefile
@@ -718,6 +718,8 @@
 
 CXX_SOURCES =
 
+OBJC_SOURCES =
+
 ifdef WITH_SDL
 C_SOURCES += sdl.c
 C_SOURCES += sound/sdl_s.c
@@ -734,7 +736,11 @@
 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_cxx_compile = '===> Compiling $<'
       cmd_cxx_compile = $(CXX) $(COMPILE_PARAMS)
 
+quiet_cmd_objc_compile = '===> Compiling $<'
+      cmd_objc_compile = $(CC) $(COMPILE_PARAMS)
+
 
 ##############################################################################
 #
@@ -1036,7 +1045,7 @@
 ### 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 @@
 	$(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
--- a/fileio.c
+++ b/fileio.c
@@ -165,6 +165,10 @@
 			*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
new file mode 100644
--- /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
new file mode 100644
--- /dev/null
+++ b/os/macosx/macos.m
@@ -0,0 +1,15 @@
+#include <AppKit/AppKit.h>
+
+/*
+ * 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);
+}
+
--- a/unix.c
+++ b/unix.c
@@ -53,6 +53,10 @@
 // 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 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);