diff options
author | B. Watson <yalhcru@gmail.com> | 2010-12-26 21:09:09 -0200 |
---|---|---|
committer | Niels Horn <niels.horn@slackbuilds.org> | 2010-12-27 19:22:53 -0200 |
commit | e67673320eb30baa5fc9515e1fc2bb73e1a71c59 (patch) | |
tree | 74423f21beb950ecd69ca2dc43731b2874b1a6e4 | |
parent | 1ec5fa432230c0696c41e241406ee4867d516663 (diff) |
games/clonekeen: Updated for version 8.4.
Signed-off-by: Niels Horn <niels.horn@slackbuilds.org>
-rw-r--r-- | games/clonekeen/README | 9 | ||||
-rw-r--r-- | games/clonekeen/clonekeen.6 | 83 | ||||
-rw-r--r-- | games/clonekeen/clonekeen.SlackBuild | 33 | ||||
-rw-r--r-- | games/clonekeen/clonekeen.info | 10 | ||||
-rw-r--r-- | games/clonekeen/clonekeen.sh | 9 | ||||
-rw-r--r-- | games/clonekeen/patch.txt | 12 | ||||
-rw-r--r-- | games/clonekeen/slackbuild.diff | 286 |
7 files changed, 39 insertions, 403 deletions
diff --git a/games/clonekeen/README b/games/clonekeen/README index 9d202387f48e..8b1656064a39 100644 --- a/games/clonekeen/README +++ b/games/clonekeen/README @@ -1,5 +1,3 @@ -clonekeen (open source engine for id Software's Commander Keen game) - CloneKeen is an open-source clone of ID's classic DOS game Commander Keen. CloneKeen runs under many platforms including Linux & win32. There are some improvements over the original such as 2-player support. Original @@ -10,12 +8,9 @@ clonekeen is able to run Commander Keen episodes 1, 2, and 3. Episodes files from the game installation directory to /usr/share/games/clonekeen Optionally, the package can include the shareware (episode 1) game data -files. To do this, download 1keen.zip: - -ftp://ftp.3drealms.com/share/1keen.zip +files. -...and place it in the directory where the SlackBuild script is. Also -you must install libdynamite (available from SBo), since it's required +You must install libdynamite (available from SBo), since it's required to extract the game data. After running the SlackBuild script, the resulting package can be installed on a system without libdynamite (it's only required at build time). The extractor may also be useful diff --git a/games/clonekeen/clonekeen.6 b/games/clonekeen/clonekeen.6 index 69b5587384df..8a731a2c0480 100644 --- a/games/clonekeen/clonekeen.6 +++ b/games/clonekeen/clonekeen.6 @@ -4,8 +4,6 @@ clonekeen \- Clone of id Software's "Commander Keen" game .br .SH SYNOPSIS .B clonekeen -[\fIwarplevel\fR] -[\fIOPTIONS\fR] .SH DESCRIPTION CloneKeen is an almost almost complete open\-source clone of the old classic DOS game, \fICommander Keen: Invasion of the @@ -19,47 +17,11 @@ including smoother scrolling, better graphic effects in some parts of the game, and 2\-player support. .PP See story.txt for a description of the game's plot. -.SH OPTIONS -.TP -\fBwarplevel\fR -specify a level number (such as 2) to go directly to that level. This option -must be given first. Example: \fBclonekeen 1 \-fs\fR to start the game on -level 1 in fullscreen mode. -.TP -\fB\-1player\fR, \fB\-2player\fR -select number of players (1\-2); defaults to 1. This is local multiplayer, -with 2 players using the same keyboard (there is no network play). -.TP -\fB\-nopk\fR -do not allow players to kill each other in multiplayer games -.TP -\fB\-ep1\fR, \fB\-ep2\fR, \fB\-ep3\fR -select episode 1, 2, or 3; defaults to 1 -.TP -\fB\-dtm\fR -go directly to the world map, bypassing intro and title screen -.TP -\fB\-mean\fR -increase game difficulty -.TP -\fB\-cheat\fR -enable function key cheat/debug codes -.TP -\fB\-rec\fR -record player actions to demo.dat for making a demo -.TP -\fB\-eseq\fR -for the impatient\-\-cut directly to the ending sequence -.TP -\fB\-fs\fR -use fullscreen mode -.TP -\fB\-dbl\fR -zoom image 2x -.TP -\fB\-showfps\fR -show frames/second in upper\-right of screen +.PP +There are no command\-line options. .SH CONTROLS +These are the default controls, which may be changed via the +in\-game menus. .TP \fBArrows\fR Movement @@ -80,12 +42,10 @@ Fire Raygun (if it has charges) Save the game .TP \fBEscape\fR -At the intro or title screen, quits the game. During gameplay, brings up -the quit menu (press Escape again to return to the game). +Brings up the main menu .TP \fBF10\fR -Switch to fullscreen and enable scale2x mode. Only active during the -intro screen (blue text on starfield). +Toggles fullscreen display .PP In 2\-player games, player 2's controls are: .TP @@ -107,8 +67,9 @@ Down \fBD\fR Right .SH CHEAT CODES -There are a full assortment of cheat codes available. Some cheats must first -be enabled with -cheat or through the options menu. C+T+SPACE and G+O+D will +There are a full assortment of cheat codes available. Most cheats +can only be used after enabling cheats in the options menu. +C+T+SPACE and G+O+D will always work. .TP \fBG+O+D\fR @@ -175,13 +136,6 @@ You get an extra Keen every 20,000 points. Per\-user savegames and config data. This directory is created the first time you run \fBclonekeen\fR. .TP -\fB~/.clonekeen/defaultargs\fR -Default arguments to pass to the game. Good candidates are \-fs, \-dbl, -and/or -cheat. Put the arguments in the file on the same line, -separated by spaces, e.g.: -.PP -\fBecho "-dbl -fs -cheat" > ~/.clonekeen/defaultargs\fR -.TP \fB/usr/share/games/clonekeen/\fR System\-wide game data files (including the ones that come with the original game). Data files may be named in all\-uppercase or @@ -196,29 +150,14 @@ current dir. Use the \fBclonekeen\fR wrapper script instead. \fB/usr/games/clonekeen\fR Wrapper script. Creates ~/.clonekeen, populates it with symlinks to the game data files, runs the main binary. -.SH BUGS -Actually not bugs, these are features that were in the original DOS version -of the game that are not (yet?) implemented in clonekeen: -.PP -No way to customize keyboard controls -.PP -No support for joystick controls -.PP -No support for in\-game help (probably just as well, the help talks about -joysticks, and customizing keyboard controls...) -.PP -Also, the DOS build of clonekeen appears to support up to 4 (or maybe -only 3) player -games, but the Linux build only defines enough control keys -for 2 players. .SH AUTHOR clonekeen was written by Caitlin Shaw. .PP This manual page and the wrapper script were written by B. Watson for the SlackBuilds.org project. .SH SEE ALSO -\fB/usr/doc/clonekeen-8.3/readme.txt\fR +\fB/usr/doc/clonekeen-8.4/readme.txt\fR .br -\fB/usr/doc/clonekeen-8.3/story.txt\fR +\fB/usr/doc/clonekeen-8.4/story.txt\fR .br \fBhttp://clonekeen.sourceforge.net/\fR .br diff --git a/games/clonekeen/clonekeen.SlackBuild b/games/clonekeen/clonekeen.SlackBuild index 209a5cd07d46..ac178a730bd8 100644 --- a/games/clonekeen/clonekeen.SlackBuild +++ b/games/clonekeen/clonekeen.SlackBuild @@ -1,20 +1,18 @@ -#!/bin/sh +#!/bin/bash # Slackware build script for clonekeen # Written by B. Watson (yalhcru@gmail.com) PRGNAM=clonekeen -VERSION=${VERSION:-8.3} +VERSION=${VERSION:-8.4} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} -# Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; - # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$( uname -m ) ;; esac fi @@ -26,29 +24,23 @@ OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" - LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" - LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" - LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" - LIBDIRSUFFIX="" fi set -e -SRCVER=$( echo $VERSION | sed 's/\.//g' ) SRCDIR=keen rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $SRCDIR -unzip $CWD/CKBeta${SRCVER}_Bin_W32.zip -unzip -o $CWD/CKBeta${SRCVER}_Src.zip +tar xvf $CWD/$PRGNAM-src-${VERSION/./}.tar.gz cd $SRCDIR chown -R root:root . find . \ @@ -57,24 +49,26 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -# See patch.txt for details on what this patch does and why. -patch -p1 < $CWD/slackbuild.diff +# Makefile doesn't use CFLAGS, ugh +sed -i "/gcc/s/-O2/$SLKCFLAGS/" src/Makefile # Ugh. The src tarball ships with compiled .o files! -make -f Makefile.lnx -C src clean all CFLAGS="$SLKCFLAGS" +rm -f platform/*.o + +make -C src # Manual install -mkdir -p $PKG/usr/games $PKG/usr/share/games/$PRGNAM/data +mkdir -p $PKG/usr/games $PKG/usr/share/games/$PRGNAM install -m0755 -s src/keen $PKG/usr/games/$PRGNAM-bin install -m0755 -oroot -groot $CWD/$PRGNAM.sh $PKG/usr/games/$PRGNAM ln -sf $PRGNAM $PKG/usr/games/keen -install -m0644 bin/*.{DAT,dat} $PKG/usr/share/games/$PRGNAM -install -m0644 bin/data/* $PKG/usr/share/games/$PRGNAM/data +mv bin/keen.conf bin/keen.conf.default +cp -r bin/* $PKG/usr/share/games/$PRGNAM # story.txt is an ASCII-only version of storytxt.ck1 from the # shareware release mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION -cp $CWD/story.txt readme.txt $PKG/usr/doc/$PRGNAM-$VERSION +cp $CWD/story.txt README src/*.txt $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild # Optional shareware data. It's compressed in an oddball format, @@ -91,6 +85,9 @@ if [ -e $CWD/1keen.zip ]; then cd - fi +# Fix line endings of doc files +sed -i 's/\r//' $PKG/usr/doc/$PRGNAM-$VERSION/* + mkdir -p $PKG/usr/man/man6 gzip -9c < $CWD/$PRGNAM.6 > $PKG/usr/man/man6/$PRGNAM.6.gz ln -sf $PRGNAM.6.gz $PKG/usr/man/man6/keen.6.gz diff --git a/games/clonekeen/clonekeen.info b/games/clonekeen/clonekeen.info index 0c1272f1a5e0..e2c2da9f9b2e 100644 --- a/games/clonekeen/clonekeen.info +++ b/games/clonekeen/clonekeen.info @@ -1,14 +1,14 @@ PRGNAM="clonekeen" -VERSION="8.3" +VERSION="8.4" HOMEPAGE="http://clonekeen.sourceforge.net/" -DOWNLOAD="http://downloads.sourceforge.net/project/clonekeen/clonekeen/Beta%208.3/CKBeta83_Src.zip \ - http://downloads.sourceforge.net/project/clonekeen/clonekeen/Beta%208.3/CKBeta83_Bin_W32.zip \ +DOWNLOAD="http://downloads.sourceforge.net/clonekeen/clonekeen-src-84.tar.gz \ + http://downloads.sourceforge.net/clonekeen/CKBeta83_Bin_W32.zip \ ftp://ftp.3drealms.com/share/1keen.zip" -MD5SUM="9aa11b4793bad38bde2eb45597adb54e \ +MD5SUM="0179c34727d044f07a1c00df340134bd \ a0dfcd00f3d039ef544f344b605f83bd \ 7375d0452276388d52c35d0b3ad6ab82" DOWNLOAD_x86_64="" MD5SUM_x86_64="" MAINTAINER="B. Watson" EMAIL="yalhcru@gmail.com" -APPROVED="dsomero" +APPROVED="Niels Horn" diff --git a/games/clonekeen/clonekeen.sh b/games/clonekeen/clonekeen.sh index e189070a0935..4e2d2b56e554 100644 --- a/games/clonekeen/clonekeen.sh +++ b/games/clonekeen/clonekeen.sh @@ -6,8 +6,11 @@ GAME=clonekeen HOMEDIR=~/.$GAME mkdir -p $HOMEDIR cd $HOMEDIR -if [ -e defaultargs ]; then - ARGS="`cat defaultargs`" -fi + ln -s /usr/share/games/$GAME/* . &>/dev/null || true + +if [ ! -e keen.conf ]; then + cat keen.conf.default > keen.conf +fi + exec $GAME-bin "$@" $ARGS diff --git a/games/clonekeen/patch.txt b/games/clonekeen/patch.txt deleted file mode 100644 index 634e06b6127e..000000000000 --- a/games/clonekeen/patch.txt +++ /dev/null @@ -1,12 +0,0 @@ -slackbuild.diff does the following things: - -- Allows data filenames to be upper/lower/mixed case -- Stops creating an empty "ck.log" file in the cwd -- Stops segfaulting on exit due to double-free bug -- Gets rid of non-functional -3player, -4player, - -host, and -join options -- Sets the default frameskip to 1. This is because there is no - way to DECREASE the frameskip from the in-game Options menu, - and the original default was 2. Anyone who has an old/slow - enough machine to need frameskip 2 can still set it (increasing - the frameskip works fine, you just can't decrease it...) diff --git a/games/clonekeen/slackbuild.diff b/games/clonekeen/slackbuild.diff deleted file mode 100644 index 351f9f3302e4..000000000000 --- a/games/clonekeen/slackbuild.diff +++ /dev/null @@ -1,286 +0,0 @@ -diff -Naur keen.orig/src/Makefile.lnx keen/src/Makefile.lnx ---- keen.orig/src/Makefile.lnx 2005-11-09 22:27:50.000000000 -0500 -+++ keen/src/Makefile.lnx 2010-03-26 03:06:24.000000000 -0400 -@@ -31,6 +31,7 @@ - sdl/keydrv.o sdl/snddrv.o sdl/timedrv.o sdl/viddrv.o \ - scale2x/scalebit.o scale2x/scale2x.o scale2x/scale3x.o \ - scale2x/pixel.o \ -+ unix_fopen_wrapper.o \ - keen.h keenext.h sounds.h funcdefs.h latch.h game.h - gcc -g3 -o keen \ - main.o fileio.o \ -@@ -51,6 +52,7 @@ - sdl/keydrv.o sdl/snddrv.o sdl/timedrv.o sdl/viddrv.o \ - scale2x/scalebit.o scale2x/scale2x.o scale2x/scale3x.o \ - scale2x/pixel.o \ -+ unix_fopen_wrapper.o \ - `sdl-config --libs` - - -diff -Naur keen.orig/src/keen.h keen/src/keen.h ---- keen.orig/src/keen.h 2005-11-07 16:39:12.000000000 -0500 -+++ keen/src/keen.h 2010-03-26 03:06:24.000000000 -0400 -@@ -14,6 +14,10 @@ - #include <windows.h>
- #endif
-
-+#ifdef TARGET_LNX
-+ #include "unix_fopen_wrapper.h"
-+#endif
-+
- #include "sounds.h"
- #include "funcdefs.h"
- #include "latch.h"
-diff -Naur keen.orig/src/main.c keen/src/main.c ---- keen.orig/src/main.c 2005-11-09 23:35:10.000000000 -0500 -+++ keen/src/main.c 2010-03-26 03:11:56.000000000 -0400 -@@ -75,7 +75,7 @@ -
- char loadinggame, loadslot;
-
--FILE *log=NULL;
-+/* FILE *log=NULL; */
-
- stFade fade;
- stMap map;
-@@ -161,7 +161,7 @@ - SetDefaultOptions();
- setoption(OPT_FULLSCREEN, "SDL Fullscreen Mode", 0);
- setoption(OPT_ZOOM, "Image Zoom", 1);
-- setoption(OPT_FRAMESKIP, "Frameskip", 2);
-+ setoption(OPT_FRAMESKIP, "Frameskip", 1);
-
- /* process command line options */
- VidDrv_printf("Processing command-line options.\n");
-@@ -180,6 +180,7 @@ - {
- numplayers = 2;
- }
-+ /*
- else if (strcmp(tempbuf, "-3player")==0)
- {
- numplayers = 3;
-@@ -188,6 +189,7 @@ - {
- numplayers = 4;
- }
-+ */
- else if (strcmp(tempbuf, "-single")==0)
- {
- numplayers = 1;
-@@ -240,6 +242,7 @@ - {
- showfps = 1;
- }
-+ /*
- else if (strcmp(tempbuf, "-host")==0) // start network server
- {
- is_server = 1;
-@@ -250,6 +253,7 @@ - is_client = 1;
- localmp = 0;
- }
-+ */
- else if (i!=1 || atoi(argv[i])==0)
- {
- VidDrv_printf("Wait a minute...what the hell does '%s' mean?\n",tempbuf);
-diff -Naur keen.orig/src/misc.c keen/src/misc.c ---- keen.orig/src/misc.c 2005-11-16 20:04:28.000000000 -0500 -+++ keen/src/misc.c 2010-03-26 03:15:46.000000000 -0400 -@@ -1103,7 +1103,7 @@ - {
- VidDrv_printf("Usage: keen [lvlnum] [-*player] [-nopk] [-ep*] [-dtm] [-nocheat] [-rec] -[eseq]\n\n");
- VidDrv_printf("lvlnum specify a level number (such as 2) to go directly to that level\n");
-- VidDrv_printf("-*player select number of players (1-4); defaults to 1\n");
-+ VidDrv_printf("-*player select number of players (1-2); defaults to 1\n");
- VidDrv_printf("-nopk do not allow players to kill each other in multiplayer games\n");
- VidDrv_printf("-ep* select episode 1, 2, or 3; defaults to 1\n");
- VidDrv_printf("-dtm go directly to the world map, bypassing intro and title screen\n");
-diff -Naur keen.orig/src/sdl/viddrv.c keen/src/sdl/viddrv.c ---- keen.orig/src/sdl/viddrv.c 2005-11-16 20:08:30.000000000 -0500 -+++ keen/src/sdl/viddrv.c 2010-03-26 03:06:24.000000000 -0400 -@@ -29,8 +29,10 @@ -
- SDL_Rect dstrect;
-
-+#ifndef TARGET_LNX
- extern FILE *log;
- #define CKLOGFILENAME "ck.log"
-+#endif
-
- #define MAX_CONSOLE_MESSAGES 3
- #define CONSOLE_MESSAGE_X 3
-@@ -222,11 +224,11 @@ - // applies all changes to the palette made with pal_set
- void pal_apply(void)
- {
-- SDL_SetColors(screen, &MyPalette, 0, 256);
-- SDL_SetColors(ScrollSurface, &MyPalette, 0, 256);
-+ SDL_SetColors(screen, MyPalette, 0, 256);
-+ SDL_SetColors(ScrollSurface, MyPalette, 0, 256);
- if (blitsurface_alloc)
- {
-- SDL_SetColors(BlitSurface, &MyPalette, 0, 256);
-+ SDL_SetColors(BlitSurface, MyPalette, 0, 256);
- }
- }
-
-@@ -338,9 +340,9 @@ - // shuts down the video driver
- void VidDrv_Stop(void)
- {
-- if(screen) { SDL_FreeSurface(screen); VidDrv_printf("freed screen\n"); }
-- if(ScrollSurface) { SDL_FreeSurface(ScrollSurface); VidDrv_printf("freed scrollsurface\n"); }
-- if(blitsurface_alloc) { blitsurface_alloc = 0; SDL_FreeSurface(BlitSurface); VidDrv_printf("freed blitsurface\n"); }
-+ if(screen) { SDL_FreeSurface(screen); screen = NULL; VidDrv_printf("freed screen\n"); }
-+ if(ScrollSurface) { SDL_FreeSurface(ScrollSurface); ScrollSurface = NULL; VidDrv_printf("freed scrollsurface\n"); }
-+ if(blitsurface_alloc) { blitsurface_alloc = 0; SDL_FreeSurface(BlitSurface); BlitSurface = NULL; VidDrv_printf("freed blitsurface\n"); }
- }
-
- // resets graphics to allow changing of resolution or zoom settings
-@@ -365,10 +367,12 @@ - // SDL-specific, not win32-specific)
- void VidDrv_InitConsole(void)
- {
-+#ifndef TARGET_LNX
- FILE *fp;
- // erase contents of log file
- fp = fopen(CKLOGFILENAME, "wb");
- fclose(fp);
-+#endif
- }
-
- void VidDrv_printf(const char *str, ...)
-diff -Naur keen.orig/src/unix_fopen_wrapper.c keen/src/unix_fopen_wrapper.c ---- keen.orig/src/unix_fopen_wrapper.c 1969-12-31 19:00:00.000000000 -0500 -+++ keen/src/unix_fopen_wrapper.c 2010-03-26 03:06:24.000000000 -0400 -@@ -0,0 +1,123 @@ -+ -+/* semi-case-insensitive fopen() replacement. -+ -+Usage: -+ -+#include "unix_fopen_wrapper.h" -+FILE *foo = fopen("bar.baz", "rb"); -+ -+fopen() gets redefined to unix_fopen() in the header file. -+unix_fopen() attempts to call the real fopen() on: -+ -+bar.baz -+BAR.baz -+Bar.baz -+bar.BAZ -+BAR.BAZ -+Bar.BAZ -+bar.Baz -+BAR.Baz -+Bar.Baz -+ -+It'll still miss e.g. baR.baz or bAr.baz -+ -+If there's no . in the filename (e.g. "bar"), just check -+for bar, BAR, Bar -+*/ -+ -+#include <stdio.h> -+#include <ctype.h> -+#include <string.h> -+#include <limits.h> -+ -+void lcase_all(char *c) { -+ if(!c || !*c) return; -+ while(*c && *c != '.') { -+ *c = tolower(*c); -+ c++; -+ } -+} -+ -+void ucase_all(char *c) { -+ if(!c || !*c) return; -+ while(*c && *c != '.') { -+ *c = toupper(*c); -+ c++; -+ } -+} -+ -+void ucase_first(char *c) { -+ if(!c || !*c) return; -+ lcase_all(c); -+ c[0] = toupper(c[0]); -+} -+ -+FILE *unix_fopen(const char *path, const char *mode) { -+ FILE *result; -+ char realpath[PATH_MAX], *name, *ext; -+ -+/* #define DEBUG_FOPEN */ -+ -+#ifdef DEBUG_FOPEN -+#define TRY_FOPEN(p, m) { \ -+ result = fopen(p, m); \ -+ fprintf(stderr, "-- %s:%d: (%s,%s): %s\n", \ -+ __FILE__, __LINE__, p, m, (result ? "OK" : "fail")); \ -+ if(result) return result; \ -+} -+#else -+#define TRY_FOPEN(p, m) { if( (result = fopen(p, m)) ) return result; } -+#endif -+ -+ /* try it as-is first */ -+ TRY_FOPEN(path, mode); -+ -+ /* parse into name and (possible) extension */ -+ strcpy(realpath, path); -+ ext = strrchr(realpath, '.'); -+ if(ext) { -+ ++ext; -+ if(!ext[0]) ext = NULL; -+ } -+ -+ /* skip any directory component(s) */ -+ name = strrchr(realpath, '/'); -+ if(!name) name = realpath; -+ -+ /* permutations... */ -+ lcase_all(ext); -+ lcase_all(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_all(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_first(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_all(ext); -+ lcase_all(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_all(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_first(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_first(ext); -+ lcase_all(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_all(name); -+ TRY_FOPEN(realpath, mode); -+ -+ ucase_first(name); -+ TRY_FOPEN(realpath, mode); -+ -+#ifdef DEBUG_FOPEN -+ fprintf(stderr, "%s:%s: TRY_FOPEN(%s,%s): Giving up", -+ __FILE__, __LINE__, path, mode); -+#endif -+ return NULL; -+} -diff -Naur keen.orig/src/unix_fopen_wrapper.h keen/src/unix_fopen_wrapper.h ---- keen.orig/src/unix_fopen_wrapper.h 1969-12-31 19:00:00.000000000 -0500 -+++ keen/src/unix_fopen_wrapper.h 2010-03-26 03:06:24.000000000 -0400 -@@ -0,0 +1,2 @@ -+FILE *unix_fopen(const char *path, const char *mode); -+#define fopen(x,y) unix_fopen(x,y) |