Error-proof cfile_init_hogfile(), added forgotten break statement for Pause/Unpause Demo

This commit is contained in:
zicodxx 2007-03-30 07:26:07 +00:00
parent 85873c29f6
commit 532e1585e9
3 changed files with 96 additions and 0 deletions

View file

@ -314,6 +314,7 @@ FILE * cfile_get_filehandle( char * filename, char * mode )
return fp;
}
#if 0
void cfile_init_hogfile(char *fname, hogfile * hog_files, int * nfiles )
{
char id[4];
@ -400,6 +401,99 @@ void cfile_use_alternate_hogfile( char * name )
AltHogfile_initialized = 0;
}
}
#else
int cfile_init_hogfile(char *fname, hogfile * hog_files )
{
char id[4];
FILE * fp;
int i, len;
int nfiles=0;
fp = cfile_get_filehandle( fname, "rb" );
if ( fp == NULL ) return 0;
fread( id, 3, 1, fp );
if ( strncmp( id, "DHF", 3 ) ) {
fclose(fp);
return 0;
}
while( 1 )
{
if ( nfiles >= MAX_HOGFILES ) {
printf( "ERROR: HOGFILE IS LIMITED TO %d FILES\n", MAX_HOGFILES );
fclose(fp);
exit(1);
}
i = fread( hog_files[nfiles].name, 13, 1, fp );
if ( i != 1 ) {
fclose(fp);
#ifndef NDEBUG
printf("Got %i files in %s\n",nfiles,fname);
#endif
return nfiles;
}
i = fread( &len, 4, 1, fp );
if ( i != 1 ) {
fclose(fp);
#ifndef NDEBUG
printf("Got %i files in %s\n",nfiles,fname);
#endif
return nfiles;
}
hog_files[nfiles].length = len;
hog_files[nfiles].offset = ftell( fp );
nfiles = (nfiles) + 1;
// Skip over
i = fseek( fp, len, SEEK_CUR );
}
}
FILE * cfile_find_libfile(char * name, int * length)
{
FILE * fp;
int i;
if ( AltHogfile_initialized ) {
for (i=0; i<AltNum_hogfiles; i++ ) {
if ( !stricmp( AltHogFiles[i].name, name )) {
fp = cfile_get_filehandle( AltHogFilename, "rb" );
if ( fp == NULL ) return NULL;
fseek( fp, AltHogFiles[i].offset, SEEK_SET );
*length = AltHogFiles[i].length;
return fp;
}
}
}
if ( !Hogfile_initialized ) {
Num_hogfiles = cfile_init_hogfile(DESCENT_DATA_PATH "descent.hog", HogFiles );
Hogfile_initialized = 1;
}
for (i=0; i<Num_hogfiles; i++ ) {
if ( !stricmp( HogFiles[i].name, name )) {
fp = cfile_get_filehandle(DESCENT_DATA_PATH "descent.hog", "rb" );
if ( fp == NULL ) return NULL;
fseek( fp, HogFiles[i].offset, SEEK_SET );
*length = HogFiles[i].length;
return fp;
}
}
return NULL;
}
void cfile_use_alternate_hogfile( char * name )
{
if ( name ) {
strcpy( AltHogFilename, name );
AltNum_hogfiles = cfile_init_hogfile( AltHogFilename, AltHogFiles );
AltHogfile_initialized = 1;
} else {
AltHogfile_initialized = 0;
}
}
#endif
int cfexist( char * filename )
{

View file

@ -3,6 +3,7 @@ D1X-Rebirth Changelog
20070230
--------
main/game.c, main/newmenu.c, main/newmenu.h: introduced newmenu_dotiny() from D2X to show menus with GAME_FONT; extended Help-menu and removed D1X-Help-menu
cfile/cfile.c, main/game.c: Error-proof cfile_init_hogfile(), added forgotten break statement for Pause/Unpause Demo
20070329
--------

View file

@ -2432,6 +2432,7 @@ void HandleGameKey(int key)
extern int mekh_demo_paused;
mekh_demo_paused = !mekh_demo_paused;
}
break;
case KEY_F4: palette_save(); joydefs_calibrate(); palette_restore(); break;
case KEY_F5:
if ( Newdemo_state == ND_STATE_RECORDING )