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++)
   {
openSUSE Build Service is sponsored by