/***********************************************************
* Rocks'n'Diamonds -- McDuffin Strikes Back! *
*----------------------------------------------------------*
-* ©1995 Artsoft Development *
-* Holger Schemel *
-* 33659 Bielefeld-Senne *
-* Telefon: (0521) 493245 *
-* eMail: aeglos@valinor.owl.de *
-* aeglos@uni-paderborn.de *
-* q99492@pbhrzx.uni-paderborn.de *
+* (c) 1995-98 Artsoft Entertainment *
+* Holger Schemel *
+* Oststrasse 11a *
+* 33604 Bielefeld *
+* phone: ++49 +521 290471 *
+* email: aeglos@valinor.owl.de *
*----------------------------------------------------------*
* files.h *
***********************************************************/
BOOL CreateNewScoreFile()
{
int i,j,k;
- char filename[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
char empty_alias[MAX_NAMELEN];
FILE *file;
BOOL CreateNewNamesFile(int mode)
{
- char filename[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
FILE *file;
if (mode==PLAYER_LEVEL)
BOOL LoadLevelInfo()
{
int i;
- char filename[MAX_FILENAME];
- char cookie[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
+ char cookie[MAX_FILENAME_LEN];
FILE *file;
sprintf(filename,"%s/%s",level_directory,LEVDIR_FILENAME);
if (!(file=fopen(filename,"r")))
{
- fprintf(stderr,"%s: cannot load level info '%s'!\n",progname,filename);
+ Error(ERR_RETURN, "cannot load level info '%s'", filename);
return(FALSE);
}
fscanf(file,"%s\n",cookie);
if (strcmp(cookie,LEVELDIR_COOKIE)) /* ungültiges Format? */
{
- fprintf(stderr,"%s: wrong format of level info file!\n",progname);
+ Error(ERR_RETURN, "wrong format of level info file");
fclose(file);
return(FALSE);
}
if (!num_leveldirs)
{
- fprintf(stderr,"%s: empty level info '%s'!\n",progname,filename);
+ Error(ERR_RETURN, "empty level info '%s'", filename);
return(FALSE);
}
void LoadLevel(int level_nr)
{
int i,x,y;
- char filename[MAX_FILENAME];
- char cookie[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
+ char cookie[MAX_FILENAME_LEN];
FILE *file;
sprintf(filename,"%s/%s/%d",
level_directory,leveldir[leveldir_nr].filename,level_nr);
- if (!(file=fopen(filename,"r")))
- {
-/*
- fprintf(stderr,"%s: cannot load level '%s'!\n",progname,filename);
-*/
- }
+ if (!(file = fopen(filename,"r")))
+ Error(ERR_RETURN, "cannot load level '%s' - creating new level", filename);
else
{
fgets(cookie,LEVEL_COOKIE_LEN,file);
if (strcmp(cookie,LEVEL_COOKIE)) /* ungültiges Format? */
{
- fprintf(stderr,"%s: wrong format of level file '%s'!\n",
- progname,filename);
+ Error(ERR_RETURN, "wrong format of level file '%s'", filename);
fclose(file);
file = NULL;
}
void LoadLevelTape(int level_nr)
{
int i;
- char filename[MAX_FILENAME];
- char cookie[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
+ char cookie[MAX_FILENAME_LEN];
FILE *file;
+ BOOL levelrec_10 = FALSE;
+#ifndef MSDOS
sprintf(filename,"%s/%s/%d.tape",
level_directory,leveldir[leveldir_nr].filename,level_nr);
+#else
+ sprintf(filename,"%s/%s/%d.tap",
+ level_directory,leveldir[leveldir_nr].filename,level_nr);
+#endif
if ((file=fopen(filename,"r")))
{
fgets(cookie,LEVELREC_COOKIE_LEN,file);
fgetc(file);
- if (strcmp(cookie,LEVELREC_COOKIE)) /* ungültiges Format? */
+ if (!strcmp(cookie,LEVELREC_COOKIE_10)) /* old 1.0 tape format */
+ levelrec_10 = TRUE;
+ else if (strcmp(cookie,LEVELREC_COOKIE)) /* unknown tape format */
{
- fprintf(stderr,"%s: wrong format of level recording file '%s'!\n",
- progname,filename);
+ Error(ERR_RETURN, "wrong format of level recording file '%s'", filename);
fclose(file);
file = NULL;
}
for(i=0;i<tape.length;i++)
{
- if (i>=MAX_TAPELEN)
+ int j;
+
+ if (i >= MAX_TAPELEN)
break;
- tape.pos[i].joystickdata = fgetc(file);
- tape.pos[i].delay = fgetc(file);
+
+ for(j=0; j<MAX_PLAYERS; j++)
+ {
+ if (levelrec_10 && j>0)
+ {
+ tape.pos[i].action[j] = MV_NO_MOVING;
+ continue;
+ }
+ tape.pos[i].action[j] = fgetc(file);
+ }
+
+ tape.pos[i].delay = fgetc(file);
+
if (feof(file))
break;
}
fclose(file);
if (i != tape.length)
- fprintf(stderr,"%s: level recording file '%s' corrupted!\n",
- progname,filename);
+ Error(ERR_RETURN, "level recording file '%s' corrupted", filename);
tape.length_seconds = GetTapeLength();
}
void LoadScore(int level_nr)
{
int i,j;
- char filename[MAX_FILENAME];
- char cookie[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
+ char cookie[MAX_FILENAME_LEN];
FILE *file;
sprintf(filename,"%s/%s/%s",
level_directory,leveldir[leveldir_nr].filename,SCORE_FILENAME);
- if (!(file=fopen(filename,"r")))
+ if (!(file = fopen(filename,"r")))
{
if (!CreateNewScoreFile())
- {
- fprintf(stderr,"%s: cannot create score file '%s'!\n",
- progname,filename);
- }
- else if (!(file=fopen(filename,"r")))
- {
- fprintf(stderr,"%s: cannot load score for level %d!\n",
- progname,level_nr);
- }
+ Error(ERR_RETURN, "cannot create score file '%s'", filename);
+ else if (!(file = fopen(filename,"r")))
+ Error(ERR_RETURN, "cannot load score for level %d", level_nr);
}
if (file)
fgets(cookie,SCORE_COOKIE_LEN,file);
if (strcmp(cookie,SCORE_COOKIE)) /* ungültiges Format? */
{
- fprintf(stderr,"%s: wrong format of score file!\n",progname);
+ Error(ERR_RETURN, "wrong format of score file '%s'", filename);
fclose(file);
file = NULL;
}
void LoadPlayerInfo(int mode)
{
int i;
- char filename[MAX_FILENAME];
- char cookie[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
+ char cookie[MAX_FILENAME_LEN];
FILE *file;
char *login_name = GetLoginName();
struct PlayerInfo default_player, new_player;
new_player = default_player;
- if (!(file=fopen(filename,"r")))
+ if (!(file = fopen(filename,"r")))
{
if (!CreateNewNamesFile(mode))
- {
- fprintf(stderr,"%s: cannot create names file '%s'!\n",
- progname,filename);
- }
- else if (!(file=fopen(filename,"r")))
- {
- fprintf(stderr,"%s: cannot load player information '%s'!\n",
- progname,filename);
- }
+ Error(ERR_RETURN, "cannot create names file '%s'", filename);
+ else if (!(file = fopen(filename,"r")))
+ Error(ERR_RETURN, "cannot load player information file '%s'", filename);
}
if (file)
version_10_file = TRUE;
else if (strcmp(cookie,NAMES_COOKIE)) /* ungültiges Format? */
{
- fprintf(stderr,"%s: wrong format of names file '%s'!\n",
- progname,filename);
+ Error(ERR_RETURN, "wrong format of names file '%s'", filename);
fclose(file);
file = NULL;
}
if (!file)
{
- player = default_player;
+ *local_player = default_player;
level_nr = default_player.level_nr;
return;
}
new_player = default_player;
fclose(file);
- if (!(file=fopen(filename,"a")))
- {
- fprintf(stderr,"%s: cannot append new player to names file '%s'!\n",
- progname,filename);
- }
+ if (!(file = fopen(filename,"a")))
+ Error(ERR_RETURN, "cannot append new player to names file '%s'",
+ filename);
else
{
for(i=0;i<MAX_NAMELEN;i++)
if (mode==PLAYER_SETUP)
{
- player = new_player;
- if (player.leveldir_nr < num_leveldirs)
- leveldir_nr = player.leveldir_nr;
+ *local_player = new_player;
+ if (local_player->leveldir_nr < num_leveldirs)
+ leveldir_nr = local_player->leveldir_nr;
else
leveldir_nr = 0;
}
else
{
- player.handicap = new_player.handicap;
- player.level_nr = new_player.level_nr;
+ local_player->handicap = new_player.handicap;
+ local_player->level_nr = new_player.level_nr;
}
- level_nr = player.level_nr;
+ level_nr = local_player->level_nr;
fclose(file);
}
void SaveLevel(int level_nr)
{
int i,x,y;
- char filename[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
FILE *file;
sprintf(filename,"%s/%s/%d",
if (!(file=fopen(filename,"w")))
{
- fprintf(stderr,"%s: cannot save level file '%s'!\n",progname,filename);
+ Error(ERR_RETURN, "cannot save level file '%s'", filename);
return;
}
void SaveLevelTape(int level_nr)
{
int i;
- char filename[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
FILE *file;
BOOL new_tape = TRUE;
+#ifndef MSDOS
sprintf(filename,"%s/%s/%d.tape",
level_directory,leveldir[leveldir_nr].filename,level_nr);
+#else
+ sprintf(filename,"%s/%s/%d.tap",
+ level_directory,leveldir[leveldir_nr].filename,level_nr);
+#endif
/* Testen, ob bereits eine Aufnahme existiert */
if ((file=fopen(filename,"r")))
new_tape = FALSE;
fclose(file);
- if (!AreYouSure("Replace old tape ?",AYS_ASK))
+ if (!Request("Replace old tape ?",REQ_ASK))
return;
}
if (!(file=fopen(filename,"w")))
{
- fprintf(stderr,"%s: cannot save level recording file '%s'!\n",
- progname,filename);
+ Error(ERR_RETURN, "cannot save level recording file '%s'", filename);
return;
}
for(i=0;i<tape.length;i++)
{
- fputc(tape.pos[i].joystickdata,file);
+ int j;
+
+ for(j=0; j<MAX_PLAYERS; j++)
+ fputc(tape.pos[i].action[j],file);
+
fputc(tape.pos[i].delay,file);
}
tape.changed = FALSE;
if (new_tape)
- AreYouSure("tape saved !",AYS_CONFIRM);
+ Request("tape saved !",REQ_CONFIRM);
}
void SaveScore(int level_nr)
{
int i,j;
- char filename[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
FILE *file;
sprintf(filename,"%s/%s/%s",
if (!(file=fopen(filename,"r+")))
{
- fprintf(stderr,"%s: cannot save score for level %d!\n",
- progname,level_nr);
+ Error(ERR_RETURN, "cannot save score for level %d", level_nr);
return;
}
void SavePlayerInfo(int mode)
{
int i;
- char filename[MAX_FILENAME];
- char cookie[MAX_FILENAME];
+ char filename[MAX_FILENAME_LEN];
+ char cookie[MAX_FILENAME_LEN];
FILE *file;
struct PlayerInfo default_player;
int version_10_file = FALSE;
else
sprintf(filename,"%s/%s",CONFIG_PATH,NAMES_FILENAME);
- if (!(file=fopen(filename,"r+")))
+ if (!(file = fopen(filename,"r+")))
{
- fprintf(stderr,"%s: cannot save player information '%s'!\n",
- progname,filename);
+ Error(ERR_RETURN, "cannot save player information to file '%s'", filename);
return;
}
version_10_file = TRUE;
else if (strcmp(cookie,NAMES_COOKIE)) /* ungültiges Format? */
{
- fprintf(stderr,"%s: wrong format of names file '%s'!\n",
- progname,filename);
+ Error(ERR_RETURN, "wrong format of names file '%s'", filename);
fclose(file);
return;
}
if (feof(file)) /* Spieler noch nicht in Liste enthalten */
break;
else /* prüfen, ob Spieler in Liste enthalten */
- if (!strncmp(default_player.login_name,player.login_name,MAX_NAMELEN-1))
+ if (!strncmp(default_player.login_name,
+ local_player->login_name, MAX_NAMELEN-1))
{
fseek(file,-(2*MAX_NAMELEN+1+2+1+(version_10_file ? 0 : 11)),SEEK_CUR);
break;
}
}
- player.level_nr = level_nr;
+ local_player->level_nr = level_nr;
for(i=0;i<MAX_NAMELEN;i++)
- fputc(player.login_name[i],file);
+ fputc(local_player->login_name[i],file);
for(i=0;i<MAX_NAMELEN;i++)
- fputc(player.alias_name[i],file);
- fputc(player.handicap,file);
- fputc(player.setup / 256,file);
- fputc(player.setup % 256,file);
- fputc(player.leveldir_nr,file);
+ fputc(local_player->alias_name[i],file);
+ fputc(local_player->handicap,file);
+ fputc(local_player->setup / 256,file);
+ fputc(local_player->setup % 256,file);
+ fputc(local_player->leveldir_nr,file);
if (!version_10_file)
{
- fputc(player.level_nr,file);
+ fputc(local_player->level_nr,file);
for(i=0;i<10;i++) /* currently unused bytes */
fputc(0,file);
}
if (joystick_status==JOYSTICK_OFF)
return;
+#ifndef MSDOS
if (!(file=fopen(JOYDAT_FILE,"r")))
return;
fscanf(file,"%s",cookie);
if (strcmp(cookie,JOYSTICK_COOKIE)) /* ungültiges Format? */
{
- fprintf(stderr,"%s: wrong format of joystick file!\n",progname);
+ Error(ERR_RETURN, "wrong format of joystick file '%s'", JOYDAT_FILE);
fclose(file);
return;
}
fclose(file);
CheckJoystickData();
+#else
+ load_joystick_data(JOYDAT_FILE);
+#endif
}
void SaveJoystickData()
if (joystick_status==JOYSTICK_OFF)
return;
+#ifndef MSDOS
CheckJoystickData();
if (!(file=fopen(JOYDAT_FILE,"w")))
{
- fprintf(stderr,"%s: cannot save joystick calibration data!\n",progname);
+ Error(ERR_RETURN, "cannot save joystick calibration data to file '%s'",
+ JOYDAT_FILE);
return;
}
fclose(file);
chmod(JOYDAT_FILE, JOYDAT_PERMS);
+#else
+ save_joystick_data(JOYDAT_FILE);
+#endif
+
}