From: Toni Wilen Date: Sun, 15 Aug 2010 09:17:40 +0000 (+0300) Subject: prowiz X-Git-Tag: 2300~10 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=226098260cac739673d49b67065878d4fb9c7030;p=francis%2Fwinuae.git prowiz --- diff --git a/prowizard/rippers/ProPacker21.c b/prowizard/rippers/ProPacker21.c index 92750e8b..29b486ae 100644 --- a/prowizard/rippers/ProPacker21.c +++ b/prowizard/rippers/ProPacker21.c @@ -33,11 +33,13 @@ short testPP21 ( void ) return BAD; } /* loop start > size ? */ + PW_l = ((in_data[PW_Start_Address+4+PW_j*8]*256)+in_data[PW_Start_Address+5+PW_j*8])*2; + if ( PW_l != 0xFFFF){ if ( (((in_data[PW_Start_Address+4+PW_j*8]*256)+in_data[PW_Start_Address+5+PW_j*8])*2) > PW_k ) { /*printf ( "#2,1 (start:%ld)\n" , PW_Start_Address );*/ return BAD; - } + }} } if ( PW_WholeSampleSize <= 2 ) { @@ -134,18 +136,17 @@ void Rip_PP21 ( void ) * - Speed-up and Binary smaller. * update : 8 dec 2003 * - no more fopen () + * update : 20100814 + * - rewrote depacker (no more useless patterns) */ void Depack_PP21 ( void ) { - Uchar c1=0x00,c2=0x00; - short Max=0; - Uchar Tracks_Numbers[4][128]; - short Tracks_PrePointers[512][64]; - Uchar NOP=0x00; /* number of pattern */ - Uchar *ReferenceTable; - Uchar *Whatever; - long i=0,j=0; + Uchar *Header, *Pattern; + Ulong ReadTrkPat[128][4], ReadPat[128]; + long Highest_Track = 0; + long whereTableRef; + long i=0,j=0,k=0,l=0,m=0; long Total_Sample_Size=0; long Where=PW_Start_Address; FILE *out; @@ -153,129 +154,145 @@ void Depack_PP21 ( void ) if ( Save_Status == BAD ) return; - BZERO ( Tracks_Numbers , 4*128 ); - BZERO ( Tracks_PrePointers , 512*128 ); sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 ); out = PW_fopen ( Depacked_OutName , "w+b" ); - Whatever = (Uchar *) malloc (1024); - BZERO ( Whatever , 1024 ); - /* title */ - fwrite ( Whatever , 20 , 1 , out ); + Header = (Uchar *)malloc(1084); + Pattern = (Uchar *)malloc(1024); + BZERO ( Header , 1084 ); + BZERO ( Pattern , 1024 ); for ( i=0 ; i<31 ; i++ ) { - /*sample name*/ - fwrite ( Whatever , 22 , 1 , out ); - /* sample siz */ Total_Sample_Size += (((in_data[Where]*256)+in_data[Where+1])*2); /* siz,fine,vol,lstart,lsize */ - fwrite ( &in_data[Where] , 8 , 1 , out ); + Header[42+i*30] = in_data[Where]; + Header[43+i*30] = in_data[Where+1]; + Header[44+i*30] = in_data[Where+2]; + Header[45+i*30] = in_data[Where+3]; + Header[46+i*30] = in_data[Where+4]; + Header[47+i*30] = in_data[Where+5]; + Header[48+i*30] = in_data[Where+6]; + Header[49+i*30] = in_data[Where+7]; Where += 8; } /* pattern table lenght */ - NOP = in_data[Where]; - fwrite ( &NOP , 1 , 1 , out ); + Header[950] = in_data[Where]; Where += 1; - /*printf ( "Number of patterns : %d\n" , NOP );*/ + /*printf ( "Number of patterns : %d\n" , Header[950] );*/ /* NoiseTracker restart byte */ - fwrite ( &in_data[Where] , 1 , 1 , out ); + Header[951] = in_data[Where]; Where += 1; - Max = 0; - for ( j=0 ; j<4 ; j++ ) + // now, where = 0xFA + for (i=0;i Max ) - Max = Tracks_Numbers[j][i]; - } + ReadPat[i] = (in_data[Where+i]*256*256*256) + + (in_data[Where+i+128]*256*256) + + (in_data[Where+i+256]*256) + + in_data[Where+i+384]; + ReadTrkPat[i][0] = in_data[Where+i]; + ReadTrkPat[i][1] = in_data[Where+i+128]; + ReadTrkPat[i][2] = in_data[Where+i+256]; + ReadTrkPat[i][3] = in_data[Where+i+384]; + if (ReadTrkPat[i][0] > Highest_Track) + Highest_Track = ReadTrkPat[i][0]; + if (ReadTrkPat[i][1] > Highest_Track) + Highest_Track = ReadTrkPat[i][1]; + if (ReadTrkPat[i][2] > Highest_Track) + Highest_Track = ReadTrkPat[i][2]; + if (ReadTrkPat[i][3] > Highest_Track) + Highest_Track = ReadTrkPat[i][3]; + /*printf ("%x-%x-%x-%x\n",ReadTrkPat[i][0],ReadTrkPat[i][1],ReadTrkPat[i][2],ReadTrkPat[i][3]);*/ } - /*printf ( "Number of tracks : %d\n" , Max+1 );*/ - - /* write pattern table without any optimizing ! */ - for ( c1=0x00 ; c1k)) + m = ReadPat[i]; + /* if k == m then an already existing ref was found */ + if (k==m) + continue; + /* m is the next minimum */ + k = m; + for (i=0; i