rpms/njam/devel njam-1.25-leveledit.patch, NONE, 1.1 njam.spec, 1.1, 1.2
Hans de Goede (jwrdegoede)
fedora-extras-commits at redhat.com
Tue May 9 19:44:48 UTC 2006
Author: jwrdegoede
Update of /cvs/extras/rpms/njam/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4020
Modified Files:
njam.spec
Added Files:
njam-1.25-leveledit.patch
Log Message:
* Tue May 9 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 1.25-3
- Add Patch2, which fixes the leveleditor to save custom made levels under
$HOME/.njam-levels instead of trying to write them under /usr/share.
Also teach njam to look for levels under both $HOME/.njam-levels and
/usr/share (bug 188078).
njam-1.25-leveledit.patch:
--- NEW FILE njam-1.25-leveledit.patch ---
--- njam-1.25-src/src/njamutils.h.leveledit 2005-12-13 12:56:43.000000000 +0100
+++ njam-1.25-src/src/njamutils.h 2006-05-09 19:40:37.000000000 +0200
@@ -25,6 +25,10 @@
void NjamSetRect(SDL_Rect& rect, int x, int y, int w=0, int h=0);
SDLKey NjamGetch(bool Wait);
int NjamRandom(int MaxValue);
+#ifdef __linux__
+char *NjamGetHomeDir();
+int NjamCheckAndCreateDir(const char *name);
+#endif
typedef enum { fxBlackWhite, fxDarken } tEffect;
bool SurfaceEffect(SDL_Surface *surface, SDL_Rect& r, tEffect Effect = fxBlackWhite);
--- njam-1.25-src/src/njam.cpp.leveledit 2006-05-09 19:40:37.000000000 +0200
+++ njam-1.25-src/src/njam.cpp 2006-05-09 19:40:37.000000000 +0200
@@ -350,6 +350,12 @@
bool NjamEngine::Init(bool Fullscreen, bool SoftwareSurface, bool UseDGA)
{
#ifdef __linux__
+ // Check if $HOME/.njam-levels exists and if it doesn't create it
+ char buf[512];
+ char *home = NjamGetHomeDir();
+ snprintf(buf, sizeof(buf), "%s/.njam-levels", home? home:"");
+ NjamCheckAndCreateDir(buf);
+
sprintf(linux_sdl_driver, "x11\0");
char *driver_name = getenv("SDL_VIDEODRIVER");
if (driver_name)
@@ -624,7 +630,9 @@
// Load user settings from .conf file
LogFile("Opening njam.conf file.\n");
+#ifndef __linux__
char *home = getenv("HOME");
+#endif
std::string njamconf("njam.conf");
if (home)
njamconf = std::string(home) + "/.njamconf";
--- njam-1.25-src/src/njam.h.leveledit 2006-05-09 21:06:37.000000000 +0200
+++ njam-1.25-src/src/njam.h 2006-05-09 21:07:42.000000000 +0200
@@ -98,6 +98,7 @@
struct list_item
{
char item_text[50];
+ char item_path[512];
struct list_item *next;
struct list_item *prev;
};
@@ -192,7 +193,7 @@
void LevelEditor(); // level editor (njamedit.cpp)
void RenderEditor(bool, int, int, int);
bool EnterFileName(char *file_name);
- int SelectMap(char type, char *filename = NULL);
+ int SelectMap(char type, char *filename = NULL, int filename_size = 0);
struct list_item *SelectFromList(struct list_item *first);
void Message(char *text);
bool Query(char *text);
--- njam-1.25-src/src/njamedit.cpp.leveledit 2005-12-13 12:56:42.000000000 +0100
+++ njam-1.25-src/src/njamedit.cpp 2006-05-09 21:06:08.000000000 +0200
@@ -41,7 +41,7 @@
{
int level_type = 0; // cooperative
int level_type_was = 0;
- char filename[250];
+ char filename[512];
filename[0] = '\0';
int x=2, y=1;
@@ -90,7 +90,7 @@
if (key == SDLK_l) // select file from directory
{
- if (SelectMap('A', filename) > -1)
+ if (SelectMap('A', filename, sizeof(filename)) > -1)
{
int w=0;
while (filename[w])
@@ -127,12 +127,20 @@
{
if (EnterFileName(filename))
{
- char buf[250];
+ char buf[512];
char types[2][5] = { "COOP", "DUEL" };
- sprintf(buf, "levels/%s.%s\0", filename, types[level_type]);
- sprintf(filename, "%s\0", buf);
+#ifdef __linux__
+ char *home = NjamGetHomeDir();
+ snprintf(buf, sizeof(buf),
+ "%s/.njam-levels/%s.%s",
+ home? home:"",
+#else
+ snprintf(buf, sizeof(buf),
+ "levels/%s.%s",
+#endif
+ filename, types[level_type]);
LogFile::LogFile("Saving maps");
- m_Maps.Save(filename);
+ m_Maps.Save(buf);
level_type_was = level_type;
changed = false;
}
@@ -458,51 +466,72 @@
}
}
//---------------------------------------------------------------------------
-int NjamEngine::SelectMap(char type, char *filename)
+int NjamEngine::SelectMap(char type, char *filename, int filename_size)
{
struct list_item *first = NULL;
- // open folder, load all entries
+ // open folders, load all entries
DIR *dir;
struct dirent *ent;
+ int i;
+ char dirname[512] = "levels";
- if ((dir = opendir("levels")) == NULL)
+#ifdef __linux__
+ for (i=0; i<2; i++)
{
- printf("Unable to open directory\n");
- return -1;
- }
+ if (i==0)
+ {
+#endif
+ if ((dir = opendir(dirname)) == NULL)
+ {
+ printf("Unable to open directory\n");
+ return -1;
+ }
+#ifdef __linux__
+ }
+ else
+ {
+ char *home = NjamGetHomeDir();
- while ((ent = readdir(dir)) != NULL)
- {
- // check if last letter of name maches:
- int p = 0;
- while (ent->d_name[p])
- p++;
+ snprintf(dirname, sizeof(dirname), "%s/.njam-levels",
+ home? home:"");
+ if ((dir = opendir(dirname)) == NULL)
+ break;
+ }
+#endif
+ while ((ent = readdir(dir)) != NULL)
+ {
+ // check if last letter of name maches:
+ int p = 0;
+ while (ent->d_name[p])
+ p++;
- char c = ent->d_name[p-1];
- if (c != 'P' && c != 'L')
- continue;
+ char c = ent->d_name[p-1];
+ if (c != 'P' && c != 'L')
+ continue;
- if (type != 'A' && c != type)
- continue;
+ if (type != 'A' && c != type)
+ continue;
- struct list_item *new_file = new struct list_item;
- new_file->next = first;
- new_file->prev = NULL;
- if (first)
- first->prev = new_file;
- first = new_file;
+ struct list_item *new_file = new struct list_item;
+ new_file->next = first;
+ new_file->prev = NULL;
+ if (first)
+ first->prev = new_file;
+ first = new_file;
- // copy file name
- for (int i=0; ent->d_name[i] && i<29; i++)
- {
- first->item_text[i] = ent->d_name[i];
- first->item_text[i+1] = '\0';
+ // copy file name
+ snprintf(first->item_text, sizeof(first->item_text),
+ "%s", ent->d_name);
+ snprintf(first->item_path, sizeof(first->item_path),
+ "%s/%s", dirname, ent->d_name);
}
- }
- if (closedir(dir) != 0)
- printf("Unable to close directory\n");
+ if (closedir(dir) != 0)
+ printf("Unable to close directory\n");
+#ifdef __linux__
+ }
+#endif
// show and let player select if more than one levelset
struct list_item *selected;
@@ -514,11 +543,10 @@
int result = 0; // no levels loaded (so far)
if (selected)
{
- char file_name[200];
- sprintf(file_name, "levels/%s\0", selected->item_text);
- result = m_Maps.Load(file_name);
+ result = m_Maps.Load(selected->item_path);
if (filename)
- sprintf(filename, "%s\0", file_name);
+ snprintf(filename, filename_size, "%s",
+ selected->item_path);
}
while (first) // free memory
--- njam-1.25-src/src/njamutils.cpp.leveledit 2005-12-13 12:56:43.000000000 +0100
+++ njam-1.25-src/src/njamutils.cpp 2006-05-09 19:40:37.000000000 +0200
@@ -162,3 +162,83 @@
return true;
}
//-----------------------------------------------------------------------------
+#ifdef __linux__
+#include <pwd.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#if defined(__DECC) && defined(VMS)
+#include <unixlib.h>
+static char *vms_to_unix_buffer = NULL;
+static int convert_vms_to_unix(char *vms_dir_name)
+{
+ vms_to_unix_buffer = vms_dir_name;
+}
+#endif
+
+char *NjamGetHomeDir()
+{
+ struct passwd *pw;
+
+ if (!(pw = getpwuid(getuid())))
+ {
+ fprintf(stderr, "Who are you? Not found in passwd database!!\n");
+ return NULL;
+ }
+
+#if defined(__DECC) && defined(VMS)
+ /* Convert The OpenVMS Formatted "$HOME" Directory Path Into Unix
+ Format. */
+ decc$from_vms(pw->pw_dir, convert_vms_to_unix, 1);
+ return vms_to_unix_buffer;
+#else
+ return pw->pw_dir;
+#endif
+}
+//-----------------------------------------------------------------------------
+int NjamCheckAndCreateDir(const char *name)
+{
+ struct stat stat_buffer;
+
+ if (stat(name, &stat_buffer))
+ {
+ /* error check if it doesn't exist or something else is wrong */
+ if (errno == ENOENT)
+ {
+ /* doesn't exist letts create it ;) */
+#ifdef BSD43
+ if (mkdir(name, 0775))
+#else
+ if (mkdir(name, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH))
+#endif
+ {
+ fprintf(stderr, "Error creating dir %s", name);
+ perror(" ");
+ return -1;
+ }
+ }
+ else
+ {
+ /* something else went wrong yell about it */
+ fprintf(stderr, "Error opening %s", name);
+ perror(" ");
+ return -1;
+ }
+ }
+ else
+ {
+ /* file exists check it's a dir otherwise yell about it */
+#ifdef BSD43
+ if (!(S_IFDIR & stat_buffer.st_mode))
+#else
+ if (!S_ISDIR(stat_buffer.st_mode))
+#endif
+ {
+ fprintf(stderr,"Error %s exists but isn't a dir\n", name);
+ return -1;
+ }
+ }
+ return 0;
+}
+#endif
Index: njam.spec
===================================================================
RCS file: /cvs/extras/rpms/njam/devel/njam.spec,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- njam.spec 29 Mar 2006 19:45:02 -0000 1.1
+++ njam.spec 9 May 2006 19:44:48 -0000 1.2
@@ -1,6 +1,6 @@
Name: njam
Version: 1.25
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Maze-game, eat all the cookies while avoiding the badguys
Group: Amusements/Games
License: GPL
@@ -10,6 +10,7 @@
Source2: njam.desktop
Patch0: njam-1.25-drop-setgid.patch
Patch1: njam-1.25-html.patch
+Patch2: njam-1.25-leveledit.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: SDL-devel SDL_mixer-devel SDL_image-devel SDL_net-devel
BuildRequires: ImageMagick desktop-file-utils
@@ -26,6 +27,7 @@
%setup -q -n %{name}-%{version}-src
%patch0 -p1 -z .setgid
%patch1 -p1
+%patch2 -p1 -z .leveledit
%build
@@ -96,6 +98,12 @@
%changelog
+* Tue May 9 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 1.25-3
+- Add Patch2, which fixes the leveleditor to save custom made levels under
+ $HOME/.njam-levels instead of trying to write them under /usr/share.
+ Also teach njam to look for levels under both $HOME/.njam-levels and
+ /usr/share (bug 188078).
+
* Tue Mar 28 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 1.25-2
- Cleaned up description in spec and man using the cleaner
description provided in bz 186813
More information about the scm-commits
mailing list