r9672 - in packages/trunk/alex4/debian: . patches
Peter De Wachter
pdewacht-guest at alioth.debian.org
Tue May 5 00:08:59 UTC 2009
Author: pdewacht-guest
Date: 2009-05-05 00:08:59 +0000 (Tue, 05 May 2009)
New Revision: 9672
Added:
packages/trunk/alex4/debian/patches/unix-port.patch
Removed:
packages/trunk/alex4/debian/patches/from-fedora.patch
Modified:
packages/trunk/alex4/debian/changelog
Log:
alex4: Honor the HOME environment variable (Closes: #507950)
Modified: packages/trunk/alex4/debian/changelog
===================================================================
--- packages/trunk/alex4/debian/changelog 2009-05-05 00:08:05 UTC (rev 9671)
+++ packages/trunk/alex4/debian/changelog 2009-05-05 00:08:59 UTC (rev 9672)
@@ -6,8 +6,9 @@
[ Peter De Wachter ]
* Fixed a bug that the made level selection screen unresponsive on
some systems.
+ * Honor the HOME environment variable. (Closes: #507950)
- -- Peter De Wachter <pdewacht at gmail.com> Tue, 05 May 2009 02:07:13 +0200
+ -- Peter De Wachter <pdewacht at gmail.com> Tue, 05 May 2009 02:08:14 +0200
alex4 (1.1-2) unstable; urgency=low
Deleted: packages/trunk/alex4/debian/patches/from-fedora.patch
===================================================================
--- packages/trunk/alex4/debian/patches/from-fedora.patch 2009-05-05 00:08:05 UTC (rev 9671)
+++ packages/trunk/alex4/debian/patches/from-fedora.patch 2009-05-05 00:08:59 UTC (rev 9672)
@@ -1,814 +0,0 @@
-Hans de Goede's patch for Fedora.
-
-Index: alex4-1.1/src/main.c
-===================================================================
---- alex4-1.1.orig/src/main.c 2008-01-26 21:33:48.000000000 +0100
-+++ alex4-1.1/src/main.c 2008-01-26 21:34:05.000000000 +0100
-@@ -38,6 +38,7 @@
- #include "main.h"
- #include "edit.h"
- #include "shooter.h"
-+#include "unix.h"
-
- #include "../data/data.h"
-
-@@ -66,7 +67,6 @@
- Tscroller hscroll;
- Thisc *hisc_table;
- Thisc *hisc_table_space;
--char working_directory[1024];
-
- // the map
- Tmap *map = NULL;
-@@ -126,6 +126,7 @@
- int playing_original_game = 1;
- int init_ok = 0;
-
-+static FILE* log_fp = NULL;
-
-
- // // // // // // // // // // // // // // // // // // // // //
-@@ -154,20 +155,18 @@
- // loggs the text to the text file
- void log2file(char *format, ...) {
- va_list ptr; /* get an arg pointer */
-- FILE *fp;
-
-- fp = fopen("log.txt", "at");
-- if (fp) {
-+ if (log_fp) {
- /* initialize ptr to point to the first argument after the format string */
- va_start(ptr, format);
-
- /* Write to logfile. */
-- vfprintf(fp, format, ptr); // Write passed text.
-- fprintf(fp, "\n"); // New line..
-+ vfprintf(log_fp, format, ptr); // Write passed text.
-+ fprintf(log_fp, "\n"); // New line..
-
- va_end(ptr);
-
-- fclose(fp);
-+ fflush(log_fp);
- }
-
- }
-@@ -618,6 +617,10 @@
- BITMAP *bmp;
- int i;
- int w, h;
-+#ifdef __unix__
-+ char filename[512];
-+ char *homedir = get_homedir();
-+#endif
-
- log2file("\nInit routines:");
-
-@@ -625,7 +628,13 @@
- log2file(" initializing allegro");
- text_mode(-1);
- garble_string(init_string, 53);
-+#ifdef __unix__
-+ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.ini",
-+ homedir? homedir:".");
-+ override_config_file(filename);
-+#else
- set_config_file("alex4.ini");
-+#endif
- set_window_close_button(FALSE);
-
- // install timers
-@@ -695,6 +704,7 @@
- textout_centre(swap_screen, font, "loading...", 320, 200, 1);
- blit_to_screen(swap_screen);
-
-+#ifndef __unix__
- // set switch modes and callbacks
- if (set_display_switch_mode(SWITCH_PAUSE) < 0)
- log2file(" * display switch mode failed");
-@@ -702,6 +712,7 @@
- log2file(" * display switch in failed");
- if (set_display_switch_callback(SWITCH_OUT, display_switch_out) < 0)
- log2file(" * display switch out failed");
-+#endif
-
-
- // set win title (no! really???)
-@@ -718,7 +729,7 @@
- // load data
- log2file(" loading data");
- packfile_password(init_string);
-- data = load_datafile("data/data.dat");
-+ data = load_datafile(DATADIR "data.dat");
- packfile_password(NULL);
- if (data == NULL) {
- log2file(" *** failed");
-@@ -728,7 +739,13 @@
-
- // load options
- log2file(" loading options");
-+#ifdef __unix__
-+ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.sav",
-+ homedir? homedir:".");
-+ pf = pack_fopen(filename, "rp");
-+#else
- pf = pack_fopen("alex4.sav", "rp");
-+#endif
- if (pf) {
- load_options(&options, pf);
- pack_fclose(pf);
-@@ -740,7 +757,13 @@
-
- // loading highscores
- log2file(" loading hiscores");
-+#ifdef __unix__
-+ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.hi",
-+ homedir? homedir:".");
-+ pf = pack_fopen(filename, "rp");
-+#else
- pf = pack_fopen("alex4.hi", "rp");
-+#endif
- if (pf) {
- load_hisc_table(hisc_table, pf);
- load_hisc_table(hisc_table_space, pf);
-@@ -776,7 +799,7 @@
- log2file(" loading original maps");
- packfile_password(init_string);
- num_levels = -1; // skip end object when counting
-- maps = load_datafile_callback("data/maps.dat", count_maps_callback);
-+ maps = load_datafile_callback(DATADIR "maps.dat", count_maps_callback);
- packfile_password(NULL);
- if (maps == NULL) {
- log2file(" *** failed");
-@@ -835,11 +858,12 @@
- // install sound
- log2file(" installing sound");
- set_volume_per_voice(0);
-- switch(get_config_int("sound", "sound_device", 0)) {
-+ switch(get_config_int("sound", "sound_device", 1)) {
- case 1:
- i = DIGI_AUTODETECT;
- log2file(" DIGI_AUTODETECT selected (%d)", i);
- break;
-+#ifdef ALLEGRO_WINDOWS
- case 2:
- i = DIGI_DIRECTX(0);
- log2file(" DIGI_DIRECTX(0) selected (%d)", i);
-@@ -848,6 +872,20 @@
- i = DIGI_DIRECTAMX(0);
- log2file(" DIGI_DIRECTAMX(0) selected (%d)", i);
- break;
-+#elif defined ALLEGRO_UNIX
-+#ifdef DIGI_OSS
-+ case 2:
-+ i = DIGI_OSS;
-+ log2file(" DIGI_OSS selected (%d)", i);
-+ break;
-+#endif
-+#ifdef DIGI_ALSA
-+ case 3:
-+ i = DIGI_ALSA;
-+ log2file(" DIGI_ALSA selected (%d)", i);
-+ break;
-+#endif
-+#endif
- default:
- i = -770405; // dummy number
- got_sound = 0;
-@@ -870,9 +908,9 @@
- if (get_config_int("sound", "use_sound_datafile", 1)) {
- log2file(" loading sound datafile");
- packfile_password(init_string);
-- sfx_data = load_datafile("data/sfx_44.dat");
-+ sfx_data = load_datafile(DATADIR "sfx_44.dat");
- if (sfx_data == NULL) {
-- sfx_data = load_datafile("data/sfx_22.dat");
-+ sfx_data = load_datafile(DATADIR "sfx_22.dat");
- log2file(" sfx_44.dat not found");
- s = 0;
- }
-@@ -971,6 +1009,10 @@
- void uninit_game() {
- int i;
- PACKFILE *pf;
-+#ifdef __unix__
-+ char filename[512];
-+ char *homedir = get_homedir();
-+#endif
-
- log2file("\nExit routines:");
-
-@@ -989,14 +1031,26 @@
- // only save if everything was inited ok!
- if (init_ok) {
- log2file(" saving options");
-+#ifdef __unix__
-+ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.sav",
-+ homedir? homedir:".");
-+ pf = pack_fopen(filename, "wp");
-+#else
- pf = pack_fopen("alex4.sav", "wp");
-+#endif
- if (pf) {
- save_options(&options, pf);
- pack_fclose(pf);
- }
-
- log2file(" saving highscores");
-+#ifdef __unix__
-+ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.hi",
-+ homedir? homedir:".");
-+ pf = pack_fopen(filename, "wp");
-+#else
- pf = pack_fopen("alex4.hi", "wp");
-+#endif
- if (pf) {
- save_hisc_table(hisc_table, pf);
- save_hisc_table(hisc_table_space, pf);
-@@ -1289,7 +1343,7 @@
- // poll music machine
- if (got_sound) al_poll_duh(dp);
-
-- if (mode == 1 && (keypressed() || is_fire(&ctrl) || is_jump(&ctrl) ) || my_counter > 200) {
-+ if (((mode == 1) && (keypressed() || is_fire(&ctrl) || is_jump(&ctrl))) || (my_counter > 200)) {
- mode = 2;
- }
-
-@@ -1343,7 +1397,7 @@
- if (space) {
- // get space bg
- packfile_password(init_string);
-- df = load_datafile_object("data/a45.dat", "BG1");
-+ df = load_datafile_object(DATADIR "a45.dat", "BG1");
- packfile_password(NULL);
- if (df != NULL) {
- bg = df->dat;
-@@ -2149,7 +2203,7 @@
-
- // calculates camera pos for map m considering player p
- void calculate_camera_pos(Tplayer *p, Tmap *m) {
-- static camera_type = 1;
-+ static int camera_type = 1;
-
- if (p->actor->status == AC_BALL) {
- camera_type = 2;
-@@ -2841,6 +2895,10 @@
- }
- else {
- PACKFILE *pf;
-+#ifdef __unix__
-+ char filename[512];
-+ char *homedir = get_homedir();
-+#endif
- log2file(" level complete");
- if (got_sound) stop_music();
- if (level < MAX_LEVELS && playing_original_game) {
-@@ -2875,7 +2933,14 @@
-
- // save options
- log2file(" saving options");
-+#ifdef __unix__
-+ snprintf(filename, sizeof(filename),
-+ "%s/.alex4/alex4.sav",
-+ homedir? homedir:".");
-+ pf = pack_fopen(filename, "wp");
-+#else
- pf = pack_fopen("alex4.sav", "wp");
-+#endif
- if (pf) {
- save_options(&options, pf);
- pack_fclose(pf);
-@@ -2969,24 +3034,36 @@
-
- // main
- int main(int argc, char **argv) {
-- FILE *fp;
- int i;
- char full_path[1024];
-+#ifndef __unix__
-+ char working_directory[1024];
-+#else
-+ char *homedir = get_homedir();
-+#endif
-
- // init allegro
- allegro_init();
-
-+#ifdef __unix__
-+ // start logfile
-+ snprintf(full_path, sizeof(full_path), "%s/.alex4",
-+ homedir? homedir:".");
-+ check_and_create_dir(full_path);
-+ snprintf(full_path, sizeof(full_path), "%s/.alex4/log.txt",
-+ homedir? homedir:".");
-+ log_fp = fopen(full_path, "wt");
-+#else
- // get working directory
- get_executable_name(full_path, 1024);
- replace_filename(working_directory, full_path, "", 1024);
- chdir(working_directory);
-
--
- // start logfile
-- fp = fopen("log.txt", "wt");
-- if (fp) {
-- fprintf(fp, "Alex 4 (%s) - log file\n-------------------\n", GAME_VERSION_STR);
-- fclose(fp);
-+ log_fp = fopen("log.txt", "wt");
-+#endif
-+ if (log_fp) {
-+ fprintf(log_fp, "Alex 4 (%s) - log file\n-------------------\n", GAME_VERSION_STR);
- }
-
- // log program arguments
-@@ -2994,7 +3071,9 @@
- for(i = 0; i < argc; i ++) {
- log2file(" %s", argv[i]);
- }
-+#ifndef __unix__
- log2file("Working directory is:\n %s", working_directory);
-+#endif
-
- // test wether to play real game
- // or custom levels
-@@ -3022,6 +3101,8 @@
- uninit_game();
- allegro_exit();
- log2file("\nDone...\n");
-+ if (log_fp)
-+ fclose(log_fp);
-
- return 0;
- } END_OF_MAIN();
-Index: alex4-1.1/src/player.h
-===================================================================
---- alex4-1.1.orig/src/player.h 2008-01-26 21:33:48.000000000 +0100
-+++ alex4-1.1/src/player.h 2008-01-26 21:34:05.000000000 +0100
-@@ -60,4 +60,4 @@
- void wound_player(Tplayer *p);
- void kill_player(Tplayer *p);
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/map.h
-===================================================================
---- alex4-1.1.orig/src/map.h 2008-01-26 21:33:48.000000000 +0100
-+++ alex4-1.1/src/map.h 2008-01-26 21:34:05.000000000 +0100
-@@ -111,4 +111,4 @@
-
-
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/unix.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ alex4-1.1/src/unix.c 2008-01-26 21:36:41.000000000 +0100
-@@ -0,0 +1,82 @@
-+#ifdef __unix__
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <pwd.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 *get_homedir(void)
-+{
-+ struct passwd *pw;
-+
-+ if (!(pw = getpwuid(getuid())))
-+ {
-+ fprintf(stderr, "Who are you? Not found in passwd database!!\n");
-+ return getenv("HOME");
-+ }
-+
-+#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 check_and_create_dir(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: alex4-1.1/src/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ alex4-1.1/src/Makefile 2008-01-26 21:36:26.000000000 +0100
-@@ -0,0 +1,24 @@
-+PREFIX = /usr/local
-+DATADIR = $(PREFIX)/share/$(TARGET)
-+CFLAGS = -g -Wall -Wno-deprecated-declarations -O2
-+LDFLAGS = `allegro-config --libs` -laldmb -ldumb
-+DEFINES = -DDATADIR=\"$(DATADIR)/\"
-+OBJS = actor.o edit.o map.o player.o shooter.o unix.o \
-+ bullet.o hisc.o options.o script.o timer.o \
-+ control.o main.o particle.o scroller.o token.o
-+TARGET = alex4
-+
-+$(TARGET): $(OBJS)
-+ $(CC) $(LDFLAGS) -o $@ $^
-+
-+%.o: %.c
-+ $(CC) $(CFLAGS) $(DEFINES) -o $@ -c $<
-+
-+install: $(TARGET)
-+ mkdir -p $(PREFIX)/bin
-+ mkdir -p $(DATADIR)
-+ install -p -m 755 $(TARGET) $(PREFIX)/bin
-+ install -p -m 644 ../data/*.dat $(DATADIR)
-+
-+clean:
-+ rm -f $(OBJS) $(TARGET) *~
-Index: alex4-1.1/src/token.h
-===================================================================
---- alex4-1.1.orig/src/token.h 2008-01-26 21:33:48.000000000 +0100
-+++ alex4-1.1/src/token.h 2008-01-26 21:34:05.000000000 +0100
-@@ -41,4 +41,4 @@
- Ttoken *tokenize(char *str);
-
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/shooter.c
-===================================================================
---- alex4-1.1.orig/src/shooter.c 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/shooter.c 2008-01-26 21:34:05.000000000 +0100
-@@ -1372,7 +1372,7 @@
- // load data
- log2file(" loading shooter data");
- packfile_password(get_init_string());
-- s_data = load_datafile("data/a45.dat");
-+ s_data = load_datafile(DATADIR "a45.dat");
- if (!s_data) {
- log2file(" *** failed");
- return -1;
-Index: alex4-1.1/src/particle.h
-===================================================================
---- alex4-1.1.orig/src/particle.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/particle.h 2008-01-26 21:34:05.000000000 +0100
-@@ -54,4 +54,4 @@
- void update_particle_with_map(Tparticle *p, Tmap *m);
- void create_burst(Tparticle *ps, int x, int y, int spread, int num, int life, int bmp);
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/unix.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ alex4-1.1/src/unix.h 2008-01-26 21:34:05.000000000 +0100
-@@ -0,0 +1,6 @@
-+#ifdef __unix__
-+
-+char *get_homedir();
-+int check_and_create_dir(const char *name);
-+
-+#endif
-Index: alex4-1.1/src/scroller.h
-===================================================================
---- alex4-1.1.orig/src/scroller.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/scroller.h 2008-01-26 21:34:05.000000000 +0100
-@@ -51,4 +51,4 @@
-
-
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/map.c
-===================================================================
---- alex4-1.1.orig/src/map.c 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/map.c 2008-01-26 21:34:05.000000000 +0100
-@@ -24,6 +24,7 @@
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
-+#include <endian.h>
- #include "allegro.h"
- #include "map.h"
- #include "timer.h"
-@@ -64,7 +65,41 @@
-
- return m;
- }
--
-+
-+static void mem_to_int(int *dest, unsigned char *mem)
-+{
-+#if __BYTE_ORDER == __LITTLE_ENDIAN
-+ memcpy(dest, mem, 4);
-+#else
-+ *dest = mem[0] | (((int)mem[1]) << 8) | (((int)mem[2]) << 16) |
-+ (((int)mem[3]) << 24);
-+#endif
-+}
-+
-+static void fread_int(int *dest, FILE *fp)
-+{
-+#if __BYTE_ORDER == __LITTLE_ENDIAN
-+ fread(dest, 4, 1, fp);
-+#else
-+ unsigned char buf[4];
-+ fread(buf, 1, 4, fp);
-+ mem_to_int(dest, buf);
-+#endif
-+}
-+
-+static void fwrite_int(const int *src, FILE *fp)
-+{
-+#if __BYTE_ORDER == __LITTLE_ENDIAN
-+ fwrite(src, 4, 1, fp);
-+#else
-+ unsigned char buf[4];
-+ buf[0] = *src;
-+ buf[1] = *src >> 8;
-+ buf[2] = *src >> 16;
-+ buf[3] = *src >> 24;
-+ fwrite(buf, 1, 4, fp);
-+#endif
-+}
-
- // loads one splendind map from disk
- Tmap *load_map(char *fname) {
-@@ -93,7 +128,19 @@
- }
-
- // read datastruct
-- fread(m, sizeof(Tmap), 1, fp);
-+ // a mapfile contain a raw dump of the Tmap struct made on an i386
-+ // the code below reads these struct dumps in an arch neutral manner
-+ // Note this dumps contains pointers, these are not used because these
-+ // ofcourse point to some no longer valid address.
-+ fread(m, 64, 1, fp); // first 64 bytes data
-+ fread_int(&(m->width), fp);
-+ fread_int(&(m->height), fp);
-+ fread(header, 4, 1, fp); // skip the first pointer
-+ fread_int(&(m->offset_x), fp);
-+ fread_int(&(m->offset_y), fp);
-+ fread(header, 4, 1, fp); // skip the second pointer
-+ fread_int(&(m->start_x), fp);
-+ fread_int(&(m->start_y), fp);
-
- // read map data
- m->dat = malloc(m->width * m->height * sizeof(Tmappos));
-@@ -116,8 +163,8 @@
- // loads one splendind map from memory
- Tmap *load_map_from_memory(void *mem) {
- Tmap *m;
-- char header[6];
-- char *c = (char *)mem;
-+ unsigned char header[6];
-+ unsigned char *c = (unsigned char *)mem;
-
-
- // does the header match?
-@@ -137,9 +184,19 @@
- }
-
- // read datastruct
-- // fread(m, sizeof(Tmap), 1, fp);
-- memcpy(m, c, sizeof(Tmap));
-- c += sizeof(Tmap);
-+ // a mapfile contain a raw dump of the Tmap struct made on an i386
-+ // the code below reads these struct dumps in an arch neutral manner
-+ // Note this dumps contains pointers, these are not used because these
-+ // ofcourse point to some no longer valid address.
-+ memcpy(m, c, 64); c += 64; // first 64 bytes data
-+ mem_to_int(&(m->width), c); c += 4;
-+ mem_to_int(&(m->height), c); c += 4;
-+ c += 4; // skip the first pointer
-+ mem_to_int(&(m->offset_x), c); c += 4;
-+ mem_to_int(&(m->offset_y), c); c += 4;
-+ c += 4; // skip the second pointer
-+ mem_to_int(&(m->start_x), c); c+= 4;
-+ mem_to_int(&(m->start_y), c); c+= 4;
-
- // read map data
- m->dat = malloc(m->width * m->height * sizeof(Tmappos));
-@@ -174,7 +231,18 @@
- fwrite(header, 6, 1, fp);
-
- // write datastruct
-- fwrite(m, sizeof(Tmap), 1, fp);
-+ // a mapfile should contain a raw dump of the Tmap struct as made on an
-+ // i386 the code below writes a struct dump as an i386 in an arch
-+ // neutral manner
-+ fwrite(m, 64, 1, fp); // first 64 bytes data
-+ fwrite_int(&(m->width), fp);
-+ fwrite_int(&(m->height), fp);
-+ fwrite(header, 4, 1, fp); // skip the first pointer
-+ fwrite_int(&(m->offset_x), fp);
-+ fwrite_int(&(m->offset_y), fp);
-+ fwrite(header, 4, 1, fp); // skip the second pointer
-+ fwrite_int(&(m->start_x), fp);
-+ fwrite_int(&(m->start_y), fp);
-
- // write map data
- fwrite(m->dat, sizeof(Tmappos), m->width * m->height, fp);
-@@ -409,7 +477,7 @@
- }
-
- if (mask == 5 && oy > 31 - ox) return mask; // 45 degree slope /
-- if (mask == 6 && oy > ox) return mask; // 45 degree slope \
-+ if (mask == 6 && oy > ox) return mask; // 45 degree slope \ .
-
- // the not so simple ones
- if (mask == 3 && oy > 31 - ox / 2) return mask; // 22 degree slope / (low)
-Index: alex4-1.1/src/shooter.h
-===================================================================
---- alex4-1.1.orig/src/shooter.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/shooter.h 2008-01-26 21:34:05.000000000 +0100
-@@ -83,8 +83,8 @@
- int difficulty;
-
- // player related
-- long unsigned int score;
-- long unsigned int show_score;
-+ unsigned int score;
-+ unsigned int show_score;
- int lives;
- int power_gauge;
- int power_level;
-@@ -118,4 +118,4 @@
- int start_shooter(Tcontrol *c, int with_sound);
-
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/timer.h
-===================================================================
---- alex4-1.1.orig/src/timer.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/timer.h 2008-01-26 21:34:05.000000000 +0100
-@@ -37,4 +37,4 @@
- void fps_counter(void);
- void cycle_counter(void);
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/main.h
-===================================================================
---- alex4-1.1.orig/src/main.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/main.h 2008-01-26 21:34:05.000000000 +0100
-@@ -93,5 +93,8 @@
- #define check_bb_collision(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || \
- ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) ))
-
-+#ifndef DATADIR
-+#define DATADIR "data/"
-+#endif
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/script.h
-===================================================================
---- alex4-1.1.orig/src/script.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/script.h 2008-01-26 21:34:05.000000000 +0100
-@@ -51,4 +51,4 @@
-
-
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/edit.h
-===================================================================
---- alex4-1.1.orig/src/edit.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/edit.h 2008-01-26 21:34:05.000000000 +0100
-@@ -37,4 +37,4 @@
- void draw_edit_mode(BITMAP *bmp, Tmap *map, int mx, int my);
- void update_edit_mode(Tmap *map, BITMAP *bmp, int mx, int my, int mb);
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/token.c
-===================================================================
---- alex4-1.1.orig/src/token.c 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/token.c 2008-01-26 21:34:05.000000000 +0100
-@@ -67,7 +67,7 @@
-
- // tokenizes the string str
- Ttoken *tokenize(char *str) {
-- Ttoken *tok_list, *tok_tmp;
-+ Ttoken *tok_list, *tok_tmp = NULL;
- char word[256];
- int a, b, c;
- int i = 0;
-Index: alex4-1.1/src/hisc.h
-===================================================================
---- alex4-1.1.orig/src/hisc.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/hisc.h 2008-01-26 21:34:05.000000000 +0100
-@@ -48,4 +48,4 @@
- void draw_hisc_post(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level);
- void draw_hisc_table(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level);
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/options.h
-===================================================================
---- alex4-1.1.orig/src/options.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/options.h 2008-01-26 21:34:05.000000000 +0100
-@@ -43,4 +43,4 @@
- void load_options(Toptions *o, PACKFILE *fp);
- void reset_options(Toptions *o);
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/timer.c
-===================================================================
---- alex4-1.1.orig/src/timer.c 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/timer.c 2008-01-26 21:34:05.000000000 +0100
-@@ -60,4 +60,4 @@
- game_count ++;
-
- return TRUE;
--}
-\ No newline at end of file
-+}
-Index: alex4-1.1/src/actor.h
-===================================================================
---- alex4-1.1.orig/src/actor.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/actor.h 2008-01-26 21:34:05.000000000 +0100
-@@ -91,4 +91,4 @@
- void kill_actor(Tactor *a);
-
-
--#endif
-\ No newline at end of file
-+#endif
-Index: alex4-1.1/src/bullet.h
-===================================================================
---- alex4-1.1.orig/src/bullet.h 2008-01-26 21:33:49.000000000 +0100
-+++ alex4-1.1/src/bullet.h 2008-01-26 21:34:05.000000000 +0100
-@@ -52,4 +52,4 @@
- void update_bullet(Tbullet *b);
- void update_bullet_with_map(Tbullet *b, Tmap *m);
-
--#endif
-\ No newline at end of file
-+#endif
Copied: packages/trunk/alex4/debian/patches/unix-port.patch (from rev 9660, packages/trunk/alex4/debian/patches/from-fedora.patch)
===================================================================
--- packages/trunk/alex4/debian/patches/unix-port.patch (rev 0)
+++ packages/trunk/alex4/debian/patches/unix-port.patch 2009-05-05 00:08:59 UTC (rev 9672)
@@ -0,0 +1,775 @@
+Hans de Goede's patch for Fedora.
+
+--- a/src/main.c
++++ b/src/main.c
+@@ -38,6 +38,7 @@
+ #include "main.h"
+ #include "edit.h"
+ #include "shooter.h"
++#include "unix.h"
+
+ #include "../data/data.h"
+
+@@ -66,7 +67,6 @@
+ Tscroller hscroll;
+ Thisc *hisc_table;
+ Thisc *hisc_table_space;
+-char working_directory[1024];
+
+ // the map
+ Tmap *map = NULL;
+@@ -126,6 +126,7 @@
+ int playing_original_game = 1;
+ int init_ok = 0;
+
++static FILE* log_fp = NULL;
+
+
+ // // // // // // // // // // // // // // // // // // // // //
+@@ -154,20 +155,18 @@
+ // loggs the text to the text file
+ void log2file(char *format, ...) {
+ va_list ptr; /* get an arg pointer */
+- FILE *fp;
+
+- fp = fopen("log.txt", "at");
+- if (fp) {
++ if (log_fp) {
+ /* initialize ptr to point to the first argument after the format string */
+ va_start(ptr, format);
+
+ /* Write to logfile. */
+- vfprintf(fp, format, ptr); // Write passed text.
+- fprintf(fp, "\n"); // New line..
++ vfprintf(log_fp, format, ptr); // Write passed text.
++ fprintf(log_fp, "\n"); // New line..
+
+ va_end(ptr);
+
+- fclose(fp);
++ fflush(log_fp);
+ }
+
+ }
+@@ -618,6 +617,10 @@
+ BITMAP *bmp;
+ int i;
+ int w, h;
++#ifdef __unix__
++ char filename[512];
++ char *homedir = get_homedir();
++#endif
+
+ log2file("\nInit routines:");
+
+@@ -625,7 +628,13 @@
+ log2file(" initializing allegro");
+ text_mode(-1);
+ garble_string(init_string, 53);
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.ini",
++ homedir? homedir:".");
++ override_config_file(filename);
++#else
+ set_config_file("alex4.ini");
++#endif
+ set_window_close_button(FALSE);
+
+ // install timers
+@@ -695,6 +704,7 @@
+ textout_centre(swap_screen, font, "loading...", 320, 200, 1);
+ blit_to_screen(swap_screen);
+
++#ifndef __unix__
+ // set switch modes and callbacks
+ if (set_display_switch_mode(SWITCH_PAUSE) < 0)
+ log2file(" * display switch mode failed");
+@@ -702,6 +712,7 @@
+ log2file(" * display switch in failed");
+ if (set_display_switch_callback(SWITCH_OUT, display_switch_out) < 0)
+ log2file(" * display switch out failed");
++#endif
+
+
+ // set win title (no! really???)
+@@ -718,7 +729,7 @@
+ // load data
+ log2file(" loading data");
+ packfile_password(init_string);
+- data = load_datafile("data/data.dat");
++ data = load_datafile(DATADIR "data.dat");
+ packfile_password(NULL);
+ if (data == NULL) {
+ log2file(" *** failed");
+@@ -728,7 +739,13 @@
+
+ // load options
+ log2file(" loading options");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.sav",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "rp");
++#else
+ pf = pack_fopen("alex4.sav", "rp");
++#endif
+ if (pf) {
+ load_options(&options, pf);
+ pack_fclose(pf);
+@@ -740,7 +757,13 @@
+
+ // loading highscores
+ log2file(" loading hiscores");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.hi",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "rp");
++#else
+ pf = pack_fopen("alex4.hi", "rp");
++#endif
+ if (pf) {
+ load_hisc_table(hisc_table, pf);
+ load_hisc_table(hisc_table_space, pf);
+@@ -776,7 +799,7 @@
+ log2file(" loading original maps");
+ packfile_password(init_string);
+ num_levels = -1; // skip end object when counting
+- maps = load_datafile_callback("data/maps.dat", count_maps_callback);
++ maps = load_datafile_callback(DATADIR "maps.dat", count_maps_callback);
+ packfile_password(NULL);
+ if (maps == NULL) {
+ log2file(" *** failed");
+@@ -835,11 +858,12 @@
+ // install sound
+ log2file(" installing sound");
+ set_volume_per_voice(0);
+- switch(get_config_int("sound", "sound_device", 0)) {
++ switch(get_config_int("sound", "sound_device", 1)) {
+ case 1:
+ i = DIGI_AUTODETECT;
+ log2file(" DIGI_AUTODETECT selected (%d)", i);
+ break;
++#ifdef ALLEGRO_WINDOWS
+ case 2:
+ i = DIGI_DIRECTX(0);
+ log2file(" DIGI_DIRECTX(0) selected (%d)", i);
+@@ -848,6 +872,20 @@
+ i = DIGI_DIRECTAMX(0);
+ log2file(" DIGI_DIRECTAMX(0) selected (%d)", i);
+ break;
++#elif defined ALLEGRO_UNIX
++#ifdef DIGI_OSS
++ case 2:
++ i = DIGI_OSS;
++ log2file(" DIGI_OSS selected (%d)", i);
++ break;
++#endif
++#ifdef DIGI_ALSA
++ case 3:
++ i = DIGI_ALSA;
++ log2file(" DIGI_ALSA selected (%d)", i);
++ break;
++#endif
++#endif
+ default:
+ i = -770405; // dummy number
+ got_sound = 0;
+@@ -870,9 +908,9 @@
+ if (get_config_int("sound", "use_sound_datafile", 1)) {
+ log2file(" loading sound datafile");
+ packfile_password(init_string);
+- sfx_data = load_datafile("data/sfx_44.dat");
++ sfx_data = load_datafile(DATADIR "sfx_44.dat");
+ if (sfx_data == NULL) {
+- sfx_data = load_datafile("data/sfx_22.dat");
++ sfx_data = load_datafile(DATADIR "sfx_22.dat");
+ log2file(" sfx_44.dat not found");
+ s = 0;
+ }
+@@ -971,6 +1009,10 @@
+ void uninit_game() {
+ int i;
+ PACKFILE *pf;
++#ifdef __unix__
++ char filename[512];
++ char *homedir = get_homedir();
++#endif
+
+ log2file("\nExit routines:");
+
+@@ -989,14 +1031,26 @@
+ // only save if everything was inited ok!
+ if (init_ok) {
+ log2file(" saving options");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.sav",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "wp");
++#else
+ pf = pack_fopen("alex4.sav", "wp");
++#endif
+ if (pf) {
+ save_options(&options, pf);
+ pack_fclose(pf);
+ }
+
+ log2file(" saving highscores");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.hi",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "wp");
++#else
+ pf = pack_fopen("alex4.hi", "wp");
++#endif
+ if (pf) {
+ save_hisc_table(hisc_table, pf);
+ save_hisc_table(hisc_table_space, pf);
+@@ -1289,7 +1343,7 @@
+ // poll music machine
+ if (got_sound) al_poll_duh(dp);
+
+- if (mode == 1 && (keypressed() || is_fire(&ctrl) || is_jump(&ctrl) ) || my_counter > 200) {
++ if (((mode == 1) && (keypressed() || is_fire(&ctrl) || is_jump(&ctrl))) || (my_counter > 200)) {
+ mode = 2;
+ }
+
+@@ -1343,7 +1397,7 @@
+ if (space) {
+ // get space bg
+ packfile_password(init_string);
+- df = load_datafile_object("data/a45.dat", "BG1");
++ df = load_datafile_object(DATADIR "a45.dat", "BG1");
+ packfile_password(NULL);
+ if (df != NULL) {
+ bg = df->dat;
+@@ -2149,7 +2203,7 @@
+
+ // calculates camera pos for map m considering player p
+ void calculate_camera_pos(Tplayer *p, Tmap *m) {
+- static camera_type = 1;
++ static int camera_type = 1;
+
+ if (p->actor->status == AC_BALL) {
+ camera_type = 2;
+@@ -2841,6 +2895,10 @@
+ }
+ else {
+ PACKFILE *pf;
++#ifdef __unix__
++ char filename[512];
++ char *homedir = get_homedir();
++#endif
+ log2file(" level complete");
+ if (got_sound) stop_music();
+ if (level < MAX_LEVELS && playing_original_game) {
+@@ -2875,7 +2933,14 @@
+
+ // save options
+ log2file(" saving options");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename),
++ "%s/.alex4/alex4.sav",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "wp");
++#else
+ pf = pack_fopen("alex4.sav", "wp");
++#endif
+ if (pf) {
+ save_options(&options, pf);
+ pack_fclose(pf);
+@@ -2969,24 +3034,36 @@
+
+ // main
+ int main(int argc, char **argv) {
+- FILE *fp;
+ int i;
+ char full_path[1024];
++#ifndef __unix__
++ char working_directory[1024];
++#else
++ char *homedir = get_homedir();
++#endif
+
+ // init allegro
+ allegro_init();
+
++#ifdef __unix__
++ // start logfile
++ snprintf(full_path, sizeof(full_path), "%s/.alex4",
++ homedir? homedir:".");
++ check_and_create_dir(full_path);
++ snprintf(full_path, sizeof(full_path), "%s/.alex4/log.txt",
++ homedir? homedir:".");
++ log_fp = fopen(full_path, "wt");
++#else
+ // get working directory
+ get_executable_name(full_path, 1024);
+ replace_filename(working_directory, full_path, "", 1024);
+ chdir(working_directory);
+
+-
+ // start logfile
+- fp = fopen("log.txt", "wt");
+- if (fp) {
+- fprintf(fp, "Alex 4 (%s) - log file\n-------------------\n", GAME_VERSION_STR);
+- fclose(fp);
++ log_fp = fopen("log.txt", "wt");
++#endif
++ if (log_fp) {
++ fprintf(log_fp, "Alex 4 (%s) - log file\n-------------------\n", GAME_VERSION_STR);
+ }
+
+ // log program arguments
+@@ -2994,7 +3071,9 @@
+ for(i = 0; i < argc; i ++) {
+ log2file(" %s", argv[i]);
+ }
++#ifndef __unix__
+ log2file("Working directory is:\n %s", working_directory);
++#endif
+
+ // test wether to play real game
+ // or custom levels
+@@ -3022,6 +3101,8 @@
+ uninit_game();
+ allegro_exit();
+ log2file("\nDone...\n");
++ if (log_fp)
++ fclose(log_fp);
+
+ return 0;
+ } END_OF_MAIN();
+--- a/src/player.h
++++ b/src/player.h
+@@ -60,4 +60,4 @@
+ void wound_player(Tplayer *p);
+ void kill_player(Tplayer *p);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/map.h
++++ b/src/map.h
+@@ -111,4 +111,4 @@
+
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- /dev/null
++++ b/src/unix.c
+@@ -0,0 +1,87 @@
++#ifdef __unix__
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <pwd.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 *get_homedir(void)
++{
++ struct passwd *pw;
++ char *home;
++
++ home = getenv("HOME");
++ if (home)
++ return home;
++
++ 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 check_and_create_dir(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
+--- /dev/null
++++ b/src/Makefile
+@@ -0,0 +1,24 @@
++PREFIX = /usr/local
++DATADIR = $(PREFIX)/share/$(TARGET)
++CFLAGS = -g -Wall -Wno-deprecated-declarations -O2
++LDFLAGS = `allegro-config --libs` -laldmb -ldumb
++DEFINES = -DDATADIR=\"$(DATADIR)/\"
++OBJS = actor.o edit.o map.o player.o shooter.o unix.o \
++ bullet.o hisc.o options.o script.o timer.o \
++ control.o main.o particle.o scroller.o token.o
++TARGET = alex4
++
++$(TARGET): $(OBJS)
++ $(CC) $(LDFLAGS) -o $@ $^
++
++%.o: %.c
++ $(CC) $(CFLAGS) $(DEFINES) -o $@ -c $<
++
++install: $(TARGET)
++ mkdir -p $(PREFIX)/bin
++ mkdir -p $(DATADIR)
++ install -p -m 755 $(TARGET) $(PREFIX)/bin
++ install -p -m 644 ../data/*.dat $(DATADIR)
++
++clean:
++ rm -f $(OBJS) $(TARGET) *~
+--- a/src/token.h
++++ b/src/token.h
+@@ -41,4 +41,4 @@
+ Ttoken *tokenize(char *str);
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/shooter.c
++++ b/src/shooter.c
+@@ -1372,7 +1372,7 @@
+ // load data
+ log2file(" loading shooter data");
+ packfile_password(get_init_string());
+- s_data = load_datafile("data/a45.dat");
++ s_data = load_datafile(DATADIR "a45.dat");
+ if (!s_data) {
+ log2file(" *** failed");
+ return -1;
+--- a/src/particle.h
++++ b/src/particle.h
+@@ -54,4 +54,4 @@
+ void update_particle_with_map(Tparticle *p, Tmap *m);
+ void create_burst(Tparticle *ps, int x, int y, int spread, int num, int life, int bmp);
+
+-#endif
+\ No newline at end of file
++#endif
+--- /dev/null
++++ b/src/unix.h
+@@ -0,0 +1,6 @@
++#ifdef __unix__
++
++char *get_homedir();
++int check_and_create_dir(const char *name);
++
++#endif
+--- a/src/scroller.h
++++ b/src/scroller.h
+@@ -51,4 +51,4 @@
+
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/map.c
++++ b/src/map.c
+@@ -24,6 +24,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <endian.h>
+ #include "allegro.h"
+ #include "map.h"
+ #include "timer.h"
+@@ -64,7 +65,41 @@
+
+ return m;
+ }
+-
++
++static void mem_to_int(int *dest, unsigned char *mem)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ memcpy(dest, mem, 4);
++#else
++ *dest = mem[0] | (((int)mem[1]) << 8) | (((int)mem[2]) << 16) |
++ (((int)mem[3]) << 24);
++#endif
++}
++
++static void fread_int(int *dest, FILE *fp)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ fread(dest, 4, 1, fp);
++#else
++ unsigned char buf[4];
++ fread(buf, 1, 4, fp);
++ mem_to_int(dest, buf);
++#endif
++}
++
++static void fwrite_int(const int *src, FILE *fp)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ fwrite(src, 4, 1, fp);
++#else
++ unsigned char buf[4];
++ buf[0] = *src;
++ buf[1] = *src >> 8;
++ buf[2] = *src >> 16;
++ buf[3] = *src >> 24;
++ fwrite(buf, 1, 4, fp);
++#endif
++}
+
+ // loads one splendind map from disk
+ Tmap *load_map(char *fname) {
+@@ -93,7 +128,19 @@
+ }
+
+ // read datastruct
+- fread(m, sizeof(Tmap), 1, fp);
++ // a mapfile contain a raw dump of the Tmap struct made on an i386
++ // the code below reads these struct dumps in an arch neutral manner
++ // Note this dumps contains pointers, these are not used because these
++ // ofcourse point to some no longer valid address.
++ fread(m, 64, 1, fp); // first 64 bytes data
++ fread_int(&(m->width), fp);
++ fread_int(&(m->height), fp);
++ fread(header, 4, 1, fp); // skip the first pointer
++ fread_int(&(m->offset_x), fp);
++ fread_int(&(m->offset_y), fp);
++ fread(header, 4, 1, fp); // skip the second pointer
++ fread_int(&(m->start_x), fp);
++ fread_int(&(m->start_y), fp);
+
+ // read map data
+ m->dat = malloc(m->width * m->height * sizeof(Tmappos));
+@@ -116,8 +163,8 @@
+ // loads one splendind map from memory
+ Tmap *load_map_from_memory(void *mem) {
+ Tmap *m;
+- char header[6];
+- char *c = (char *)mem;
++ unsigned char header[6];
++ unsigned char *c = (unsigned char *)mem;
+
+
+ // does the header match?
+@@ -137,9 +184,19 @@
+ }
+
+ // read datastruct
+- // fread(m, sizeof(Tmap), 1, fp);
+- memcpy(m, c, sizeof(Tmap));
+- c += sizeof(Tmap);
++ // a mapfile contain a raw dump of the Tmap struct made on an i386
++ // the code below reads these struct dumps in an arch neutral manner
++ // Note this dumps contains pointers, these are not used because these
++ // ofcourse point to some no longer valid address.
++ memcpy(m, c, 64); c += 64; // first 64 bytes data
++ mem_to_int(&(m->width), c); c += 4;
++ mem_to_int(&(m->height), c); c += 4;
++ c += 4; // skip the first pointer
++ mem_to_int(&(m->offset_x), c); c += 4;
++ mem_to_int(&(m->offset_y), c); c += 4;
++ c += 4; // skip the second pointer
++ mem_to_int(&(m->start_x), c); c+= 4;
++ mem_to_int(&(m->start_y), c); c+= 4;
+
+ // read map data
+ m->dat = malloc(m->width * m->height * sizeof(Tmappos));
+@@ -174,7 +231,18 @@
+ fwrite(header, 6, 1, fp);
+
+ // write datastruct
+- fwrite(m, sizeof(Tmap), 1, fp);
++ // a mapfile should contain a raw dump of the Tmap struct as made on an
++ // i386 the code below writes a struct dump as an i386 in an arch
++ // neutral manner
++ fwrite(m, 64, 1, fp); // first 64 bytes data
++ fwrite_int(&(m->width), fp);
++ fwrite_int(&(m->height), fp);
++ fwrite(header, 4, 1, fp); // skip the first pointer
++ fwrite_int(&(m->offset_x), fp);
++ fwrite_int(&(m->offset_y), fp);
++ fwrite(header, 4, 1, fp); // skip the second pointer
++ fwrite_int(&(m->start_x), fp);
++ fwrite_int(&(m->start_y), fp);
+
+ // write map data
+ fwrite(m->dat, sizeof(Tmappos), m->width * m->height, fp);
+@@ -409,7 +477,7 @@
+ }
+
+ if (mask == 5 && oy > 31 - ox) return mask; // 45 degree slope /
+- if (mask == 6 && oy > ox) return mask; // 45 degree slope \
++ if (mask == 6 && oy > ox) return mask; // 45 degree slope \ .
+
+ // the not so simple ones
+ if (mask == 3 && oy > 31 - ox / 2) return mask; // 22 degree slope / (low)
+--- a/src/shooter.h
++++ b/src/shooter.h
+@@ -83,8 +83,8 @@
+ int difficulty;
+
+ // player related
+- long unsigned int score;
+- long unsigned int show_score;
++ unsigned int score;
++ unsigned int show_score;
+ int lives;
+ int power_gauge;
+ int power_level;
+@@ -118,4 +118,4 @@
+ int start_shooter(Tcontrol *c, int with_sound);
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/timer.h
++++ b/src/timer.h
+@@ -37,4 +37,4 @@
+ void fps_counter(void);
+ void cycle_counter(void);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/main.h
++++ b/src/main.h
+@@ -93,5 +93,8 @@
+ #define check_bb_collision(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || \
+ ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) ))
+
++#ifndef DATADIR
++#define DATADIR "data/"
++#endif
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/script.h
++++ b/src/script.h
+@@ -51,4 +51,4 @@
+
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/edit.h
++++ b/src/edit.h
+@@ -37,4 +37,4 @@
+ void draw_edit_mode(BITMAP *bmp, Tmap *map, int mx, int my);
+ void update_edit_mode(Tmap *map, BITMAP *bmp, int mx, int my, int mb);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/token.c
++++ b/src/token.c
+@@ -67,7 +67,7 @@
+
+ // tokenizes the string str
+ Ttoken *tokenize(char *str) {
+- Ttoken *tok_list, *tok_tmp;
++ Ttoken *tok_list, *tok_tmp = NULL;
+ char word[256];
+ int a, b, c;
+ int i = 0;
+--- a/src/hisc.h
++++ b/src/hisc.h
+@@ -48,4 +48,4 @@
+ void draw_hisc_post(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level);
+ void draw_hisc_table(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/options.h
++++ b/src/options.h
+@@ -43,4 +43,4 @@
+ void load_options(Toptions *o, PACKFILE *fp);
+ void reset_options(Toptions *o);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/timer.c
++++ b/src/timer.c
+@@ -60,4 +60,4 @@
+ game_count ++;
+
+ return TRUE;
+-}
+\ No newline at end of file
++}
+--- a/src/actor.h
++++ b/src/actor.h
+@@ -91,4 +91,4 @@
+ void kill_actor(Tactor *a);
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/bullet.h
++++ b/src/bullet.h
+@@ -52,4 +52,4 @@
+ void update_bullet(Tbullet *b);
+ void update_bullet_with_map(Tbullet *b, Tmap *m);
+
+-#endif
+\ No newline at end of file
++#endif
More information about the Pkg-games-commits
mailing list