Difference for main/altsound.c from version 1.4 to 1.5


version 1.4 version 1.5
Line 3
 
Line 3
 #include <stdio.h>  #include <stdio.h>
 #include <string.h>  #include <string.h>
 #include "strio.h"  #include "strio.h"
 #include "sounds.h"  
 #include "digi.h"  
 #include "altsound.h"  
 #include "types.h"  #include "types.h"
 #include "d_io.h"  #include "d_io.h"
 #include "u_mem.h"  #include "u_mem.h"
   #include "error.h"
   #include "sounds.h"
   #include "digi.h"
   #include "altsound.h"
   
   
 int use_alt_sounds=0;  int use_alt_sounds=0;
 altsound_data altsound_list[MAX_SOUNDS];  digi_sound altsound_list[MAX_SOUNDS];
   int use_altsound[MAX_SOUNDS];
   
 void read_alt_soundlist(char *soundfile_list)  int digi_xlat_sound(int soundnum)
 {  {
  FILE *f;     if ( soundnum < 0 )
  char *line,word[64];      return -1;
  int i;  
   
 #ifdef SHAREWARE     if ( digi_lomem )
   return;  
 #endif  
   
    for(i=0;i<MAX_SOUNDS;i++)  
     {      {
      altsound_list[i].soundnum=-1;       int i;
      memset(altsound_list[i].file,0,64*sizeof(char));        i = AltSounds[soundnum];
          if ( i == 255 )
           return -1;
          else
           return i;
       }
      else
       return Sounds[soundnum];
     }      }
   
   f=fopen(soundfile_list,"rt");  digi_sound *Sounddat(int soundnum)
   
    if(!f) return;  
   
    while(!feof(f))  
     {  
       line=fsplitword(f,'\n');  
        if(line)  
         {          {
            if((line[0]!='#') && sscanf(line,"%i=%s\n",&i,word)==2)    if(use_altsound[soundnum])
      return &altsound_list[soundnum];
     else
             {              {
                if(strlen(word) <= 13)      int i;
                 {       i = digi_xlat_sound(soundnum);
                   sprintf(altsound_list[i].file,"%s",word);        if (i < 0)
                   altsound_list[i].soundnum = i;         return NULL;
                   use_alt_sounds++;        else
                 }         return &(GameSounds[i]);
             }  
           free(line);  
         }  
     }  
   
   fclose(f);  
 }  }
   
 int use_alt_sound(int soundnum)  
 {  
   return (altsound_list[soundnum].soundnum != -1);  
 }  }
   
 int get_alt_sound_size(int soundnum)  void load_alt_sounds(char *soundfile_list)
 {  {
   return altsound_list[soundnum].datsize;   FILE *list,*sound;
 }   char *line,word[256];
    int i,channels=0,datsize=0,bits=0,freq=0;
   
 char * load_alt_sound_info(int soundnum, digi_sound *snd)    memset(&use_altsound,0,sizeof(int) * MAX_SOUNDS);
 {    memset(&altsound_list,0,sizeof(digi_sound) * MAX_SOUNDS);
  FILE *snd_file;  
  int smplsize;  
   
   if(!use_alt_sound(soundnum))    list=fopen(soundfile_list,"rt");
    return NULL;  
   
   snd_file=fopen(altsound_list[soundnum].file,"rb");     if(!list) return;
                                    
    if(!snd_file)     while(!feof(list))
     {      {
       altsound_list[soundnum].soundnum = -1;        line=fsplitword(list,'\n');
       return NULL;         if((line) &&
     }            (line[0]!='#') &&
             (sscanf(line,"%i=%s\n",&i,word)==2) &&
   // read info from wav file; if error, return 0            (i >= 0) &&
   fseek(snd_file,34,SEEK_SET);            (i <= MAX_SOUNDS) )
   fread(&(snd->bits),sizeof(u_int16_t),1,snd_file);  
   fseek(snd_file,24,SEEK_SET);  
   fread(&(snd->freq),sizeof(u_int32_t),1,snd_file);  
 //  fseek(snd_file,22,SEEK_SET); // # channels  
 // fread(&(),sizeof(u_int16_t),1,snd_file);  
   
   fseek(snd_file,34,SEEK_SET);  
   fread(&smplsize,sizeof(u_int16_t),1,snd_file);  
   fseek(snd_file,40,SEEK_SET);  
   fread(&(altsound_list[soundnum].datsize),sizeof(u_int32_t),1,snd_file);  
   
 #ifdef ALLEGRO  
   snd->len=(altsound_list[soundnum].datsize*8)/smplsize;  
 #else  
   snd->length=(altsound_list[soundnum].datsize*8)/smplsize;  
 #endif  
   
   fclose(snd_file);  
   
    if(ferror(snd_file))  
     {      {
       altsound_list[soundnum].soundnum = -1;            sound=fopen(word,"rb");
       return NULL;             if(sound)
     }  
   
   return altsound_list[soundnum].file;  
 }  
   
 int load_alt_sound(int soundnum, digi_sound *snd)  
 {  {
  FILE *snd_file;                fseek(sound,40,SEEK_SET);
                 fread(&(datsize),sizeof(u_int32_t),1,sound);
    if(!use_alt_sound(soundnum))  
     return 0;  
   
   snd_file=fopen(altsound_list[soundnum].file,"rb");                altsound_list[i].data = (void *)malloc(datsize);
   
    if(!snd_file)                 if(altsound_list[i].data)
     {      {
       altsound_list[soundnum].soundnum = -1;                    fseek(sound,34,SEEK_SET);
       return 0;                    fread(&(bits),sizeof(u_int16_t),1,sound);
     }  
   
                     fseek(sound,24,SEEK_SET);
                     fread(&(freq),sizeof(u_int32_t),1,sound);
   
  // read data from file and store in *data; if error, return 0                    fseek(sound,22,SEEK_SET);
   fseek(snd_file,44,SEEK_SET);                    fread(&(channels),sizeof(u_int16_t),1,sound);
   fread(snd->data,altsound_list[soundnum].datsize,1,snd_file);  
   
   fclose(snd_file);                    fseek(sound,44,SEEK_SET);
                     fread(altsound_list[i].data,datsize,1,sound);
   
    if(ferror(snd_file))                     if(!ferror(sound))
     {      {
       altsound_list[soundnum].soundnum = -1;                        altsound_list[i].bits=bits;
       return 0;                        altsound_list[i].freq=freq;
   #ifdef ALLEGRO
                         altsound_list[i].len=datsize;
                         altsound_list[i].loop_start=0;
                         altsound_list[i].loop_end = altsound_list[i].len;
                         altsound_list[i].priority=128;
                         altsound_list[i].param=-1;
   #else
                         altsound_list[i].length=datsize;
   #endif
                         use_alt_sounds++;
                         use_altsound[i]=1;
                       }
                   }
                 fclose(sound);
               }
             free(line);
           }
       }
     fclose(list);
     }      }
   
   return 0;  void free_alt_sounds()
   {
    int i;
      for(i=0;i<MAX_SOUNDS;i++)
       if(use_altsound[i] && altsound_list[i].data)
        {
          free(altsound_list[i].data);
          use_altsound[i]=0;
          use_alt_sounds--;
 }  }
   
      for(i=0;i<MAX_SOUNDS;i++)
       if(use_altsound[i] || altsound_list[i].data || use_alt_sounds)
        Error("Something screwed in freeing altsounds (num:%i)\n",i);
   }

Legend:
line(s) removed in v.1.4 
line(s) changed
 line(s) added in v.1.5