Group :: Games/Arcade
RPM: xboing
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: 010_initial_patches.diff
Download
Download
Index: xboing-2.4/audio/soundIt.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xboing-2.4/audio/soundIt.c 2006-05-30 12:53:03.000000000 +0200
@@ -0,0 +1,483 @@
+/* SoundIt library 0.021
+
+ Copyright 1994 Brad Pitzel pitzel@cs.sfu.ca
+
+ Feel free to use/distribute/modify as long as proper credits
+ are included.
+*/
+
+#include "soundIt.h"
+#include <malloc.h>
+#include <limits.h> /* PATH_MAX */
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/soundcard.h>
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+
+/*==========================================================================*/
+/* the mix buff, where the channels are mixed into. The mix buffer is then
+ dumped to the sound device (/dev/dsp). Samples are mixed in
+ Vunclipbuf (buffer of ints), then the values in Vunclipbuf are clipped to
+ values between 0 and 255, and stored into Vclippedbuf (buffer of unsigned
+ chars).
+*/
+
+struct Mix
+ {
+ unsigned char *Vclippedbuf;
+ int *Vunclipbuf;
+ int Vsize;
+ };
+typedef struct Mix Mix;
+
+/*==========================================================================*/
+struct Channel
+ {
+ unsigned char *Vstart,*Vcurrent; /* ptr's into a playing sample */
+ int Vlen; /* length of sample in bytes */
+ int Vleft; /* bytes left of sample to play */
+ };
+typedef struct Channel Channel;
+
+/*==========================================================================*/
+
+/* variables prefixed with S_ are static */
+/* 0 if mixer isn't initialized or init failed, 1 if mixer is good */
+static int sampleMixerStatus = 0;
+
+static const Sample *S_sounds = NULL; /* ptr to array of samples */
+static int S_num_sounds = 0; /* size of 'sounds' array above */
+static int S_fd_snddev = -1; /* file # for sound device once open */
+static int S_fd_pipe[2] = { -1, -1 }; /* pipe to talk to child process */
+static int S_son_pid = -1; /* process ID for the forked sound mixer */
+static const char *S_snddev = NULL; /* char string for device, ie "/dev/dsp" */
+static int S_num_channels = 6; /* number of channels to mix */
+static int S_playback_freq = 0; /* playback frequency (in Hz) */
+/*==========================================================================*/
+/* non-public functions, used only within this file*/
+
+int Snd_init_dev();
+int Snd_restore_dev();
+
+void Chan_reset( Channel *chan ); /* init channel structure */
+
+ /* start a sample playing on a channel */
+void Chan_assign( Channel *chan, const Sample *snd );
+
+ /* mix all channels together into the 'mix' structure */
+int Chan_mixAll( Mix *mix, Channel *ch );
+
+ /* used by Chan_mixAll to mix the 1st channel */
+int Chan_copyIn( Channel *chan, Mix *mix );
+
+ /* used by Chan_mixAll to mix the middle channels */
+int Chan_mixIn( Channel *chan, Mix *mix );
+
+ /* used by Chan_mixAll to mix the last channel */
+int Chan_finalMixIn( Channel *chan, Mix *mix );
+
+
+/* alloc mem for mix buffer, and deallocate function */
+/* The sound channels are mixed together into the mix buffer */
+/* then the mix buffer data is sent directly to the sound device */
+void Mix_alloc( Mix *mix, int size );
+void Mix_dealloc( Mix *mix );
+
+/*==========================================================================*/
+/* justing for testing, normally not called */
+void dump_snd_list()
+ {
+ int i=0;
+
+ for(i=0; i<S_num_sounds; i++)
+ {
+ printf("snd %d: len = %d \n", i, S_sounds[i].len );
+ }
+ }
+
+/*==========================================================================*/
+int Snd_init( int num_snd, const Sample *sa, int frequency,
+ int channels, const char *dev )
+ {
+ int result;
+
+ S_num_sounds = num_snd;
+ S_sounds = sa; /* array of sound samples*/
+ S_playback_freq = frequency;
+ S_num_channels = channels;
+ S_snddev= dev; /* sound device, eg /dev/dsp*/
+
+ if (S_sounds==NULL)
+ return EXIT_FAILURE;
+
+ result=Snd_init_dev();
+
+ if (result==EXIT_SUCCESS)
+ {
+ sampleMixerStatus=1;
+ }
+ else
+ {
+ sampleMixerStatus=0;
+ }
+
+ return result;
+ }
+
+/*==========================================================================*/
+int Snd_restore()
+ {
+ int result;
+
+ if (!sampleMixerStatus)
+ return EXIT_FAILURE;
+
+ result=Snd_restore_dev();
+
+ if (result==EXIT_SUCCESS)
+ {
+ sampleMixerStatus=0;
+ }
+ else
+ {
+ sampleMixerStatus=0;
+ }
+
+ return result;
+ }
+
+/*==========================================================================*/
+/* volume control not implemented yet.*/
+int Snd_effect( int sound_num, int channel )
+ {
+ if(! sampleMixerStatus )
+ return EXIT_FAILURE;
+
+ if(S_sounds[sound_num].data != NULL)
+ {
+ write(S_fd_pipe[1], &sound_num, sizeof(sound_num));
+ write(S_fd_pipe[1], &channel, sizeof(channel));
+ }
+ else
+ fprintf(stderr,"Referencing NULL sound entry\n");
+
+ return EXIT_SUCCESS;
+ }
+
+/*============================================================================*/
+int Snd_init_dev()
+ {
+ int whoami;
+ S_fd_snddev = -1;
+
+ S_son_pid = 0;
+
+
+ if(access(S_snddev,W_OK) != 0)
+ {
+ perror("No access to sound device");
+ return EXIT_FAILURE;
+ }
+
+ S_fd_snddev = open(S_snddev,O_WRONLY);
+
+ if(S_fd_snddev < 0)
+ {
+ fprintf(stderr,"int_snddev: Cannot open sound device \n");
+ return EXIT_FAILURE;
+ }
+
+ close(S_fd_snddev);
+
+ if(pipe(S_fd_pipe) < 0)
+ {
+ fprintf(stderr,"Cannot create pipe for sound control \n");
+ return EXIT_FAILURE;
+ }
+
+ /* now setup 2nd process for writing the data... */
+ if((whoami = fork()) < 0)
+ {
+ fprintf(stderr,"Cannot fork sound driver\n");
+ return EXIT_FAILURE;
+ }
+
+ if(whoami != 0) /* successfully created son */
+ {
+ close(S_fd_pipe[0]); /* close end for reading */
+ S_son_pid = whoami;
+ return EXIT_SUCCESS;
+ }
+
+ /* Here is the code for the son... */
+ {
+ int sound_num,ch,i;
+ struct timeval tval = {0L,0L};
+ fd_set readfds,dsp;
+
+ Mix mix;
+
+ int frag, fragsize;
+
+ Channel *chan = (Channel*)malloc( sizeof(Channel)*S_num_channels );
+
+ for (i=0; i<S_num_channels; i++)
+ Chan_reset( chan+i );
+
+ S_fd_snddev = open(S_snddev,O_WRONLY );
+ if(S_fd_snddev < 0)
+ {
+ perror("Cannot open sound device: ");
+ exit(1);
+ }
+
+ frag = FRAG_SPEC; /*defined in soundIt.h */
+
+ ioctl(S_fd_snddev, SNDCTL_DSP_SETFRAGMENT, &frag);
+
+ if ( ioctl(S_fd_snddev,SNDCTL_DSP_SPEED, &S_playback_freq)==-1 )
+ perror("Sound driver ioctl ");
+
+ fragsize=0;
+ if ( ioctl(S_fd_snddev,SNDCTL_DSP_GETBLKSIZE, &fragsize)==-1 )
+ perror("Sound driver ioctl ");
+
+ /* printf("after: block size: %d \n",fragsize); */
+
+ /* init mixer object*/
+ Mix_alloc( &mix, fragsize );
+
+ close(S_fd_pipe[1]); /* close end for writing */
+
+ FD_ZERO(&dsp);
+ FD_SET(S_fd_snddev, &dsp);
+
+ FD_ZERO(&readfds);
+ FD_SET(S_fd_pipe[0], &readfds);
+
+ printf("Sound driver initialized.\n");
+
+ for(;;)
+ {
+ FD_SET(S_fd_pipe[0], &readfds);
+ tval.tv_sec=0L;
+ tval.tv_usec=0L;
+ select(S_fd_pipe[0]+1, &readfds,NULL,NULL,&tval);
+
+ if (FD_ISSET(S_fd_pipe[0], &readfds))
+ {
+ if (read(S_fd_pipe[0], &sound_num, sizeof(int))==0)
+ break;
+
+ read(S_fd_pipe[0], &ch, sizeof(int));
+
+ /* printf("chan=%d snd=%d len=%d \n", ch, sound_num, S_sounds[sound_num].len ); */
+ Chan_assign( &(chan[ch]), &(S_sounds[sound_num]) );
+ }
+
+ Chan_mixAll(&mix,chan);
+ write(S_fd_snddev, mix.Vclippedbuf, fragsize );
+ }
+
+ Mix_dealloc( &mix );
+ printf("Sound process exiting..\n");
+ close(S_fd_pipe[0]);
+ close(S_fd_pipe[1]);
+ exit (0);
+ } /*end of child process */
+ }
+
+
+/*==========================================================================*/
+int Snd_restore_dev()
+ {
+ close(S_fd_pipe[0]);
+ close(S_fd_pipe[1]);
+
+ /* wait for child process to die*/
+ wait(NULL);
+ return EXIT_SUCCESS;
+ }
+
+/*==========================================================================*/
+/* CHANNEL MIXING FUNCTIONS */
+/*==========================================================================*/
+void Chan_reset( Channel *chan )
+ {
+ chan->Vstart=NULL;
+ chan->Vcurrent=NULL;
+ chan->Vlen=0;
+ chan->Vleft=0;
+ }
+
+/*==========================================================================*/
+void Chan_assign( Channel *chan, const Sample *snd )
+ {
+ chan->Vstart = snd->data;
+ chan->Vcurrent= chan->Vstart;
+ chan->Vlen = snd->len;
+ chan->Vleft = snd->len;
+ }
+
+/*==========================================================================*/
+int Chan_copyIn( Channel *chan, Mix *mix )
+ {
+ int i,*p = mix->Vunclipbuf, result, min;
+
+ result = (chan->Vleft>0) ? 1 : 0;
+ min = (chan->Vleft < mix->Vsize) ? chan->Vleft : mix->Vsize;
+
+ for(i=0; i<min; i++)
+ {
+ *p++ = (int) *chan->Vcurrent++;
+ }
+ chan->Vleft -= i;
+
+ /* fill the remaining (if any) part of the mix buffer with silence */
+ while (i<mix->Vsize)
+ {
+ *p++ = 128;
+ i++;
+ }
+ return result;
+ }
+
+/*==========================================================================*/
+int Chan_mixIn( Channel *chan, Mix *mix )
+ {
+ int i,*p = mix->Vunclipbuf, result, min;
+
+ result = (chan->Vleft>0) ? 1 : 0;
+ min = (chan->Vleft < mix->Vsize) ? chan->Vleft : mix->Vsize;
+
+ for(i=0; i<min; i++)
+ {
+ *p++ += (int) (*chan->Vcurrent++) - 128;
+ }
+
+ chan->Vleft -= i;
+ return result;
+ }
+
+/*========================================================================*/
+/* clip an int to a value between 0 and 255 */
+static inline
+unsigned char clip(int i)
+ {
+ return (i<0) ? 0 : ( (i>255) ? 255 : i );
+ }
+
+/*==========================================================================*/
+int Chan_finalMixIn( Channel *chan, Mix *mix )
+ {
+ register int i;
+ int *p = mix->Vunclipbuf, result, min;
+ unsigned char *final = mix->Vclippedbuf;
+
+ result = (chan->Vleft>0) ? 1 : 0;
+ min = (chan->Vleft < mix->Vsize) ? chan->Vleft : mix->Vsize;
+
+ for(i=0; i<min; i++)
+ {
+ *p += (int) (*chan->Vcurrent++) - 128;
+ *final++ = clip(*p++);
+ }
+ chan->Vleft -= i;
+
+ /* copy rest of Vunclipbuf over to Vclippedbuf */
+ while (i<mix->Vsize)
+ {
+ *final++ = clip(*p++);
+ i++;
+ }
+
+ return result;
+ }
+
+
+/*==========================================================================*/
+void Mix_alloc(Mix *mix, int size)
+ {
+ mix->Vclippedbuf = (unsigned char *)calloc( sizeof(char), size);
+ mix->Vunclipbuf = (int *)calloc( sizeof(int), size);
+ mix->Vsize = size;
+
+ if ((mix->Vclippedbuf==NULL)||(mix->Vunclipbuf==NULL))
+ {
+ fprintf(stderr,"Unable to allocate memory for mixer buffer\n");
+ exit(-1);
+ }
+ }
+
+/*==========================================================================*/
+void Mix_dealloc( Mix *mix)
+ {
+ if (mix->Vclippedbuf) free(mix->Vclippedbuf);
+ if (mix->Vunclipbuf) free(mix->Vunclipbuf);
+ }
+
+/*==========================================================================*/
+/* Mixes together the channels into one sound.
+ Returns # of channels currently playing *any* sound
+ Therefore, return 0 means to channels have a sample, therefore no
+ sound is playing
+*/
+int Chan_mixAll( Mix *mix, Channel *chan )
+ {
+ int result = 0,i=0;
+
+ result = Chan_copyIn( chan, mix);
+
+ /* we want to loop for S_num_channels-2 */
+ for(i=2;i<S_num_channels;i++)
+ result += Chan_mixIn( ++chan, mix);
+
+ result += Chan_finalMixIn( ++chan, mix);
+
+ return result;
+ }
+
+/*==========================================================================*/
+/* given the name of a .raw sound file, load it into the Sample struct */
+/* pointed to by 'sample' */
+/* Returns -1 couldn't open/read file */
+/* -2 couldn't alloc memory) */
+int
+Snd_loadRawSample( const char *file, Sample *sample )
+ {
+ FILE *fp;
+
+ sample->data = NULL;
+ sample->len = 0;
+
+ fp = fopen(file,"r");
+
+ if (fp==NULL) return -1;
+
+ /* get length of the file */
+ sample->len = lseek( fileno(fp), 0, SEEK_END );
+
+ /* go back to beginning of file */
+ lseek( fileno(fp), 0, SEEK_SET );
+
+ /* alloc memory for sample */
+ sample->data = (unsigned char *)malloc( sample->len );
+
+ if (sample->data==NULL)
+ {
+ fclose(fp);
+ return -2;
+ }
+
+ fread( sample->data, 1, sample->len, fp );
+
+ fclose(fp);
+
+ return 0;
+ }
Index: xboing-2.4/audio/soundIt.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xboing-2.4/audio/soundIt.h 2006-05-30 12:53:03.000000000 +0200
@@ -0,0 +1,82 @@
+/* SoundIt library 0.03
+
+ Copyright 1994 Brad Pitzel pitzel@cs.sfu.ca
+
+ Feel free to use/distribute/modify as long as proper credits
+ are included.
+*/
+
+/* Designed for digital sound effects in games.
+
+ Will mix channels of mono 8-bit raw samples, & play back in "real-time".
+ Each channel can only play one sample at a time, but all
+ channels can play a different sample simultaneously.
+
+ If you have sox, use the ' -t .ub ' option to make samples
+ that this library will play properly.
+
+ I wrote this in C, instead of C++, so hopefully a few more people will
+ take a look and make it better :-)
+*/
+
+#ifndef SOUNDIT_VERS
+#define SOUNDIT_VERS "0.03"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+/* 00002 = 2 fragments */
+/* 00007 = means each fragment is 2^7 or 128 bytes */
+/* See voxware docs (in /usr/src/linux/drivers/sound) for more info */
+#define FRAG_SPEC 0x00020007
+
+/*==========================================================================*/
+struct Sample
+ {
+ unsigned char *data; /* unsigned 8-bit raw samples */
+ int len; /* length of sample in bytes */
+ };
+
+typedef struct Sample Sample;
+
+/* given the name of a .raw sound file, load it into the Sample struct */
+/* pointed to by 'sample' */
+int
+Snd_loadRawSample( const char *file, Sample *sample );
+
+
+/*==========================================================================*/
+/* init sound device, etc.. */
+/* num_snd = the number of samples in the sample array *sa */
+/* sa = the sample array */
+/* freq = the rate (Hz) to play back the samples */
+/* channels = # of channels to mix */
+/* sound_device = a char string for the sound device, eg, "/dev/dsp" */
+/* returns: 0=success, -1=failure.*/
+int
+Snd_init( int num_snd, const Sample *sa, int freq,
+ int channels, const char *sound_device );
+
+
+/* shutdown sample player, free mem, etc/etc..*/
+int
+Snd_restore();
+
+
+/* play a sound effect in the given channel 1..n*/
+/* volume = integers from 0 (off) to 100 (full volume)*/
+int
+Snd_effect( int nr, int channel );
+
+
+/* stop a channel (1..n) from playing*/
+/*void
+Snd_reset(enum snd_channel channel);*/
+
+
+/* stop all channels from playing*/
+/*void
+Snd_reset();*/
+
+
+#endif
Index: xboing-2.4/Imakefile
===================================================================
--- xboing-2.4.orig/Imakefile 2006-05-30 12:52:57.000000000 +0200
+++ xboing-2.4/Imakefile 2006-05-30 12:53:03.000000000 +0200
@@ -24,18 +24,24 @@
XCOMM This is the directory where the highscore, level & sound data will be
XCOMM placed. Default will be the current directory.
- XBOING_DIR = .
+ XBOING_DIR = /usr/lib/games/xboing
+
+XCOMM Added these to override defaults so make install installs into
+XCOMM $PREFIX and /usr/games -- Joey Hess.
+
+ BINDIR = $(PREFIX)/usr/games
XCOMM These are some defines that must be set. Some may be overwritten in the
XCOMM machine arch section.
- XPMLIB = -L/usr/X11/lib -lXpm
+ XPMLIB = -lXpm
XPMINCLUDE = -I/usr/X11/include/X11
XBOINGINCLUDE = -I./include
LEVEL_INSTALL_DIR = $(XBOING_DIR)/levels
SOUNDS_DIR = $(XBOING_DIR)/sounds
BACKUP_DIR = $(XBOING_DIR)/../backups
- HIGH_SCORE_FILE = $(XBOING_DIR)/.xboing.scr
+ HIGH_SCORE_DIR = /var/lib/games
+ HIGH_SCORE_FILE = $(HIGH_SCORE_DIR)/xboing.score
AUDIO_AVAILABLE = False
AUDIO_SRC = audio/NOaudio.c
AUDIO_INCLUDE =
@@ -44,6 +50,7 @@
XCOMM Uncomment this if you want to use ANY of the AUDIO sound systems
#define COMPILE_IN_AUDIO
+#define linux
XCOMM Uncomment this if you want to use RPLAY sound system
XCOMM #define USE_RPLAY
@@ -62,9 +69,9 @@
#if defined(LinuxArchitecture) && defined(COMPILE_IN_AUDIO)
AUDIO_AVAILABLE = True
- AUDIO_SRC = audio/LINUXaudio.c
+ AUDIO_SRC = audio/LINUXaudio2.c
AUDIO_INCLUDE =
- AUDIO_LIB =
+ AUDIO_LIB =
#endif /* linux */
#if defined(svr4) && defined(COMPILE_IN_AUDIO)
@@ -81,7 +88,7 @@
AUDIO_LIB = -laudio
#endif /* SGIArchitecture */
-#if defined(SparcArchitecture) && defined(COMPILE_IN_AUDIO)
+#if defined(SparcArchitecture) && !defined(LinuxArchitecture) && defined(COMPILE_IN_AUDIO)
AUDIO_AVAILABLE = True
AUDIO_SRC = audio/SUNaudio.c
@@ -132,7 +139,7 @@
-DLEVEL_INSTALL_DIR=\"$(LEVEL_INSTALL_DIR)\" \
-DAUDIO_AVAILABLE=\"$(AUDIO_AVAILABLE)\" \
-DSOUNDS_DIR=\"$(SOUNDS_DIR)\" \
- -DREADMEP_FILE=\"$(XBOING_DIR)/docs/problems.doc\"
+ -DREADMEP_FILE=\"/usr/share/doc/xboing/problems.doc.gz\"
XCOMM -DUSE_FLOCK=\"True\" \
XCOMM -DNEED_USLEEP=\"True\" \
XCOMM -DNO_LOCKING=\"True\"
@@ -159,7 +166,7 @@
highscore.o misc.o inst.o gun.o keys.o \
audio.o special.o presents.o demo.o file.o \
preview.o dialogue.o eyedude.o editor.o \
- keysedit.o
+ keysedit.o audio/soundIt.o
PROGRAMS = xboing
@@ -174,6 +181,10 @@
$(RM) $@
$(LN) $? $@
+audio/soundIt.c:
+ cd audio && \
+ gcc -Wall -O2 -finline-functions -fomit-frame-pointer -ffast-math -I. -c soundIt.c -o soundIt.o
+
depend:: version.c audio.c
ComplexProgramTarget_1($(PROGRAMS), $(LOCAL_LIBRARIES), )
@@ -182,30 +193,31 @@
@echo "XBoing directory is " $(XBOING_DIR)
@:
@echo "Creating directory " $(XBOING_DIR)
- @if [ ! -d $(XBOING_DIR) ]; then mkdir $(XBOING_DIR); fi
- $(INSTALL) -c $(INSTDATFLAGS) docs/problems.doc $(XBOING_DIR)
+ @if [ ! -d $(PREFIX)/$(XBOING_DIR) ]; then install -d $(PREFIX)/$(XBOING_DIR); fi
+ # $(INSTALL) -c $(INSTDATFLAGS) docs/problems.doc $(XBOING_DIR)
@:
@echo "Creating directory " $(LEVEL_INSTALL_DIR)
- @if [ ! -d $(LEVEL_INSTALL_DIR) ]; then mkdir $(LEVEL_INSTALL_DIR); fi
+ @if [ ! -d $(PREFIX)/$(LEVEL_INSTALL_DIR) ]; then install -d $(PREFIX)/$(LEVEL_INSTALL_DIR); fi
@:
@echo "Copying level data into directory " $(LEVEL_INSTALL_DIR)
@cd ./levels; set -x; for file in *.data; do \
- $(INSTALL) -c $(INSTDATFLAGS) $$file $(LEVEL_INSTALL_DIR);\
+ $(INSTALL) -c $(INSTDATFLAGS) $$file $(PREFIX)/$(LEVEL_INSTALL_DIR);\
done
@:
@if [ "$(AUDIO_AVAILABLE)" = "True" ]; \
then \
echo "Creating directory " $(SOUNDS_DIR); \
- if [ ! -d $(SOUNDS_DIR) ]; then mkdir $(SOUNDS_DIR); fi;\
+ if [ ! -d $(PREFIX)/$(SOUNDS_DIR) ]; then install -d $(PREFIX)/$(SOUNDS_DIR); fi;\
echo "Copying sound files into directory " $(SOUNDS_DIR);\
cd ./sounds; set -x; for file in *.au; do \
- $(INSTALL) -c $(INSTDATFLAGS) $$file $(SOUNDS_DIR); \
+ $(INSTALL) -c $(INSTDATFLAGS) $$file $(PREFIX)/$(SOUNDS_DIR); \
done; \
fi
@:
@echo "Creating a highscore file " $(HIGH_SCORE_FILE)
- @touch $(HIGH_SCORE_FILE);
- @chmod a+rw $(HIGH_SCORE_FILE);
+ $(INSTALL) -d $(PREFIX)/$(HIGH_SCORE_DIR);
+# @touch $(PREFIX)/$(HIGH_SCORE_FILE);
+# @chmod 664 $(PREFIX)/$(HIGH_SCORE_FILE);
XCOMM I use this for my daily backup of my code.
Index: xboing-2.4/demo.c
===================================================================
--- xboing-2.4.orig/demo.c 2006-05-30 12:52:57.000000000 +0200
+++ xboing-2.4/demo.c 2006-05-30 12:53:03.000000000 +0200
@@ -154,7 +154,7 @@
/* Construct the demo level filename */
if ((str = getenv("XBOING_LEVELS_DIR")) != NULL)
- sprintf(levelPath, "%s/demo.data", str);
+ snprintf(levelPath, sizeof(levelPath),"%s/demo.data", str);
else
sprintf(levelPath, "%s/demo.data", LEVEL_INSTALL_DIR);
Index: xboing-2.4/editor.c
===================================================================
--- xboing-2.4.orig/editor.c 2006-05-30 12:52:57.000000000 +0200
+++ xboing-2.4/editor.c 2006-05-30 12:53:03.000000000 +0200
@@ -213,7 +213,7 @@
/* Construct the Edit level filename */
if ((str = getenv("XBOING_LEVELS_DIR")) != NULL)
- sprintf(levelPath, "%s/editor.data", str);
+ snprintf(levelPath,sizeof(levelPath)-1, "%s/editor.data", str);
else
sprintf(levelPath, "%s/editor.data", LEVEL_INSTALL_DIR);
@@ -958,8 +958,8 @@
if ((num > 0) && (num <= MAX_NUM_LEVELS))
{
/* Construct the Edit level filename */
- if ((str2 = getenv("XBOING_LEVELS_DIR")) != NULL)
- sprintf(levelPath, "%s/level%02ld.data", str2, (u_long) num);
+ if ((str2 = getenv("XBOING_LEVELS_DIR")) != NULL)
+ snprintf(levelPath, sizeof(levelPath)-1,"%s/level%02ld.data", str2, (u_long) num);
else
sprintf(levelPath, "%s/level%02ld.data",
LEVEL_INSTALL_DIR, (u_long) num);
@@ -1017,9 +1017,9 @@
num = atoi(str);
if ((num > 0) && (num <= MAX_NUM_LEVELS))
{
- /* Construct the Edit level filename */
- if ((str2 = getenv("XBOING_LEVELS_DIR")) != NULL)
- sprintf(levelPath, "%s/level%02ld.data", str2, (u_long) num);
+ /* Construct the Edit level filename */
+ if ((str2 = getenv("XBOING_LEVELS_DIR")) != NULL)
+ snprintf(levelPath, sizeof(levelPath)-1,"%s/level%02ld.data", str2, (u_long) num);
else
sprintf(levelPath, "%s/level%02ld.data",
LEVEL_INSTALL_DIR, (u_long) num);
Index: xboing-2.4/error.c
===================================================================
--- xboing-2.4.orig/error.c 2006-05-30 12:52:58.000000000 +0200
+++ xboing-2.4/error.c 2006-05-30 12:53:03.000000000 +0200
@@ -87,8 +87,8 @@
#ifndef READMEP_FILE
/* Repeated to generate a message when compiling */
-#define READMEP_FILE "README.problems"
-#define READMEP_FILE "README.problems"
+#define READMEP_FILE "README.problems.doc.gz"
+#define READMEP_FILE "README.problems.doc.gz"
#endif
/* Print a standard error message to stdout and flush it */
fprintf(stdout, "XBoing - Error: %s\n", message);
Index: xboing-2.4/file.c
===================================================================
--- xboing-2.4.orig/file.c 2006-05-30 12:52:58.000000000 +0200
+++ xboing-2.4/file.c 2006-05-30 12:53:03.000000000 +0200
@@ -139,7 +139,7 @@
/* Construct the level filename */
if ((str = getenv("XBOING_LEVELS_DIR")) != NULL)
- sprintf(levelPath, "%s/level%02ld.data", str, newLevel);
+ snprintf(levelPath,sizeof(levelPath), "%s/level%02ld.data", str, newLevel);
else
sprintf(levelPath, "%s/level%02ld.data", LEVEL_INSTALL_DIR, newLevel);
@@ -177,7 +177,7 @@
static int bgrnd = 1;
/* Save the file in home directory - construct path */
- sprintf(levelPath, "%s/.xboing-saveinfo", GetHomeDir());
+ snprintf(levelPath, sizeof(levelPath)-1, "%s/.xboing-saveinfo", GetHomeDir());
/* Open the save file info for reading */
if ((saveFile = fopen(levelPath, "r+")) == NULL)
@@ -239,7 +239,7 @@
DisplayLevelInfo(display, levelWindow, level);
/* Load the saved file in home directory - construct path */
- sprintf(levelPath, "%s/.xboing-savelevel", GetHomeDir());
+ snprintf(levelPath, sizeof(levelPath)-1, "%s/.xboing-savelevel", GetHomeDir());
/* Read in the saved level data */
if (ReadNextLevel(display, window, levelPath, True) == False)
@@ -283,7 +283,7 @@
saveGame.numBullets = GetNumberBullets();
/* Save the file in home directory - construct path */
- sprintf(levelPath, "%s/.xboing-saveinfo", GetHomeDir());
+ snprintf(levelPath, sizeof(levelPath)-1, "%s/.xboing-saveinfo", GetHomeDir());
/* Open the save file info for writing */
if ((saveFile = fopen(levelPath, "w+")) == NULL)
@@ -309,7 +309,7 @@
WarningMessage("Cannot close save game info file.");
/* Save the file in home directory - construct path */
- sprintf(levelPath, "%s/.xboing-savelevel", GetHomeDir());
+ snprintf(levelPath, sizeof(levelPath)-1, "%s/.xboing-savelevel", GetHomeDir());
if (SaveLevelDataFile(display, levelPath) == True)
{
Index: xboing-2.4/highscore.c
===================================================================
--- xboing-2.4.orig/highscore.c 2006-05-30 12:52:58.000000000 +0200
+++ xboing-2.4/highscore.c 2006-05-30 12:53:03.000000000 +0200
@@ -1023,7 +1023,7 @@
{
/* Use the environment variable if it exists */
if ((str = getenv("XBOING_SCORE_FILE")) != NULL)
- strcpy(filename, str);
+ strncpy(filename, str, sizeof(filename)-1);
else
strcpy(filename, HIGH_SCORE_FILE);
}
@@ -1095,7 +1095,7 @@
{
/* Use the environment variable if it exists */
if ((str = getenv("XBOING_SCORE_FILE")) != NULL)
- strcpy(filename, str);
+ strncpy(filename, str, sizeof(filename)-1);
else
strcpy(filename, HIGH_SCORE_FILE);
}
@@ -1218,7 +1218,7 @@
/* Use the environment variable if it exists */
if ((str = getenv("XBOING_SCORE_FILE")) != NULL)
- strcpy(filename, str);
+ strncpy(filename, str, sizeof(filename)-1);
else
strcpy(filename, HIGH_SCORE_FILE);
Index: xboing-2.4/init.c
===================================================================
--- xboing-2.4.orig/init.c 2006-05-30 12:52:58.000000000 +0200
+++ xboing-2.4/init.c 2006-05-30 12:53:03.000000000 +0200
@@ -438,7 +438,7 @@
WarningMessage("Your X Window system display variable is not set.");
else
{
- sprintf(string, "Cannot connect to display called <%s>.", displayName);
+ snprintf(string, sizeof(string) - 1, "Cannot connect to display called <%s>.", displayName);
WarningMessage(string);
}
}
Index: xboing-2.4/misc.c
===================================================================
--- xboing-2.4.orig/misc.c 2006-05-30 12:52:58.000000000 +0200
+++ xboing-2.4/misc.c 2006-05-30 12:53:03.000000000 +0200
@@ -116,6 +116,10 @@
long SyncTime;
static unsigned long accu;
+#ifdef __alpha__
+ ms *= 1000; /* convert from milliseconds to microseconds for usleep */
+#endif
+
gettimeofday(&st, NULL);
XSync(display, False);
gettimeofday(&et, NULL);
@@ -427,7 +431,7 @@
*/
if ((ptr = getenv("HOME")) != NULL)
- (void) strcpy(dest, ptr);
+ (void) strncpy(dest, ptr,sizeof(dest)-1);
else
{
/* HOME variable is not present so get USER var */
@@ -441,7 +445,7 @@
}
if (pw)
- (void) strcpy(dest, pw->pw_dir);
+ (void) strncpy(dest, pw->pw_dir, sizeof(dest)-1);
else
*dest = '\0';
}
Index: xboing-2.4/preview.c
===================================================================
--- xboing-2.4.orig/preview.c 2006-05-30 12:52:58.000000000 +0200
+++ xboing-2.4/preview.c 2006-05-30 12:53:03.000000000 +0200
@@ -139,7 +139,7 @@
/* Construct the Preview level filename */
if ((str = getenv("XBOING_LEVELS_DIR")) != NULL)
- sprintf(levelPath, "%s/level%02d.data", str, lnum);
+ snprintf(levelPath, sizeof(levelPath)-1, "%s/level%02d.data", str, lnum);
else
sprintf(levelPath, "%s/level%02d.data", LEVEL_INSTALL_DIR, lnum);