--- /dev/null
+diff -P'aurx.*' git-1.2.4/gestalt.c git-chimara/gestalt.c
+--- git-1.2.4/gestalt.c 2009-04-03 00:54:50.000000000 +0200
++++ git-chimara/gestalt.c 2009-10-07 23:43:28.000000000 +0200
+@@ -5,7 +5,7 @@
+ switch (sel)
+ {
+ case GESTALT_SPEC_VERSION:
+- return 0x00030100;
++ return 0x00030101;
+
+ case GESTALT_TERP_VERSION:
+ return GIT_VERSION_NUM;
+Only in git-1.2.4: git_mac.c
+diff -P'aurx.*' git-1.2.4/git_unix.c git-chimara/git_unix.c
+--- git-1.2.4/git_unix.c 2009-04-03 00:54:50.000000000 +0200
++++ git-chimara/git_unix.c 2009-10-07 23:59:58.000000000 +0200
+@@ -25,23 +25,47 @@
+ #define CACHE_SIZE (256 * 1024L)
+ #define UNDO_SIZE (512 * 1024L)
+
++int gHasInited = 0;
++
++#ifdef CHIMARA_EXTENSIONS
++
++void fatalError (const char * s)
++{
++ winid_t win;
++ if (!gHasInited)
++ {
++ win = glk_window_open(0, 0, 0, wintype_TextBuffer, 0);
++ glk_set_window(win);
++ }
++ /* pray that this goes somewhere reasonable... */
++ glk_put_string("\n*** fatal error: ");
++ glk_put_string((char*)s);
++ glk_put_string(" ***\n");
++ glk_exit();
++}
++
++#else
++
+ void fatalError (const char * s)
+ {
+ fprintf (stderr, "*** fatal error: %s ***\n", s);
+ exit (1);
+ }
+
++#endif /* CHIMARA_EXTENSIONS */
++
+ #ifdef USE_MMAP
+ // Fast loader that uses some fancy Unix features.
+
+ const char * gFilename = 0;
++char * gStartupError = 0;
+
+ int glkunix_startup_code(glkunix_startup_t *data)
+ {
+ if (data->argc <= 1)
+ {
+- printf ("usage: git gamefile.ulx\n");
+- return 0;
++ gStartupError = "No file given";
++ return 1;
+ }
+ gFilename = data->argv[1];
+ return 1;
+@@ -52,7 +76,10 @@
+ int file;
+ struct stat info;
+ const char * ptr;
+-
++
++ if (gStartupError)
++ fatalError(gStartupError);
++
+ file = open (gFilename, O_RDONLY);
+ if (file < 0)
+ goto error;
+@@ -61,35 +88,35 @@
+ goto error;
+
+ if (info.st_size < 256)
+- {
+- fprintf (stderr, "This is too small to be a glulx file.\n");
+- exit (1);
+- }
++ fatalError("This is too small to be a glulx file.");
+
+ ptr = mmap (NULL, info.st_size, PROT_READ, MAP_PRIVATE, file, 0);
+ if (ptr == MAP_FAILED)
+ goto error;
++
++ gHasInited = 1;
+
+ git (ptr, info.st_size, CACHE_SIZE, UNDO_SIZE);
+ munmap ((void*) ptr, info.st_size);
+ return;
+
+ error:
+- perror ("git");
+- exit (errno);
++ sprintf(errmsg, "git: %s", strerror(errno));
++ fatalError(errmsg);
+ }
+
+ #else
+ // Generic loader that should work anywhere.
+
+ strid_t gStream = 0;
++char * gStartupError = 0;
+
+ int glkunix_startup_code(glkunix_startup_t *data)
+ {
+ if (data->argc <= 1)
+ {
+- printf ("usage: git gamefile.ulx\n");
+- return 0;
++ gStartupError = "No file given";
++ return 1;
+ }
+ gStream = glkunix_stream_open_pathname ((char*) data->argv[1], 0, 0);
+ return 1;
+@@ -97,9 +124,14 @@
+
+ void glk_main ()
+ {
++ if (gStartupError)
++ fatalError(gStartupError);
++
+ if (gStream == NULL)
+ fatalError ("could not open game file");
+
++ gHasInited = 1;
++
+ gitWithStream (gStream, CACHE_SIZE, UNDO_SIZE);
+ }
+
+Only in git-1.2.4: git_windows.c
+Only in git-1.2.4: Makefile
+diff -P'aurx.*' git-1.2.4/Makefile.am git-chimara/Makefile.am
+--- git-1.2.4/Makefile.am 1970-01-01 01:00:00.000000000 +0100
++++ git-chimara/Makefile.am 2009-10-07 23:59:34.000000000 +0200
+@@ -0,0 +1,48 @@
++PLUGIN_LIBTOOL_FLAGS=-module -avoid-version -export-symbols-regex "^glk"
++
++# Automatically generate version.h
++MAJOR = 1
++MINOR = 2
++PATCH = 4
++version.h: Makefile
++ echo "// Automatically generated file -- do not edit!" > version.h
++ echo "#define GIT_MAJOR" $(MAJOR) >> version.h
++ echo "#define GIT_MINOR" $(MINOR) >> version.h
++ echo "#define GIT_PATCH" $(PATCH) >> version.h
++
++pkglib_LTLIBRARIES = git.la
++BUILT_SOURCES = version.h
++git_la_SOURCES = version.h git.h config.h compiler.h memory.h opcodes.h \
++ labels.inc compiler.c gestalt.c git.c git_unix.c glkop.c heap.c memory.c \
++ opcodes.c operands.c peephole.c savefile.c saveundo.c search.c terp.c \
++ accel.c
++git_la_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libchimara
++git_la_CFLAGS = -DCHIMARA_EXTENSIONS -DUSE_INLINE $(AM_CFLAGS)
++git_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
++
++gitdocdir = $(datadir)/doc/$(PACKAGE)/git
++dist_gitdoc_DATA = README.txt
++
++CLEANFILES = test/*.tmp
++
++#TESTS = test/test.sh \
++# test/Alabaster.gblorb test/Alabaster.walk test/Alabaster.golden
++#
++#test: git
++# sh test/test.sh
++
++# Memory mapping (-DUSE_MMAP) doesn't seem to work... FIXME
++
++# Best settings for GCC 2.95. This generates faster code than
++# GCC 3, so you should use this setup if possible.
++#CC = gcc -Wall -O3
++#OPTIONS = -DUSE_DIRECT_THREADING -DUSE_MMAP -DUSE_INLINE
++#
++# Best settings for GCC 3. The optimiser in this version of GCC
++# is somewhat broken, so we can't use USE_DIRECT_THREADING.
++#CC = gcc -Wall -O3
++#OPTIONS = -DUSE_MMAP -DUSE_INLINE
++#
++# Mac OS X (PowerPC) settings.
++#CC = gcc2 -Wall -O3 -no-cpp-precomp
++#OPTIONS = -DUSE_DIRECT_THREADING -DUSE_BIG_ENDIAN_UNALIGNED -DUSE_MMAP -DUSE_INLINE
+Only in git-1.2.4: Makefile.win
+Only in git-1.2.4: win
#define CACHE_SIZE (256 * 1024L)
#define UNDO_SIZE (512 * 1024L)
+int gHasInited = 0;
+
+#ifdef CHIMARA_EXTENSIONS
+
+void fatalError (const char * s)
+{
+ winid_t win;
+ if (!gHasInited)
+ {
+ win = glk_window_open(0, 0, 0, wintype_TextBuffer, 0);
+ glk_set_window(win);
+ }
+ /* pray that this goes somewhere reasonable... */
+ glk_put_string("\n*** fatal error: ");
+ glk_put_string((char*)s);
+ glk_put_string(" ***\n");
+ glk_exit();
+}
+
+#else
+
void fatalError (const char * s)
{
fprintf (stderr, "*** fatal error: %s ***\n", s);
exit (1);
}
+#endif /* CHIMARA_EXTENSIONS */
+
#ifdef USE_MMAP
// Fast loader that uses some fancy Unix features.
const char * gFilename = 0;
+char * gStartupError = 0;
int glkunix_startup_code(glkunix_startup_t *data)
{
if (data->argc <= 1)
{
- printf ("usage: git gamefile.ulx\n");
- return 0;
+ gStartupError = "No file given";
+ return 1;
}
gFilename = data->argv[1];
return 1;
int file;
struct stat info;
const char * ptr;
-
+
+ if (gStartupError)
+ fatalError(gStartupError);
+
file = open (gFilename, O_RDONLY);
if (file < 0)
goto error;
goto error;
if (info.st_size < 256)
- {
- fprintf (stderr, "This is too small to be a glulx file.\n");
- exit (1);
- }
+ fatalError("This is too small to be a glulx file.");
ptr = mmap (NULL, info.st_size, PROT_READ, MAP_PRIVATE, file, 0);
if (ptr == MAP_FAILED)
goto error;
+
+ gHasInited = 1;
git (ptr, info.st_size, CACHE_SIZE, UNDO_SIZE);
munmap ((void*) ptr, info.st_size);
return;
error:
- perror ("git");
- exit (errno);
+ sprintf(errmsg, "git: %s", strerror(errno));
+ fatalError(errmsg);
}
#else
// Generic loader that should work anywhere.
strid_t gStream = 0;
+char * gStartupError = 0;
int glkunix_startup_code(glkunix_startup_t *data)
{
if (data->argc <= 1)
{
- printf ("usage: git gamefile.ulx\n");
- return 0;
+ gStartupError = "No file given";
+ return 1;
}
gStream = glkunix_stream_open_pathname ((char*) data->argv[1], 0, 0);
return 1;
void glk_main ()
{
+ if (gStartupError)
+ fatalError(gStartupError);
+
if (gStream == NULL)
fatalError ("could not open game file");
+ gHasInited = 1;
+
gitWithStream (gStream, CACHE_SIZE, UNDO_SIZE);
}