home *** CD-ROM | disk | FTP | other *** search
/ Fun CD 26 / OTACD26.ISO / archive / game / sf31wave / sf31wave.lzh / sf31wave.c < prev    next >
C/C++ Source or Header  |  1998-01-09  |  5KB  |  161 lines

  1. /*  SHINING FORCE 3-1 wave loader ver.0.5     */
  2. /* 97/12/31 (c) tokai@main.eng.hokudai.ac.jp  */
  3.  
  4. #include<string.h>
  5. #include<stdlib.h>
  6. #include<stdio.h>
  7.  
  8. void gnfunc(int,char*,int,int),wlong(long),wshort(short);
  9. FILE *fo,*fi;
  10.     int size,freq,bit;
  11.     char file[50],ofile[50];
  12.     char argu[7],argu2[5]=".sap",argu3[5]=".wav";
  13.  
  14. main(int argc,char *argv[])
  15. {
  16.     int chr,num;
  17.  
  18.     chr=0; for(num=1;num<=4;num++) gnfunc(argc,argv[1],chr,num);
  19.     chr=0; for(num=6;num<=8;num++) gnfunc(argc,argv[1],chr,num);
  20.     chr=1; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  21.     chr=2; for(num=1;num<=9;num++) gnfunc(argc,argv[1],chr,num);
  22.     chr=3; num=110; gnfunc(argc,argv[1],chr,num);
  23.     chr=3; num=113; gnfunc(argc,argv[1],chr,num);
  24.     chr=3; for(num=1;num<=7;num++) gnfunc(argc,argv[1],chr,num);
  25.     chr=4; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  26.     chr=5; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  27.     chr=6; for(num=1;num<=6;num++) gnfunc(argc,argv[1],chr,num);
  28.     chr=6; for(num=8;num<=15;num++) gnfunc(argc,argv[1],chr,num);
  29.     chr=7; for(num=1;num<=4;num++) gnfunc(argc,argv[1],chr,num);
  30.     chr=7; for(num=6;num<=8;num++) gnfunc(argc,argv[1],chr,num);
  31.     chr=8; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  32.     chr=9; num=148; gnfunc(argc,argv[1],chr,num);
  33.     chr=9; for(num=150;num<=152;num++) gnfunc(argc,argv[1],chr,num);
  34.     chr=9; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  35.     chr=10; for(num=1;num<=9;num++) gnfunc(argc,argv[1],chr,num);
  36.     chr=11; for(num=1;num<=9;num++) gnfunc(argc,argv[1],chr,num);
  37.     chr=12; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  38.     chr=13; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  39.     chr=14; for(num=1;num<=9;num++) gnfunc(argc,argv[1],chr,num);
  40.     chr=15; for(num=154;num<=159;num++) gnfunc(argc,argv[1],chr,num);
  41.     chr=15; for(num=1;num<=4;num++) gnfunc(argc,argv[1],chr,num);
  42.     chr=16; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  43.     chr=16; num=5; gnfunc(argc,argv[1],chr,num);
  44.     chr=17; for(num=1;num<=5;num++) gnfunc(argc,argv[1],chr,num);
  45.     chr=18; for(num=1;num<=5;num++) gnfunc(argc,argv[1],chr,num);
  46.     chr=19; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  47.     chr=90; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  48.     chr=91; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  49.     chr=92; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  50.     chr=93; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  51.     chr=94; for(num=1;num<=3;num++) gnfunc(argc,argv[1],chr,num);
  52.  
  53.     return(0);
  54. }         
  55.  
  56.  
  57. void gnfunc(int argcc,char argvv[],int chr,int num)
  58. {
  59.     int i,i2,i3,i4,c;
  60.  
  61.     freq = 22050;bit = 8;
  62.  
  63.     argu[0] = 'V';
  64.     i2 = chr;
  65.     i = i2 /10; i2 -= i*10; i += 48;
  66.     i2 += 48;
  67.     argu[1]=i; argu[2]=i2;
  68.  
  69.     if(num<100){
  70.     i4 = num;
  71.     i3= i4 /10; i4 -= i3*10; i3 += 48;
  72.     i4 += 48;
  73.     argu[3] = 's';argu[4]=i3; argu[5]=i4;}
  74.     else{
  75.     i4 = num;
  76.     i2= i4 /100; i4 -= i2*100; i2 += 48;
  77.     i3= i4 /10; i4 -= i3*10; i3 += 48;
  78.     i4 += 48;
  79.     argu[3]=i2;argu[4]=i3;argu[5]=i4;}
  80.  
  81.     argu[6] = '\0';
  82.  
  83.     if(argcc>1) sscanf(argvv,"%s",&file); else file[0]='\0';
  84.     strcat(strcat(file,argu),argu2);
  85.     printf("checking %s \n",file); 
  86.  
  87. /* check input file size */
  88.  
  89.     size=0;
  90.     if((fi = fopen(file,"rb"))==0){
  91.        printf("file read errror %s\n",file);exit(1);}
  92.     while(fgetc(fi)!=-1)size++;
  93.     fclose(fi);
  94.  
  95.     printf("size = %d\n",size);
  96.  
  97. /* open output file */
  98.  
  99.     ofile[0]='\0';
  100.     strcat(strcat(ofile,argu),argu3);
  101.     printf("writing %s ...",ofile);
  102.  
  103.     if((fo = fopen(ofile,"wb"))==0){
  104.          printf("file write  errror %s\n",ofile);exit(1);}
  105.  
  106. /* open input file */
  107.  
  108.     if((fi = fopen(file,"rb"))==0){
  109.      printf("file read errror %s\n",file);exit(1);}
  110.  
  111.     fputc('R',fo);
  112.     fputc('I',fo);    
  113.     fputc('F',fo);
  114.     fputc('F',fo);
  115.     wlong((long)(size+36));
  116.     fputc('W',fo);
  117.     fputc('A',fo);    
  118.     fputc('V',fo);
  119.     fputc('E',fo);
  120.     fputc('f',fo);
  121.     fputc('m',fo);    
  122.     fputc('t',fo);
  123.     fputc(' ',fo);
  124.     wlong(16l);    
  125.     wshort(1);    
  126.     wshort(1);    
  127.     wlong((long)freq);    
  128.     wlong((long)(freq*bit/8));
  129.     wshort((short)(bit/8));
  130.     wshort((short)bit);
  131.     fputc('d',fo);
  132.     fputc('a',fo);    
  133.     fputc('t',fo);
  134.     fputc('a',fo);
  135.     wlong((long)size);
  136.  
  137.     for(i=0;i<size;i++){
  138.       if((c=fgetc(fi))>=0x80) c -= 0x80;else c += 0x80; 
  139.       fputc(c,fo);}
  140.  
  141.    fclose(fi);
  142.    fclose(fo);
  143.         
  144.    printf("done.\n");
  145.  
  146.   }
  147.  
  148. void wshort(short n)
  149. {
  150.     fputc(n & 255,fo);
  151.         fputc((n >> 8)&255,fo);
  152. }
  153.  
  154. void wlong(long n)
  155. {
  156.     fputc((int)(n & 255),fo);
  157.     fputc((int)((n >> 8) & 255),fo);
  158.     fputc((int)((n >> 16)& 255),fo);
  159.     fputc((int)((n >> 24)& 255),fo);
  160. }
  161.