File deflektor_x4-1.0-dirs.patch of Package deflektor_x4
Read data from DATADIR and config from $HOME/.deflektor_x4
--- audio.c
+++ audio.c
@@ -42,8 +42,8 @@
FMOD_System_Create(&sistema);
FMOD_System_Init(sistema, 16, FMOD_INIT_NORMAL, NULL);
- f_msc = load_datafile("msc.dat");
- f_audio = load_datafile("snd.dat");
+ f_msc = load_datafile(DATADIR "/msc.dat");
+ f_audio = load_datafile(DATADIR "/snd.dat");
}
//******************************************************************************
--- deflektor.c
+++ deflektor.c
@@ -15,6 +15,9 @@
//******************************************************************************
// Includes.
//******************************************************************************
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <sys/stat.h>
#include <time.h>
#include <allegro.h>
#include "deflekto.h"
@@ -44,6 +47,7 @@
char max_txt[29*9];
int max_pnt[9];
char max_cod[13*9];
+char *homeDirectory;
char ini_allegro(void);
void fin_allegro(void);
@@ -78,6 +82,13 @@
{
char f;
+ asprintf(&homeDirectory,"%s/.deflektor_x4",getenv("HOME"));
+ if ((mkdir(homeDirectory,S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST))
+ {
+ printf("Couldn't create required directory '%s'",homeDirectory);
+ exit(1);
+ }
+
if(ini_allegro()) return -1;
ini_tiempo();
ini_audio();
@@ -99,6 +110,7 @@
fin_audio();
fin_allegro();
+ free(homeDirectory);
return 0;
}
END_OF_MAIN();
@@ -132,8 +144,8 @@
set_display_switch_mode(SWITCH_AMNESIA);
set_trans_blender(0,0,0,240);
clear_bitmap(buffer=create_bitmap(RES_X,RES_Y));
- f_grf=load_datafile("grf.dat");
- f_fnt=load_datafile("fuentes.dat");
+ f_grf=load_datafile(DATADIR "/grf.dat");
+ f_fnt=load_datafile(DATADIR "/fuentes.dat");
for(l=0;l<=IMG_X*IMG_Y;loseta[l++]=NULL);
borde[0]=(BITMAP *)(f_grf[0].dat);
@@ -165,7 +177,7 @@
char no_encontrado=0;
PACKFILE *f_dat=NULL;
- if(f_dat=pack_fopen("grf.dat",F_READ))
+ if(f_dat=pack_fopen(DATADIR "/grf.dat",F_READ))
pack_fclose(f_dat);
else
{
@@ -173,7 +185,7 @@
allegro_message("ERROR: fichero grf.dat no encontrado\nERROR: file grf.dat not found");
}
- if(f_dat=pack_fopen("fuentes.dat",F_READ))
+ if(f_dat=pack_fopen(DATADIR "/fuentes.dat",F_READ))
pack_fclose(f_dat);
else
{
@@ -181,7 +193,7 @@
allegro_message("ERROR: fichero fuentes.dat no encontrado\nERROR: file fuentes.dat not found");
}
- if(f_dat=pack_fopen("intro.dat",F_READ))
+ if(f_dat=pack_fopen(DATADIR "/intro.dat",F_READ))
pack_fclose(f_dat);
else
{
@@ -189,7 +201,7 @@
allegro_message("ERROR: fichero intro.dat no encontrado\nERROR: file intro.dat not found");
}
- if(f_dat=pack_fopen("msc.dat",F_READ))
+ if(f_dat=pack_fopen(DATADIR "/msc.dat",F_READ))
pack_fclose(f_dat);
else
{
@@ -197,7 +209,7 @@
allegro_message("ERROR: fichero msc.dat no encontrado\nERROR: file msc.dat not found");
}
- if(f_dat=pack_fopen("snd.dat",F_READ))
+ if(f_dat=pack_fopen(DATADIR "/snd.dat",F_READ))
pack_fclose(f_dat);
else
{
@@ -965,7 +977,7 @@
short x,y,contador;
BITMAP *mapa_intro=NULL;
char voz=-1;
- DATAFILE *f_intro=load_datafile("intro.dat");
+ DATAFILE *f_intro=load_datafile(DATADIR "/intro.dat");
parar_musica();
mapa_intro=(BITMAP *)(f_intro[0].dat);
@@ -1190,7 +1202,10 @@
//******************************************************************************
void leer_cfg(void)
{
- PACKFILE *cfg=pack_fopen("cfg.dat",F_READ);
+ char *tmp;
+ asprintf(&tmp,"%s/cfg.dat",homeDirectory);
+ PACKFILE *cfg=pack_fopen(tmp,F_READ);
+ free(tmp);
if(cfg)
{
@@ -1230,7 +1245,10 @@
//******************************************************************************
void escribir_cfg(void)
{
- PACKFILE *cfg=pack_fopen("cfg.dat",F_WRITE);
+ char *tmp;
+ asprintf(&tmp,"%s/cfg.dat",homeDirectory);
+ PACKFILE *cfg=pack_fopen(tmp,F_WRITE);
+ free(tmp);
pack_fwrite(&idioma, sizeof(char), cfg);
pack_fwrite(&volson, sizeof(char), cfg);
pack_fwrite(&volmus, sizeof(char), cfg);
@@ -1247,7 +1265,10 @@
short f;
int fin, pot;
char c;
- PACKFILE *pnt=pack_fopen("pnt.txt",F_READ);
+ char *tmp;
+ asprintf(&tmp,"%s/pnt.dat",homeDirectory);
+ PACKFILE *pnt=pack_fopen(tmp,F_READ);
+ free(tmp);
for(f=0;f<29*9;max_txt[f++]=0);
for(f=0;f<9; max_pnt[f++]=0);
@@ -1280,7 +1301,10 @@
void escribir_pnt(void)
{
char f,n;
- PACKFILE *pnt=pack_fopen("pnt.txt",F_WRITE);
+ char *tmp;
+ asprintf(&tmp,"%s/pnt.dat",homeDirectory);
+ PACKFILE *pnt=pack_fopen(tmp,F_WRITE);
+ free(tmp);
for(f=0;f<9 && max_pnt[f];f++)
{