r8215 - in packages/trunk/jumpnbump: . debian jumpnbump_menu modify sdl
Ansgar Burchardt
ansgar-guest at alioth.debian.org
Mon Sep 29 21:24:17 UTC 2008
Author: ansgar-guest
Date: 2008-09-29 21:24:16 +0000 (Mon, 29 Sep 2008)
New Revision: 8215
Added:
packages/trunk/jumpnbump/modify/
packages/trunk/jumpnbump/modify/jnbunpack.c
packages/trunk/jumpnbump/sdl/sound.c
Modified:
packages/trunk/jumpnbump/debian/
packages/trunk/jumpnbump/debian/changelog
packages/trunk/jumpnbump/debian/control
packages/trunk/jumpnbump/debian/copyright
packages/trunk/jumpnbump/jumpnbump_menu/jumpnbump_menu.py
Log:
* Urgency set to high as this upload closes a security issue:
* Fix insecure handling of /tmp (Closes: #500611)
* Fix path to utility programs in jumpnbump-menu (Closes: #500340).
Thanks to Kilian Kilger <kilian at nihilnovi.de> for the patch.
* Repackage source to remove dos/libdj.a (no source provided),
mention this in debian/copyright
* Bump Standards Version to 3.8.0 (no changes)
* Add myself to Uploaders.
Property changes on: packages/trunk/jumpnbump/debian
___________________________________________________________________
Name: svn-bp:origUrl
- http://pkg-games.alioth.debian.org/tarballs/jumpnbump_1.50.orig.tar.gz
+ http://pkg-games.alioth.debian.org/tarballs/jumpnbump_1.50+dfsg1.orig.tar.gz
Modified: packages/trunk/jumpnbump/debian/changelog
===================================================================
--- packages/trunk/jumpnbump/debian/changelog 2008-09-29 19:23:25 UTC (rev 8214)
+++ packages/trunk/jumpnbump/debian/changelog 2008-09-29 21:24:16 UTC (rev 8215)
@@ -1,3 +1,16 @@
+jumpnbump (1.50+dfsg1-1) unstable; urgency=high
+
+ * Urgency set to high as this upload closes a security issue:
+ * Fix insecure handling of /tmp (Closes: #500611)
+ * Fix path to utility programs in jumpnbump-menu (Closes: #500340).
+ Thanks to Kilian Kilger <kilian at nihilnovi.de> for the patch.
+ * Repackage source to remove dos/libdj.a (no source provided),
+ mention this in debian/copyright
+ * Bump Standards Version to 3.8.0 (no changes)
+ * Add myself to Uploaders.
+
+ -- Ansgar Burchardt <ansgar at 43-1.org> Mon, 29 Sep 2008 22:01:59 +0200
+
jumpnbump (1.50-12) unstable; urgency=low
* Fix vcs-browser field to refer to the right package
Modified: packages/trunk/jumpnbump/debian/control
===================================================================
--- packages/trunk/jumpnbump/debian/control 2008-09-29 19:23:25 UTC (rev 8214)
+++ packages/trunk/jumpnbump/debian/control 2008-09-29 21:24:16 UTC (rev 8215)
@@ -2,9 +2,10 @@
Section: games
Priority: optional
Maintainer: Debian Games Team <pkg-games-devel at lists.alioth.debian.org>
-Uploaders: Francois Marier <francois at debian.org>
+Uploaders: Francois Marier <francois at debian.org>,
+ Ansgar Burchardt <ansgar at 43-1.org>
Build-Depends: debhelper (>= 6), libsdl1.2-dev (>= 1.2.2-3.1), libsdl-mixer1.2-dev (>= 1.2.0-1.1), libsdl-net1.2-dev (>= 1.2.0-5.1)
-Standards-Version: 3.7.3
+Standards-Version: 3.8.0
Homepage: http://jumpbump.mine.nu/
Vcs-Svn: svn://svn.debian.org/svn/pkg-games/packages/trunk/jumpnbump/
Vcs-Browser: http://svn.debian.org/wsvn/pkg-games/packages/trunk/jumpnbump/?op=log
Modified: packages/trunk/jumpnbump/debian/copyright
===================================================================
--- packages/trunk/jumpnbump/debian/copyright 2008-09-29 19:23:25 UTC (rev 8214)
+++ packages/trunk/jumpnbump/debian/copyright 2008-09-29 21:24:16 UTC (rev 8215)
@@ -29,6 +29,8 @@
Public License. On Debian systems, the complete text of the GNU General
Public License can be found in /usr/share/common-licenses/GPL file.
+The file `dos/libdj.a' was removed as no source is provided in the archive.
+
This package also includes the following code:
The python menu in jumpnbump_menu is written by
@@ -38,3 +40,4 @@
http://www.sysrq.dk/applications
It is also licensed under the terms of the GPL.
+
Modified: packages/trunk/jumpnbump/jumpnbump_menu/jumpnbump_menu.py
===================================================================
--- packages/trunk/jumpnbump/jumpnbump_menu/jumpnbump_menu.py 2008-09-29 19:23:25 UTC (rev 8214)
+++ packages/trunk/jumpnbump/jumpnbump_menu/jumpnbump_menu.py 2008-09-29 21:24:16 UTC (rev 8215)
@@ -13,6 +13,8 @@
import gtk.gdk
import gobject
import os
+import tempfile
+import shutil
RESOURCE_DIR='/usr/share/games/jumpnbump'
BINARY_DIR='/usr/games'
@@ -80,15 +82,20 @@
model, iter = treeview.get_selection().get_selected()
global choosen_level
choosen_level = '%s/%s' % (RESOURCE_DIR, model.get_value (iter, 0))
+ unpackdir = None
try:
- os.chdir ('/tmp')
- os.spawnlp (os.P_WAIT, 'jumpnbump-unpack', 'jumpnbump', choosen_level)
+ unpackdir = tempfile.mkdtemp ("", "jumpnbump-menu-")
+ os.chdir(unpackdir)
+ os.spawnlp (os.P_WAIT, '/usr/lib/jumpnbump/unpack', 'unpack', choosen_level)
os.spawnlp (os.P_WAIT, 'convert', 'convert', '-scale', '50%', 'level.pcx', 'level_scaled.pcx')
os.spawnlp (os.P_WAIT, 'convert', 'convert', 'level_scaled.pcx', 'level.png')
+ image.set_from_file ('level.png')
except Exception, err:
print err
+ finally:
+ if unpackdir != None:
+ shutil.rmtree(unpackdir)
- image.set_from_file ('/tmp/level.png')
image.show()
def about (widget):
Added: packages/trunk/jumpnbump/modify/jnbunpack.c
===================================================================
--- packages/trunk/jumpnbump/modify/jnbunpack.c (rev 0)
+++ packages/trunk/jumpnbump/modify/jnbunpack.c 2008-09-29 21:24:16 UTC (rev 8215)
@@ -0,0 +1,108 @@
+/*
+ * unpack.c
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ *
+ * Copyright (C) 2001 "timecop" <timecop at japan.co.jp>
+ *
+ * Copyright (C) 2002 Florian Schulze <crow at icculus.org>
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Jump'n'Bump is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/types.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#else
+#include <io.h>
+#endif
+
+typedef struct {
+ char filename[12];
+ unsigned int offset;
+ unsigned int size;
+} DirEntry;
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+int main(int argc, char **argv)
+{
+ int fd;
+ DirEntry *datafile;
+ int num_entries, i;
+
+ if (argc < 2) {
+ printf("dumbass, specify filename to unpack\n");
+ exit(1);
+ }
+
+ fd = open(argv[1], O_RDONLY | O_BINARY);
+ if (fd == -1) {
+ perror("open datafile");
+ exit(1);
+ }
+ /* get number of entries */
+ read(fd, &num_entries, 4);
+
+ printf("%d entries in datafile\n", num_entries);
+
+ datafile = calloc(num_entries, sizeof(DirEntry));
+ read(fd, datafile, num_entries * sizeof(DirEntry));
+ printf("Directory Listing:\n");
+ for (i = 0; i < num_entries; i++) {
+ char filename[14];
+ memset(filename, 0, sizeof(filename));
+ strncpy(filename, datafile[i].filename, 12);
+ printf("%02d:\t%s (%u bytes)\n", i, filename,
+ datafile[i].size);
+ }
+
+ for (i = 0; i < num_entries; i++) {
+ int outfd;
+ char filename[14];
+ char *buf;
+ memset(filename, 0, sizeof(filename));
+ strncpy(filename, datafile[i].filename, 12);
+ printf("Extracting %s ", filename);
+ fflush(stdout);
+
+ if (unlink(filename) == -1 && errno != ENOENT) {
+ perror("cannot unlink file");
+ exit(1);
+ }
+ outfd = open(filename, O_RDWR | O_CREAT | O_EXCL | O_BINARY, 0644);
+ if (!outfd) {
+ perror("cant open file");
+ exit(1);
+ }
+ lseek(fd, datafile[i].offset, SEEK_SET);
+ buf = calloc(1, datafile[i].size + 16);
+ read(fd, buf, datafile[i].size);
+ write(outfd, buf, datafile[i].size);
+ close(outfd);
+ free(buf);
+ printf("OK\n");
+ }
+ close(fd);
+ return 0;
+}
Added: packages/trunk/jumpnbump/sdl/sound.c
===================================================================
--- packages/trunk/jumpnbump/sdl/sound.c (rev 0)
+++ packages/trunk/jumpnbump/sdl/sound.c 2008-09-29 21:24:16 UTC (rev 8215)
@@ -0,0 +1,579 @@
+/*
+ * sound.c
+ * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
+ *
+ * Copyright (C) 2001 Chuck Mason <cemason at users.sourceforge.net>
+ *
+ * Copyright (C) 2002 Florian Schulze <crow at icculus.org>
+ *
+ * This file is part of Jump'n'Bump.
+ *
+ * Jump'n'Bump is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Jump'n'Bump is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define _BSD_SOURCE
+#define _POSIX_C_SOURCE
+
+#include <stdlib.h>
+#include <string.h>
+#include "globals.h"
+#include <limits.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include "SDL.h"
+
+#ifndef NO_SDL_MIXER
+#include "SDL_mixer.h"
+
+static Mix_Music *current_music = (Mix_Music *) NULL;
+#endif
+
+sfx_data sounds[NUM_SFX];
+
+static int SAMPLECOUNT = 512;
+
+#define MAX_CHANNELS 32
+
+typedef struct {
+ /* loop flag */
+ int loop;
+ /* The channel step amount... */
+ unsigned int step;
+ /* ... and a 0.16 bit remainder of last step. */
+ unsigned int stepremainder;
+ unsigned int samplerate;
+ /* The channel data pointers, start and end. */
+ signed short* data;
+ signed short* startdata;
+ signed short* enddata;
+ /* Hardware left and right channel volume lookup. */
+ int leftvol;
+ int rightvol;
+} channel_info_t;
+
+channel_info_t channelinfo[MAX_CHANNELS];
+
+/* Sample rate in samples/second */
+int audio_rate = 44100;
+int global_sfx_volume = 0;
+/*
+// This function loops all active (internal) sound
+// channels, retrieves a given number of samples
+// from the raw sound data, modifies it according
+// to the current (internal) channel parameters,
+// mixes the per channel samples into the given
+// mixing buffer, and clamping it to the allowed
+// range.
+//
+// This function currently supports only 16bit.
+*/
+
+static void stopchan(int i)
+{
+ if (channelinfo[i].data) {
+ memset(&channelinfo[i], 0, sizeof(channel_info_t));
+ }
+}
+
+
+/*
+// This function adds a sound to the
+// list of currently active sounds,
+// which is maintained as a given number
+// (eight, usually) of internal channels.
+// Returns a handle.
+*/
+int addsfx(signed short *data, int len, int loop, int samplerate, int channel)
+{
+ stopchan(channel);
+
+ /* We will handle the new SFX. */
+ /* Set pointer to raw data. */
+ channelinfo[channel].data = data;
+ channelinfo[channel].startdata = data;
+
+ /* Set pointer to end of raw data. */
+ channelinfo[channel].enddata = channelinfo[channel].data + len - 1;
+ channelinfo[channel].samplerate = samplerate;
+
+ channelinfo[channel].loop = loop;
+ channelinfo[channel].stepremainder = 0;
+
+ return channel;
+}
+
+
+static void updateSoundParams(int slot, int volume)
+{
+ int rightvol;
+ int leftvol;
+
+ /*
+ // Set stepping
+ // MWM 2000-12-24: Calculates proportion of channel samplerate
+ // to global samplerate for mixing purposes.
+ // Patched to shift left *then* divide, to minimize roundoff errors
+ // as well as to use SAMPLERATE as defined above, not to assume 11025 Hz
+ */
+ channelinfo[slot].step = ((channelinfo[slot].samplerate<<16)/audio_rate);
+
+ leftvol = volume;
+ rightvol= volume;
+
+ /* Sanity check, clamp volume. */
+ if (rightvol < 0)
+ rightvol = 0;
+ if (rightvol > 127)
+ rightvol = 127;
+
+ if (leftvol < 0)
+ leftvol = 0;
+ if (leftvol > 127)
+ leftvol = 127;
+
+ channelinfo[slot].leftvol = leftvol;
+ channelinfo[slot].rightvol = rightvol;
+}
+
+
+void mix_sound(void *unused, Uint8 *stream, int len)
+{
+ /* Mix current sound data. */
+ /* Data, from raw sound, for right and left. */
+ register int sample;
+ register int dl;
+ register int dr;
+
+ /* Pointers in audio stream, left, right, end. */
+ signed short* leftout;
+ signed short* rightout;
+ signed short* leftend;
+ /* Step in stream, left and right, thus two. */
+ int step;
+
+ /* Mixing channel index. */
+ int chan;
+
+ /* Left and right channel */
+ /* are in audio stream, alternating. */
+ leftout = (signed short *)stream;
+ rightout = ((signed short *)stream)+1;
+ step = 2;
+
+ /* Determine end, for left channel only */
+ /* (right channel is implicit). */
+ leftend = leftout + (len/4)*step;
+
+ /* Mix sounds into the mixing buffer. */
+ /* Loop over step*SAMPLECOUNT, */
+ /* that is 512 values for two channels. */
+ while (leftout != leftend) {
+ /* Reset left/right value. */
+ dl = *leftout * 256;
+ dr = *rightout * 256;
+
+ /* Love thy L2 chache - made this a loop. */
+ /* Now more channels could be set at compile time */
+ /* as well. Thus loop those channels. */
+ for ( chan = 0; chan < MAX_CHANNELS; chan++ ) {
+ /* Check channel, if active. */
+ if (channelinfo[chan].data) {
+ /* Get the raw data from the channel. */
+ /* no filtering */
+ /* sample = *channelinfo[chan].data; */
+ /* linear filtering */
+ sample = (int)(((int)channelinfo[chan].data[0] * (int)(0x10000 - channelinfo[chan].stepremainder))
+ + ((int)channelinfo[chan].data[1] * (int)(channelinfo[chan].stepremainder))) >> 16;
+
+ /* Add left and right part */
+ /* for this channel (sound) */
+ /* to the current data. */
+ /* Adjust volume accordingly. */
+ dl += sample * (channelinfo[chan].leftvol * global_sfx_volume) / 128;
+ dr += sample * (channelinfo[chan].rightvol * global_sfx_volume) / 128;
+ /* Increment index ??? */
+ channelinfo[chan].stepremainder += channelinfo[chan].step;
+ /* MSB is next sample??? */
+ channelinfo[chan].data += channelinfo[chan].stepremainder >> 16;
+ /* Limit to LSB??? */
+ channelinfo[chan].stepremainder &= 0xffff;
+
+ /* Check whether we are done. */
+ if (channelinfo[chan].data >= channelinfo[chan].enddata) {
+ if (channelinfo[chan].loop) {
+ channelinfo[chan].data = channelinfo[chan].startdata;
+ } else {
+ stopchan(chan);
+ }
+ }
+ }
+ }
+
+ /* Clamp to range. Left hardware channel. */
+ /* Has been char instead of short. */
+ /* if (dl > 127) *leftout = 127; */
+ /* else if (dl < -128) *leftout = -128; */
+ /* else *leftout = dl; */
+
+ dl = dl / 256;
+ dr = dr / 256;
+
+ if (dl > SHRT_MAX)
+ *leftout = SHRT_MAX;
+ else if (dl < SHRT_MIN)
+ *leftout = SHRT_MIN;
+ else
+ *leftout = (signed short)dl;
+
+ /* Same for right hardware channel. */
+ if (dr > SHRT_MAX)
+ *rightout = SHRT_MAX;
+ else if (dr < SHRT_MIN)
+ *rightout = SHRT_MIN;
+ else
+ *rightout = (signed short)dr;
+
+ /* Increment current pointers in stream */
+ leftout += step;
+ rightout += step;
+ }
+}
+
+/* misc handling */
+
+char dj_init(void)
+{
+ Uint16 audio_format = MIX_DEFAULT_FORMAT;
+ int audio_channels = 2;
+ int audio_buffers = 4096;
+
+ open_screen();
+
+ if (main_info.no_sound)
+ return 0;
+
+ audio_buffers = SAMPLECOUNT*audio_rate/11025;
+
+ memset(channelinfo, 0, sizeof(channelinfo));
+ memset(sounds, 0, sizeof(sounds));
+
+#ifndef NO_SDL_MIXER
+ if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) < 0) {
+ fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
+ main_info.no_sound = 1;
+ return 1;
+ }
+
+ Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
+ printf("Opened audio at %dHz %dbit %s, %d bytes audio buffer\n", audio_rate, (audio_format & 0xFF), (audio_channels > 1) ? "stereo" : "mono", audio_buffers);
+
+ Mix_SetMusicCMD(getenv("MUSIC_CMD"));
+
+ Mix_SetPostMix(mix_sound, NULL);
+#else
+ main_info.no_sound = 1;
+ return 1;
+#endif
+
+ return 0;
+}
+
+void dj_deinit(void)
+{
+ if (main_info.no_sound)
+ return;
+
+#ifndef NO_SDL_MIXER
+ Mix_HaltMusic();
+ if (current_music)
+ Mix_FreeMusic(current_music);
+ current_music = NULL;
+
+ Mix_CloseAudio();
+#endif
+
+ SDL_Quit();
+}
+
+void dj_start(void)
+{
+}
+
+void dj_stop(void)
+{
+}
+
+char dj_autodetect_sd(void)
+{
+ return 0;
+}
+
+char dj_set_stereo(char flag)
+{
+ return 0;
+}
+
+void dj_set_auto_mix(char flag)
+{
+}
+
+unsigned short dj_set_mixing_freq(unsigned short freq)
+{
+ return freq;
+}
+
+void dj_set_dma_time(unsigned short time)
+{
+}
+
+void dj_set_nosound(char flag)
+{
+}
+
+/* mix handling */
+
+void dj_mix(void)
+{
+}
+
+/* sfx handling */
+
+char dj_set_num_sfx_channels(char num_channels)
+{
+ return num_channels;
+}
+
+void dj_set_sfx_volume(char volume)
+{
+ if (main_info.no_sound)
+ return;
+
+ SDL_LockAudio();
+ global_sfx_volume = volume*2;
+ SDL_UnlockAudio();
+}
+
+void dj_play_sfx(unsigned char sfx_num, unsigned short freq, char volume, char panning, unsigned short delay, char channel)
+{
+ int slot;
+
+ if (main_info.music_no_sound || main_info.no_sound)
+ return;
+
+ if (channel<0) {
+ for (slot=0; slot<MAX_CHANNELS; slot++)
+ if (channelinfo[slot].data==NULL)
+ break;
+ if (slot>=MAX_CHANNELS)
+ return;
+ } else
+ slot = channel;
+
+ SDL_LockAudio();
+ addsfx((short *)sounds[sfx_num].buf, sounds[sfx_num].length, sounds[sfx_num].loop, freq, slot);
+ updateSoundParams(slot, volume*2);
+ SDL_UnlockAudio();
+}
+
+char dj_get_sfx_settings(unsigned char sfx_num, sfx_data *data)
+{
+ if (main_info.no_sound)
+ return 0;
+
+ memcpy(data, &sounds[sfx_num], sizeof(sfx_data));
+ return 0;
+}
+
+char dj_set_sfx_settings(unsigned char sfx_num, sfx_data *data)
+{
+ if (main_info.no_sound)
+ return 0;
+
+ memcpy(&sounds[sfx_num], data, sizeof(sfx_data));
+ return 0;
+}
+
+void dj_set_sfx_channel_volume(char channel_num, char volume)
+{
+ if (main_info.no_sound)
+ return;
+
+ SDL_LockAudio();
+ updateSoundParams(channel_num, volume*2);
+ SDL_UnlockAudio();
+}
+
+void dj_stop_sfx_channel(char channel_num)
+{
+ if (main_info.no_sound)
+ return;
+
+ SDL_LockAudio();
+ stopchan(channel_num);
+ SDL_UnlockAudio();
+}
+
+char dj_load_sfx(unsigned char * file_handle, char *filename, int file_length, char sfx_type, unsigned char sfx_num)
+{
+ unsigned int i;
+ unsigned char *src;
+ unsigned short *dest;
+
+ if (main_info.no_sound)
+ return 0;
+
+ sounds[sfx_num].buf = malloc(file_length);
+
+ memcpy(sounds[sfx_num].buf, file_handle, file_length);
+
+ sounds[sfx_num].length = file_length / 2;
+ src = sounds[sfx_num].buf;
+ dest = (unsigned short *)sounds[sfx_num].buf;
+ for (i=0; i<sounds[sfx_num].length; i++)
+ {
+ unsigned short temp;
+ temp = src[0] + (src[1] << 8);
+ *dest = temp;
+ src += 2;
+ dest++;
+ }
+ return 0;
+}
+
+void dj_free_sfx(unsigned char sfx_num)
+{
+ if (main_info.no_sound)
+ return;
+
+ free(sounds[sfx_num].buf);
+ memset(&sounds[sfx_num], 0, sizeof(sfx_data));
+}
+
+/* mod handling */
+
+char dj_ready_mod(char mod_num)
+{
+#ifndef NO_SDL_MIXER
+ FILE *tmp;
+ int tmp_fd;
+ char* filename;
+ unsigned char *fp;
+ int len;
+
+ if (main_info.no_sound)
+ return 0;
+
+ switch (mod_num) {
+ case MOD_MENU:
+ fp = dat_open("jump.mod");
+ len = dat_filelen("jump.mod");
+ break;
+ case MOD_GAME:
+ fp = dat_open("bump.mod");
+ len = dat_filelen("bump.mod");
+ break;
+ case MOD_SCORES:
+ fp = dat_open("scores.mod");
+ len = dat_filelen("scores.mod");
+ break;
+ default:
+ fprintf(stderr, "bogus parameter to dj_ready_mod()\n");
+ fp = NULL;
+ len = 0;
+ break;
+ }
+
+ if (Mix_PlayingMusic())
+ Mix_FadeOutMusic(1500);
+
+ if (current_music) {
+ Mix_FreeMusic(current_music);
+ current_music = NULL;
+ }
+
+ if (fp == NULL) {
+ return 0;
+ }
+
+ filename = strdup("/tmp/jumpnbump.mod.XXXXXX");
+ tmp_fd = mkstemp(filename);
+ if (tmp_fd == -1) {
+ free(filename);
+ return 0;
+ }
+ tmp = fdopen(tmp_fd, "wb");
+ if (!tmp) {
+ free(filename);
+ return 0;
+ }
+ fwrite(fp, len, 1, tmp);
+ fflush(tmp);
+ fclose(tmp);
+
+ current_music = Mix_LoadMUS(filename);
+ unlink(filename);
+ free(filename);
+ if (current_music == NULL) {
+ fprintf(stderr, "Couldn't load music: %s\n", SDL_GetError());
+ return 0;
+ }
+
+#endif
+
+ return 0;
+}
+
+char dj_start_mod(void)
+{
+#ifndef NO_SDL_MIXER
+ if (main_info.no_sound)
+ return 0;
+
+ Mix_VolumeMusic(0);
+ Mix_PlayMusic(current_music, -1);
+#endif
+
+ return 0;
+}
+
+void dj_stop_mod(void)
+{
+#ifndef NO_SDL_MIXER
+ if (main_info.no_sound)
+ return;
+
+ Mix_HaltMusic();
+#endif
+}
+
+void dj_set_mod_volume(char volume)
+{
+#ifndef NO_SDL_MIXER
+ if (main_info.no_sound)
+ return;
+
+ Mix_VolumeMusic(volume);
+#endif
+}
+
+char dj_load_mod(unsigned char * file_handle, char *filename, char mod_num)
+{
+ return 0;
+}
+
+void dj_free_mod(char mod_num)
+{
+}
More information about the Pkg-games-commits
mailing list