prowizard/prowiz.c
prowizard/misc/testbag.c
prowizard/rippers/AC1D_packer.c
+ prowizard/rippers/AMF.c
prowizard/rippers/AMOS-MusicBank.c
prowizard/rippers/AMOS-PowerPackerBank.c
prowizard/rippers/BP-Soundmonitor.c
prowizard/rippers/DigiBooster17.c
prowizard/rippers/DigitalIllusion.c
prowizard/rippers/DoubleAction.c
+ prowizard/rippers/DM1.c
prowizard/rippers/Dragpack100.c
prowizard/rippers/Dragpack252.c
prowizard/rippers/EurekaPacker.c
prowizard/rippers/GNUPacker12.c
prowizard/rippers/GnuPlayer.c
prowizard/rippers/GPMO.c
+ prowizard/rippers/HCD.c
prowizard/rippers/HeatseekerMC10.c
+ prowizard/rippers/HighPresCr.c
prowizard/rippers/HornetPacker.c
prowizard/rippers/HQC2.c
+ prowizard/rippers/IFF.c
+ prowizard/rippers/IT.c
prowizard/rippers/JamCracker.c
prowizard/rippers/KefrensSoundMachine.c
prowizard/rippers/MasterCruncher30-Address.c
prowizard/rippers/NovoTrade.c
prowizard/rippers/NP3.c
prowizard/rippers/PhaPacker.c
+ prowizard/rippers/Perfsong.c
prowizard/rippers/PolkaPacker.c
prowizard/rippers/PowerMusic.c
prowizard/rippers/PowerPacker23.c
prowizard/rippers/Prorunner20.c
prowizard/rippers/QuadraComposer.c
prowizard/rippers/RelokIt10.c
+ prowizard/rippers/S3M.c
+ prowizard/rippers/SA.c
prowizard/rippers/SGT-Packer.c
prowizard/rippers/skizzo.c
+ prowizard/rippers/SlamPacker.c
prowizard/rippers/SkytPacker.c
prowizard/rippers/SoundFX.c
prowizard/rippers/SoundTracker.c
prowizard/rippers/StoneCracker310.c
prowizard/rippers/SuperCruncher27.c
prowizard/rippers/SyncroPacker46.c
+ prowizard/rippers/THX.c
prowizard/rippers/TetraPack102.c
prowizard/rippers/TetraPack21.c
prowizard/rippers/TetraPack22.c
prowizard/rippers/UnicTracker2.c
prowizard/rippers/WantonPacker.c
prowizard/rippers/XannPlayer.c
+ prowizard/rippers/bnr.c
+ prowizard/rippers/mosh.c
+ prowizard/rippers/okta.c
+ prowizard/rippers/pmd3.c
+ prowizard/rippers/sidmon1.c
+ prowizard/rippers/sidmon2.c
+ prowizard/rippers/struggle.c
prowizard/rippers/ZenPacker.c
)
list(APPEND WINUAE_UNIX_EXTRA_SOURCES
root->addWidget(groupBox(QStringLiteral("Output Properties"), properties));
QPushButton *saveScreenshot = new QPushButton(QStringLiteral("Save screenshot"));
- QPushButton *proWizard = new QPushButton(QStringLiteral("Pro Wizard 1.62"));
+ QPushButton *proWizard = new QPushButton(QStringLiteral("Pro Wizard 1.70a"));
QCheckBox *sampleRipper = new QCheckBox(QStringLiteral("Sample ripper"));
if (hardwareProvider.saveScreenshot) {
connect(saveScreenshot, &QPushButton::clicked, this, [this]() {
<ClCompile Include="..\..\prowizard\prowiz.c" />
<ClCompile Include="..\..\prowizard\misc\testbag.c" />
<ClCompile Include="..\..\prowizard\rippers\AC1D_packer.c" />
+ <ClCompile Include="..\..\prowizard\rippers\AMF.c" />
<ClCompile Include="..\..\prowizard\rippers\AMOS-MusicBank.c" />
<ClCompile Include="..\..\prowizard\rippers\AMOS-PowerPackerBank.c" />
<ClCompile Include="..\..\prowizard\rippers\BP-Soundmonitor.c" />
<ClCompile Include="..\..\prowizard\rippers\DigiBooster17.c" />
<ClCompile Include="..\..\prowizard\rippers\DigitalIllusion.c" />
<ClCompile Include="..\..\prowizard\rippers\DoubleAction.c" />
+ <ClCompile Include="..\..\prowizard\rippers\DM1.c" />
<ClCompile Include="..\..\prowizard\rippers\Dragpack100.c" />
<ClCompile Include="..\..\prowizard\rippers\Dragpack252.c" />
<ClCompile Include="..\..\prowizard\rippers\EurekaPacker.c" />
<ClCompile Include="..\..\prowizard\rippers\GNUPacker12.c" />
<ClCompile Include="..\..\prowizard\rippers\GnuPlayer.c" />
<ClCompile Include="..\..\prowizard\rippers\GPMO.c" />
+ <ClCompile Include="..\..\prowizard\rippers\HCD.c" />
<ClCompile Include="..\..\prowizard\rippers\HeatseekerMC10.c" />
+ <ClCompile Include="..\..\prowizard\rippers\HighPresCr.c" />
<ClCompile Include="..\..\prowizard\rippers\HornetPacker.c" />
<ClCompile Include="..\..\prowizard\rippers\HQC2.c" />
+ <ClCompile Include="..\..\prowizard\rippers\IFF.c" />
+ <ClCompile Include="..\..\prowizard\rippers\IT.c" />
<ClCompile Include="..\..\prowizard\rippers\JamCracker.c" />
<ClCompile Include="..\..\prowizard\rippers\KefrensSoundMachine.c" />
<ClCompile Include="..\..\prowizard\rippers\MasterCruncher30-Address.c" />
<ClCompile Include="..\..\prowizard\rippers\NovoTrade.c" />
<ClCompile Include="..\..\prowizard\rippers\NP3.c" />
<ClCompile Include="..\..\prowizard\rippers\PhaPacker.c" />
+ <ClCompile Include="..\..\prowizard\rippers\Perfsong.c" />
<ClCompile Include="..\..\prowizard\rippers\PolkaPacker.c" />
<ClCompile Include="..\..\prowizard\rippers\PowerMusic.c" />
<ClCompile Include="..\..\prowizard\rippers\PowerPacker23.c" />
<ClCompile Include="..\..\prowizard\rippers\Prorunner20.c" />
<ClCompile Include="..\..\prowizard\rippers\QuadraComposer.c" />
<ClCompile Include="..\..\prowizard\rippers\RelokIt10.c" />
+ <ClCompile Include="..\..\prowizard\rippers\S3M.c" />
+ <ClCompile Include="..\..\prowizard\rippers\SA.c" />
<ClCompile Include="..\..\prowizard\rippers\SGT-Packer.c" />
<ClCompile Include="..\..\prowizard\rippers\skizzo.c" />
+ <ClCompile Include="..\..\prowizard\rippers\SlamPacker.c" />
<ClCompile Include="..\..\prowizard\rippers\SkytPacker.c" />
<ClCompile Include="..\..\prowizard\rippers\SoundFX.c" />
<ClCompile Include="..\..\prowizard\rippers\SoundTracker.c" />
<ClCompile Include="..\..\prowizard\rippers\StoneCracker310.c" />
<ClCompile Include="..\..\prowizard\rippers\SuperCruncher27.c" />
<ClCompile Include="..\..\prowizard\rippers\SyncroPacker46.c" />
+ <ClCompile Include="..\..\prowizard\rippers\THX.c" />
<ClCompile Include="..\..\prowizard\rippers\TetraPack102.c" />
<ClCompile Include="..\..\prowizard\rippers\TetraPack21.c" />
<ClCompile Include="..\..\prowizard\rippers\TetraPack22.c" />
<ClCompile Include="..\..\prowizard\rippers\UnicTracker2.c" />
<ClCompile Include="..\..\prowizard\rippers\WantonPacker.c" />
<ClCompile Include="..\..\prowizard\rippers\XannPlayer.c" />
+ <ClCompile Include="..\..\prowizard\rippers\bnr.c" />
+ <ClCompile Include="..\..\prowizard\rippers\mosh.c" />
+ <ClCompile Include="..\..\prowizard\rippers\okta.c" />
+ <ClCompile Include="..\..\prowizard\rippers\pmd3.c" />
+ <ClCompile Include="..\..\prowizard\rippers\sidmon1.c" />
+ <ClCompile Include="..\..\prowizard\rippers\sidmon2.c" />
+ <ClCompile Include="..\..\prowizard\rippers\struggle.c" />
<ClCompile Include="..\..\prowizard\rippers\ZenPacker.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\AC1D_packer.c">
+ <ClCompile Include="..\..\prowizard\rippers\AMF.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\AMOS-MusicBank.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\DoubleAction.c">
+ <ClCompile Include="..\..\prowizard\rippers\DM1.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\Dragpack100.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\GPMO.c">
+ <ClCompile Include="..\..\prowizard\rippers\HCD.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\HeatseekerMC10.c">
+ <ClCompile Include="..\..\prowizard\rippers\HighPresCr.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\HornetPacker.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\HQC2.c">
+ <ClCompile Include="..\..\prowizard\rippers\IFF.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\IT.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\JamCracker.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\PhaPacker.c">
+ <ClCompile Include="..\..\prowizard\rippers\Perfsong.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\PolkaPacker.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\RelokIt10.c">
+ <ClCompile Include="..\..\prowizard\rippers\S3M.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\SA.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\SGT-Packer.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\skizzo.c">
+ <ClCompile Include="..\..\prowizard\rippers\SlamPacker.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\SkytPacker.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\SyncroPacker46.c">
+ <ClCompile Include="..\..\prowizard\rippers\THX.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\TetraPack102.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\XannPlayer.c">
+ <ClCompile Include="..\..\prowizard\rippers\bnr.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\mosh.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\okta.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\pmd3.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\sidmon1.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\sidmon2.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\prowizard\rippers\struggle.c">
+ <Filter>Source Files\Rippers</Filter>
+ </ClCompile>
<Filter>Source Files\Rippers</Filter>
</ClCompile>
<ClCompile Include="..\..\prowizard\rippers\ZenPacker.c">
<Filter>Source Files\Rippers</Filter>
</ClCompile>
</ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
CONTROL "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT,15,129,144,14
GROUPBOX "Ripper",IDC_STATIC,1,155,393,65
PUSHBUTTON "Save screenshot",IDC_SCREENSHOT,28,169,87,14
- PUSHBUTTON "Pro Wizard 1.62",IDC_PROWIZARD,162,169,87,14,WS_DISABLED
+ PUSHBUTTON "Pro Wizard 1.70a",IDC_PROWIZARD,162,169,87,14,WS_DISABLED
CONTROL "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT,280,169,87,14
CONTROL "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,192,130,10
CONTROL "AVI output enabled",IDC_AVIOUTPUT_ACTIVATED,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT,15,129,144,14
GROUPBOX "Ripper",IDC_STATIC,1,155,393,65
PUSHBUTTON "Save screenshot",IDC_SCREENSHOT,28,169,87,14
- PUSHBUTTON "Pro Wizard 1.62",IDC_PROWIZARD,162,169,87,14,WS_DISABLED
+ PUSHBUTTON "Pro Wizard 1.70a",IDC_PROWIZARD,162,169,87,14,WS_DISABLED
CONTROL "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | BS_FLAT,280,169,87,14
CONTROL "Take screenshot before filtering",IDC_SCREENSHOT_ORIGINALSIZE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,192,130,10
LTEXT "fps",IDC_AVIOUTPUT_FPS_STATIC,255,84,19,8\r
PUSHBUTTON "Save screenshot",IDC_SCREENSHOT,16,141,76,14\r
GROUPBOX "Ripper",IDC_STATIC,5,127,274,38\r
- PUSHBUTTON "Pro Wizard 1.62",IDC_PROWIZARD,100,141,76,14,WS_DISABLED\r
+ PUSHBUTTON "Pro Wizard 1.70a",IDC_PROWIZARD,100,141,76,14,WS_DISABLED\r
CONTROL "Sample ripper",IDC_SAMPLERIPPER_ACTIVATED,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,192,141,77,14\r
GROUPBOX "Input Recorder",IDC_STATIC,5,166,274,33\r
CONTROL "Record",IDC_INPREC_RECORD,"Button",BS_AUTORADIOBUTTON | BS_PUSHLIKE | BS_FLAT,191,177,77,14\r
*
* part of Pro-Wizard-1 package
* (c) Sylvain "Asle" Chipaux
+
+20071216 some pbs pointed out by Luigi Auriemma. Thx.
+
*/
+#ifndef _GLOBALS_H
+#include "globals.h"
+#endif /* _GLOBALS_H */
+
/* tests */
#ifdef INCLUDEALL
-extern short testArcDDataCruncher ( void );
-extern short testByteKiller_13 ( void );
-extern short testByteKiller_20 ( void );
-extern short testByteKiller30 ( void );
-extern short testbytekillerpro10 ( void );
-extern short testcrunchmaniaAddr ( void );
-extern short testcrunchmaniaSimple ( void );
-extern short testCRND ( void );
-extern short testDefjam32 ( void );
-extern short testDefjam32pro ( void );
-extern short testDefjamCruncher32t (void);
-extern short testDoubleAction10 ( void );
-extern short testDragpack100 ( void );
-extern short testDragpack252 ( void );
-extern short testGNUPacker12 (void);
-extern short testHQCCruncher2 ( void );
-extern short testMasterCruncher30addr ( void );
-extern short testMaxPacker12 ( void );
-extern short testMegaCruncher10 ( void );
-extern short testMegaCruncher12 ( void );
-extern short testMegaCruncherObj ( void );
-extern short testPowerpacker23 ( void );
-extern short testPowerpacker30 ( void );
-extern short testPowerpacker40 ( void );
-extern short testPowerpacker4lib ( void );
-extern short testPPbk ( void );
-extern short testRelokIt10 ( void );
-extern short testSpikeCruncher ( void );
-extern short testSTC299 ( void );
-extern short testSTC299b ( void );
-extern short testSTC299d ( void );
-extern short testSTC300 ( void );
-extern short testSTC310 ( void );
-extern short testStoneCracker270 ( void );
-extern short testSuperCruncher27 ( void );
-extern short testSyncroPacker ( void );
-extern short testTetrapack102 ( void );
-extern short testTetrapack_2_1 ( void );
-extern short testTetrapack_2_2 ( void );
-extern short testTimeCruncher17 ( void );
-extern short testTNMCruncher11 ( void );
-extern short testTryIt101 ( void );
-extern short testTurboSqueezer61 ( void );
+extern int16_t testArcDDataCruncher ( void );
+extern int16_t testB9AB ( void );
+extern int16_t testByteKiller_13 ( void );
+extern int16_t testByteKiller_20 ( void );
+extern int16_t testByteKiller30 ( void );
+extern int16_t testbytekillerpro10 ( void );
+extern int16_t testBKCloneFLT ( void );
+extern int16_t testBKClone5 ( void );
+extern int16_t testcrunchmaniaAddr ( int );
+extern int16_t testcrunchmaniaSimple ( void );
+extern int16_t testCRND ( void );
+extern int16_t testDefjam32 ( void );
+extern int16_t testDefjam32pro ( void );
+extern int16_t testDefjam32t (void);
+extern int16_t testDietDataPacker ( void );
+extern int16_t testDoubleAction10 ( void );
+extern int16_t testDragpack100 ( void );
+extern int16_t testDragpack252 ( void );
+extern int16_t testGNUPacker12 (void);
+extern int16_t testHighPressureCruncher ( void );
+extern int16_t testHQCCruncher2 ( void );
+extern int16_t testIFF ( void );
+extern int16_t testIT ( void );
+extern int16_t testMasterCruncher30addr ( void );
+extern int16_t testMaxPacker12 ( void );
+extern int16_t testMegaCruncher10 ( void );
+extern int16_t testMegaCruncher12 ( void );
+extern int16_t testMegaCruncherObj ( void );
+extern int16_t testPowerpacker23 ( void );
+extern int16_t testPowerpacker30 ( void );
+extern int16_t testPowerpacker40 ( void );
+extern int16_t testPowerpacker4lib ( void );
+extern int16_t testPPbk ( void );
+extern int16_t testRelokIt10 ( void );
+extern int16_t testS3M (void);
+extern int16_t testSpikeCruncher ( void );
+extern int16_t testSTC299 ( void );
+extern int16_t testSTC299b ( void );
+extern int16_t testSTC299d ( void );
+extern int16_t testSTC300 ( void );
+extern int16_t testSTC310 ( void );
+extern int16_t testStoneCracker270 ( void );
+extern int16_t testSuperCruncher27 ( void );
+extern int16_t testSyncroPacker ( void );
+extern int16_t testTetrapack102 ( void );
+extern int16_t testTetrapack101 ( void );
+extern int16_t testTetrapack_2_1 ( void );
+extern int16_t testTetrapack_2_2 ( void );
+extern int16_t testTimeCruncher17 ( void );
+extern int16_t testTNMCruncher11 ( void );
+extern int16_t testTryIt101 ( void );
+extern int16_t testTurboSqueezer61 ( void );
#endif
-extern short testAC1D ( void );
-extern short testAmBk ( void );
-extern short testBP ( void );
-extern short testBSIFutureComposer ( void );
-extern short testDI ( void );
-extern short testDigiBooster17 ( void );
-extern short testEUREKA ( void );
-extern short testFC_M ( void );
-extern short testFC13 ( void );
-extern short testFC14 ( void );
-extern short testFuchsTracker ( void );
-extern short testFUZZAC ( void );
-extern short testGnuPlayer ( void );
-extern short testGMC ( void );
-extern short testGPMO ( void );
-extern short testHEATSEEKER ( void );
-extern short testHRT ( void );
-extern short testJamCracker ( void );
-extern short testKRIS ( void );
-extern short testKSM ( void );
-extern short testMMD0 ( void );
-extern short testMOD ( int );
-extern short testMP_noID ( void );
-extern short testMP_withID ( void );
-extern short testMUGICIAN ( void );
-extern short testNewtron ( void );
-extern short testNewtronOld ( void );
-extern short testNFH ( void );
-extern short testNoiserunner ( void );
-extern short testNoisepacker1 ( void );
-extern short testNoisepacker2 ( void );
-extern short testNoisepacker3 ( void );
-extern short testNovoTrade ( void );
-extern short testP40A ( void );
-extern short testP41A ( void );
-extern short testP50A ( void );
-extern short testP60A_nopack ( void );
-extern short testP60A_pack ( void );
-extern short testP61A_nopack ( void );
-extern short testP61A_pack ( void );
-extern short testPHA ( void );
-extern short testPM ( void );
-extern short testPM01 ( void );
-extern short testPM10c ( void );
-extern short testPM2 ( void );
-extern short testPM40 ( void );
-extern short testPMZ ( void );
-extern short testPolka ( void );
-extern short testPP10 ( void );
-extern short testPP21 ( void );
-extern short testPP30 ( void );
-extern short testPRUN1 ( void );
-extern short testPRUN2 ( void );
-/*extern short testPTK ( void );*/
-extern short testQuadraComposer ( void );
-extern short testSGT ( void );
-extern short testSkizzo ( void );
-extern short testSKYT ( void );
-extern short testSoundFX13 ( void );
-extern short testSoundTracker ( void );
-extern short testSTARPACK ( void );
-extern short testSTK26 ( void );
-extern short testSTIM ( void );
-extern short testStoneArtsPlayer ( void );
-extern short testTheDarkDemon ( void );
-extern short testTitanicsPlayer ( void );
-extern short testTMK ( void );
-extern short testTP1 ( void );
-extern short testTP2 ( void );
-extern short testTP3 ( void );
-extern short testUNIC_noID ( void );
-extern short testUNIC_withID ( void );
-extern short testUNIC_withemptyID ( void );
-extern short testUNIC2 ( void );
-extern short testWN ( void );
-extern short testXANN ( void );
-extern short testXM ( void );
-extern short testZEN ( void );
+extern int16_t testAC1D ( void );
+extern int16_t testAmBk ( void );
+extern int16_t testBP ( void );
+extern int16_t testBNR ( void );
+extern int16_t testBSIFutureComposer ( void );
+extern int16_t testDI ( void );
+extern int16_t testDigiBooster17 ( void );
+extern int16_t testDM1 ( void );
+extern int16_t testEUREKA ( void );
+extern int16_t testFC_M ( void );
+extern int16_t testFC13 ( void );
+extern int16_t testFC14 ( void );
+extern int16_t testFuchsTracker ( void );
+extern int16_t testFUZZAC ( void );
+extern int16_t testGnuPlayer ( void );
+extern int16_t testGMC ( void );
+extern int16_t testGPMO ( void );
+extern int16_t testHEATSEEKER ( void );
+extern int16_t testHCD ( void );
+extern int16_t testHRT ( void );
+extern int16_t testIFF ( void );
+extern int16_t testJamCracker ( void );
+extern int16_t testKRIS ( void );
+extern int16_t testKSM ( void );
+extern int16_t testMMD0 ( void );
+extern int16_t testMOD ( int );
+extern int16_t testMOSH ( void );
+extern int16_t testMP_noID ( void );
+extern int16_t testMP_withID ( void );
+extern int16_t testMUGICIAN ( void );
+extern int16_t testOkta ( void );
+extern int16_t testNewtron ( void );
+extern int16_t testNewtronOld ( void );
+extern int16_t testNFH ( void );
+extern int16_t testNoiserunner ( void );
+extern int16_t testNoisepacker1 ( void );
+extern int16_t testNoisepacker2 ( void );
+extern int16_t testNoisepacker3 ( void );
+extern int16_t testNovoTrade ( void );
+extern int16_t testP40A ( void );
+extern int16_t testP41A ( void );
+extern int16_t testP50A ( void );
+extern int16_t testP60A_nopack ( void );
+extern int16_t testP60A_pack ( void );
+extern int16_t testP61A_nopack ( void );
+extern int16_t testP61A_pack ( void );
+extern int16_t testPERFSONG ( void );
+extern int16_t testPHA ( void );
+extern int16_t testPM ( void );
+extern int16_t testPM01 ( void );
+extern int16_t testPM10c ( void );
+extern int16_t testPM2 ( void );
+extern int16_t testPM40 ( void );
+extern int16_t testPMD3 ( void );
+extern int16_t testPMZ ( void );
+extern int16_t testPolka ( void );
+extern int16_t testPP10 ( void );
+extern int16_t testPP21 ( void );
+extern int16_t testPP30 ( void );
+extern int16_t testPRUN1 ( void );
+extern int16_t testPRUN2 ( void );
+/*extern int16_t testPTK ( void );*/
+extern int16_t testQuadraComposer ( void );
+extern int16_t testSA ( void );
+extern int16_t testSAhunk ( void );
+extern int16_t testSGT ( void );
+extern int16_t testSIDMON1 (void);
+extern int16_t testSIDMON2 (void);
+extern int16_t testSkizzo ( void );
+extern int16_t testSKYT ( void );
+extern int16_t testSoundFX13 ( void );
+extern int16_t testSoundTracker ( void );
+extern int16_t testSTARPACK ( void );
+extern int16_t testSTK26 ( void );
+extern int16_t testSTIM ( void );
+extern int16_t testStoneArtsPlayer ( void );
+extern int16_t testSTRUGGLE ( void );
+extern int16_t testTheDarkDemon ( void );
+extern int16_t testTitanicsPlayer ( void );
+extern int16_t testTHX ( void );
+extern int16_t testTMK ( void );
+extern int16_t testTP1 ( void );
+extern int16_t testTP2 ( void );
+extern int16_t testTP3 ( void );
+extern int16_t testUNIC_noID ( void );
+extern int16_t testUNIC_withID ( void );
+extern int16_t testUNIC_withemptyID ( void );
+extern int16_t testUNIC2 ( void );
+extern int16_t testWN ( void );
+extern int16_t testXANN ( void );
+extern int16_t testXM ( void );
+extern int16_t testZEN ( void );
/* rips */
extern void Rip_ByteKiller ( void );
extern void Rip_ByteKiller30 ( void );
extern void Rip_bytekillerpro10 ( void );
+extern void Rip_BKCloneFLT ( void );
+extern void Rip_BKClone5 ( void );
extern void Rip_CrunchmaniaAddr ( void );
extern void Rip_CrunchmaniaSimple ( void );
extern void Rip_Defjam32 ( void );
+extern void Rip_DietDataPacker ( void );
extern void Rip_DoubleAction10 ( void );
extern void Rip_Dragpack100 ( void );
extern void Rip_Dragpack252 ( void );
extern void Rip_GNUPacker12 (void);
+extern void Rip_HighPressureCruncher ( void );
extern void Rip_HQCCruncher2 ( void );
+extern void Rip_IFF ( void );
+extern void Rip_IT ( void );
extern void Rip_MasterCruncher30addr ( void );
extern void Rip_MaxPacker12 ( void );
extern void Rip_MegaCruncher ( void );
extern void Rip_Powerpacker4lib ( void );
extern void Rip_PPbk ( void );
extern void Rip_RelokIt10 ( void );
+extern void Rip_S3M ( void );
extern void Rip_SpikeCruncher ( void );
extern void Rip_STC299 ( void );
extern void Rip_STC299b ( void );
extern void Rip_SuperCruncher27 ( void );
extern void Rip_SyncroPacker ( void );
extern void Rip_Tetrapack102 ( void );
+extern void Rip_Tetrapack101 ( void );
extern void Rip_Tetrapack_2_1 ( void );
extern void Rip_Tetrapack_2_2 ( void );
extern void Rip_TimeCruncher17 ( void );
#endif
extern void Rip_AC1D ( void );
extern void Rip_AmBk ( void );
+extern void Rip_BNR ( void );
extern void Rip_BP ( void );
extern void Rip_BSIFutureComposer ( void );
extern void Rip_DI ( void );
extern void Rip_DigiBooster17 ( void );
+extern void Rip_DM1 ( void );
extern void Rip_EUREKA ( void );
extern void Rip_FC_M ( void );
extern void Rip_FC13 ( void );
extern void Rip_GMC ( void );
extern void Rip_GPMO ( void );
extern void Rip_HEATSEEKER ( void );
+extern void Rip_HCD ( void );
extern void Rip_HRT ( void );
+extern void Rip_IFF ( void );
extern void Rip_JamCracker ( void );
extern void Rip_KRIS ( void );
extern void Rip_KSM ( void );
extern void Rip_MMD0 ( void );
extern void Rip_MOD ( int );
+extern void Rip_MOSH ( void );
extern void Rip_MUGICIAN ( void );
extern void Rip_MP_noID ( void );
extern void Rip_MP_withID ( void );
extern void Rip_Noisepacker3 ( void );
extern void Rip_Noiserunner ( void );
extern void Rip_NovoTrade ( void);
+extern void Rip_Okta ( void );
extern void Rip_P22A ( void );
extern void Rip_P30A ( void );
extern void Rip_P40A ( void );
extern void Rip_P50A ( void );
extern void Rip_P60A ( void );
extern void Rip_P61A ( void );
+extern void Rip_PERFSONG ( void );
extern void Rip_PHA ( void );
extern void Rip_PM ( void );
extern void Rip_PM01 ( void );
extern void Rip_PM18a ( void );
extern void Rip_PM20 ( void );
extern void Rip_PM40 ( void );
+extern void Rip_PMD3 ( void );
extern void Rip_Polka ( void );
extern void Rip_PP10 ( void );
extern void Rip_PP21 ( void );
extern void Rip_PP30 ( void );
/*extern void Rip_PTK ( void );*/
extern void Rip_QuadraComposer ( void );
+extern void Rip_SA ( void );
extern void Rip_SGT ( void );
+extern void Rip_SIDMON1 ( void );
+extern void Rip_SIDMON2 ( void );
extern void Rip_Skizzo ( void );
extern void Rip_SKYT ( void );
extern void Rip_SoundFX13 ( void );
extern void Rip_STK26 ( void );
extern void Rip_STIM ( void );
extern void Rip_StoneArtsPlayer ( void );
+extern void Rip_STRUGGLE ( void );
extern void Rip_TheDarkDemon ( void );
extern void Rip_TitanicsPlayer ( void );
+extern void Rip_THX ( void );
extern void Rip_TMK ( void );
extern void Rip_TP1 ( void );
extern void Rip_TP2 ( void );
extern void Depack_AmBk ( void );
extern void Depack_AC1D ( void );
extern void Depack_SoundFX13 ( void );
+extern void Depack_BNR ( void );
extern void Depack_DI ( void );
extern void Depack_EUREKA ( void );
extern void Depack_FC_M ( void );
extern void Depack_GMC ( void );
extern void Depack_GPMO ( void );
extern void Depack_HEATSEEKER ( void );
+extern void Depack_HCD ( void );
extern void Depack_HRT ( void );
extern void Depack_KRIS ( void );
extern void Depack_KSM ( void );
extern void Depack_MP ( void );
+extern void Depack_MOSH ( void );
extern void Depack_Newtron ( void );
extern void Depack_NewtronOld ( void );
extern void Depack_NFH ( void );
extern void Depack_P50A ( void );
extern void Depack_P60A ( void );
extern void Depack_P61A ( void );
+extern void Depack_PERFSONG ( void );
extern void Depack_PHA ( void );
extern void Depack_PM01 ( void );
extern void Depack_PM10c ( void );
extern void Depack_PM20 ( void );
extern void Depack_PM40 ( void );
extern void Depack_PM ( void );
+extern void Depack_PMD3 ( void );
extern void Depack_Polka ( void );
extern void Depack_PP10 ( void );
extern void Depack_PP21 ( void );
extern void Depack_STARPACK ( void );
extern void Depack_STK26 ( void );
extern void Depack_STIM ( void );
+extern void Depack_STRUGGLE ( void );
extern void Depack_StoneArtsPlayer ( void );
extern void Depack_TheDarkDemon ( void );
extern void Depack_TitanicsPlayer ( void );
extern void Support_Types ( void );
extern void Support_Types_FileDefault ( void );
extern void Save_Rip ( char *, int );
-extern void Save_Rip_Special ( char *, int, Uchar * , Ulong );
-extern void Crap (char *, Uchar, Uchar, FILE *);
-extern void Crap15 (char *, Uchar, Uchar, FILE *);
-extern short testSpecialCruncherData ( long , long );
+extern void Save_Rip_Special ( char *, int, uint8_t * , uint32_t );
+extern void Crap ( char *, uint8_t, uint8_t, FILE *);
+extern void Crap15 ( char *, uint8_t, uint8_t, FILE *);
+extern int16_t testSpecialCruncherData ( int32_t , int32_t );
extern void Rip_SpecialCruncherData ( char * , int , int );
-extern short test_1_start ( Ulong );
-extern short test_smps ( long, long, long, Uchar, Uchar );
-extern long PWGetFileSize ( char * );
+extern int16_t test_1_start ( uint32_t );
+extern int16_t test_smps ( int32_t, int32_t, int32_t, uint8_t, uint8_t );
+extern int32_t PWGetFileSize ( char * ); /* xigh: Should be 64-bits */
extern FILE * PW_fopen ( char *, char * );
-extern void fillPTKtable ( Uchar[37][2] );
+extern void fillPTKtable ( uint8_t[37][2] );
#ifndef htonl
extern unsigned int htonl(unsigned int);
#endif
/* Some say it's badly coding when using Globals ... sure it is, now what's the solution ? */
extern FILE *PW_in,*PW_out;
-extern long PW_Start_Address;
-extern Ulong OutputSize;
-extern long PW_in_size;
-extern long Cpt_Filename;
-extern Ulong PW_i;
-extern Ulong PW_j,PW_k,PW_l,PW_m,PW_n,PW_o;
-extern Uchar *in_data;
-/*extern Uchar OutName[5];*/
+extern int32_t PW_Start_Address; /* xigh: Should be 64 bits */
+extern uint32_t OutputSize;
+extern int32_t PW_in_size;
+extern int32_t Cpt_Filename;
+extern uint32_t PW_i;
+extern uint32_t PW_j,PW_k,PW_l,PW_m,PW_n,PW_o;
+extern uint8_t *in_data;
+/*extern uint8_t OutName[5];*/
extern char OutName_final[33];
extern char Depacked_OutName[33];
-extern Uchar Save_Status;
-extern Ulong PW_WholeSampleSize;
+extern uint8_t Save_Status;
+extern uint32_t PW_WholeSampleSize;
extern char Extensions[_KNOWN_FORMATS+1][33];
-extern Uchar CONVERT;
-extern Uchar Amiga_EXE_Header;
+extern uint8_t CONVERT;
+extern uint8_t Amiga_EXE_Header;
extern void pw_write_log (const char *, ...);
extern FILE *moduleripper2_fopen (const char *name, const char *mode, const char *aid, int addr, int size);
+#ifndef _GLOBALS_H
+#define _GLOBALS_H
+
/*
* ProWizard PC include file
*/
#include <stdio.h>
#include <stdlib.h>
+#include <stdint.h>
+/* #include <inttypes.h>*/
#include <string.h>
-//#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
-/*#include <gtk/gtk.h>*/
-#ifdef DOS
-#include <winsock2.h>
-#endif
-#ifdef DMALLOC
-#include "dmalloc.h"
-#endif
-
-
-typedef unsigned char Uchar;
-typedef unsigned long Ulong;
-typedef unsigned short Ushort;
#ifdef _WIN32
-__inline Ulong htonlx (Ulong v)
+__inline uint32_t htonlx (uint32_t v)
{
return (v >> 24) | ((v >> 8) & 0xff00) | (v << 24) | ((v << 8) & 0xff0000);
}
#endif
#endif
-#define _KNOWN_FORMATS 135
#define _TYPES_FILENAME "_types_"
#define _TYPES_LINE_LENGHT 256
#define MINIMAL_FILE_LENGHT 64
TitanicsPlayer,
NewtronOld,
NovoTrade,
- Skizzo,
+ GnoiPacker,
StoneArtsPlayer,
+ SLAM,
+ S3M,
+ MOSH,
+ BNR,
+ HCD,
+ TPACK101,
+ STRUGGLE,
+ BKCloneFLT,
+ Oktalizer,
+ AHX,
+ Sidmon1,
+ Sidmon2,
+ PerfSong,
+ MASMDataCruncher,
+ ImpulseTracker,
+ HighPresCruncher,
+ SP20,
+ B9AB,
+ HVL,
+ BKClone5,
+ xVdg,
+ Diet,
+ LSDDataCruncher,
+ JamDataCruncher,
+ MentalImage,
+ BHC3CruncherData,
+ IFF,
+ SA,
+ DM1,
+ PMd3,
+ PMD3,
+ BHC2CruncherData,
+ Pac1,
+
+ /* Must be the last : */
+ _KNOWN_FORMATS
};
+
+#endif /* _GLOBALS_H */
*/
-short Tuning[16][36] = {
+int16_t Tuning[16][36] = {
{ 856,808,762,720,678,640,604,570,538,508,480,453,
428,404,381,360,339,320,302,285,269,254,240,226,
214,202,190,180,170,160,151,143,135,127,120,113 },
*/
-FILE *PW_in,*PW_out;
-long PW_Start_Address=0;
-Ulong OutputSize=0;
-long PW_in_size;
-long Cpt_Filename=0l;
-Ulong PW_i;
-Ulong PW_j,PW_k,PW_l,PW_m,PW_n,PW_o;
-Uchar *in_data;
-/*Uchar OutName[5]={'.','-','-','-',0x00};*/
-char OutName_final[33];
-char Depacked_OutName[33];
-Uchar Save_Status = GOOD;
-Ulong PW_WholeSampleSize=0;
-char Extensions[_KNOWN_FORMATS+1][33];
-Uchar CONVERT = BAD;
-Uchar Amiga_EXE_Header = GOOD;
+FILE *PW_in,*PW_out;
+int32_t PW_Start_Address=0;
+uint32_t OutputSize=0;
+int32_t PW_in_size;
+int32_t Cpt_Filename=0l;
+uint32_t PW_i;
+uint32_t PW_j,PW_k,PW_l,PW_m,PW_n,PW_o;
+uint8_t *in_data;
+/*uint8_t OutName[5]={'.','-','-','-',0x00};*/
+char OutName_final[33];
+char Depacked_OutName[33];
+uint8_t Save_Status = GOOD;
+uint32_t PW_WholeSampleSize=0;
+char Extensions[_KNOWN_FORMATS+1][33];
+uint8_t CONVERT = BAD;
+uint8_t Amiga_EXE_Header = GOOD;
* at now, when this fonction is called, no global var has been used ...
* and can be here :). (save for the input file pointer ...)
*/
-#if 0
void Support_Types ( void )
{
- long types_file_size, cpt;
+ int32_t types_file_size, cpt;
char read_line[_TYPES_LINE_LENGHT];
FILE *types_file;
continue;
if ( sizeof ( read_line ) < 2 )
{
- printf ( "!!! Damaged \"%s\" file at non-commented line %ld\n"
+ printf ( "!!! Damaged \"%s\" file at non-commented line %u\n"
, _TYPES_FILENAME , PW_i+1 );
PW_i = 99999l;
break;
if ( PW_i != _KNOWN_FORMATS )
{
- printf ( "!!! Damaged \"%s\" file. Missing up %ld extensions definitions\n"
+ printf ( "!!! Damaged \"%s\" file. Missing up %u extensions definitions\n"
, _TYPES_FILENAME , _KNOWN_FORMATS-(PW_i+1));
Support_Types_FileDefault ();
return;
fclose ( types_file );
}
-#endif
-/*Uchar *XighExtensions[_KNOWN_FORMATS+1];*/
+/*uint8_t *XighExtensions[_KNOWN_FORMATS+1];*/
/*
* fill the global "Extension" with default extensions if a pb happened
strcpy ( Extensions[123], "SPv3" );
strcpy ( Extensions[124], "AtomikPackerData" );
strcpy ( Extensions[125], "AutomationPackerData" );
- // strcpy ( Extensions[125], "TreasurePattern" );
+ /* strcpy ( Extensions[125], "TreasurePattern" );*/
strcpy ( Extensions[126], "SGTPacker" );
strcpy ( Extensions[127], "GNUPacker12" );
strcpy ( Extensions[128], "CrunchmaniaSimple" );
strcpy ( Extensions[130], "TitanicsPlayer" );
strcpy ( Extensions[131], "NewtronOld" );
strcpy ( Extensions[132], "NovoTrade" );
- strcpy ( Extensions[133], "Skizzo" );
+ strcpy ( Extensions[133], "GnoiPacker" );
strcpy ( Extensions[134], "StoneArtsPlayer" );
- strcpy ( Extensions[135], "---" );
+ strcpy ( Extensions[135], "SLAM" );
+ strcpy ( Extensions[136], "S3M" );
+ strcpy ( Extensions[137], "MOSH" );
+ strcpy ( Extensions[138], "BinaryPacker" );
+ strcpy ( Extensions[139], "HCD" );
+ strcpy ( Extensions[140], "Tetrapack101" );
+ strcpy ( Extensions[141], "StruggleGame" );
+ strcpy ( Extensions[142], "BKCloneFLT" );
+ strcpy ( Extensions[143], "Oktalizer" );
+ strcpy ( Extensions[144], "AHX" );
+ strcpy ( Extensions[145], "Sidmon1" );
+ strcpy ( Extensions[146], "Sidmon2" );
+ strcpy ( Extensions[147], "PerfSong" );
+ strcpy ( Extensions[148], "MASMDataCruncher" );
+ strcpy ( Extensions[149], "ImpulseTracker" );
+ strcpy ( Extensions[150], "HighPresCruncher" );
+ strcpy ( Extensions[151], "SP20" );
+ strcpy ( Extensions[152], "B9AB" );
+ strcpy ( Extensions[153], "HVL" );
+ strcpy ( Extensions[154], "BKClone5" );
+ strcpy ( Extensions[155], "xVdg" );
+ strcpy ( Extensions[156], "DAT" );
+ strcpy ( Extensions[157], "LSDDataCruncher" );
+ strcpy ( Extensions[158], "JamDataCruncher" );
+ strcpy ( Extensions[159], "MI10" );
+ strcpy ( Extensions[160], "BHC3CruncherData" );
+ strcpy ( Extensions[161], "IFF" );
+ strcpy ( Extensions[162], "SA" );
+ strcpy ( Extensions[163], "DM1" );
+ strcpy ( Extensions[164], "PMd3" );
+ strcpy ( Extensions[165], "PMD3" );
+ strcpy ( Extensions[166], "BHC2CruncherData" );
+ strcpy ( Extensions[167], "Pac1" );
+ strcpy ( Extensions[168], "---" );
}
* saving what's found. Mainly music file here.
* PW_Start_Address & OutputSize are global .. not everybody likes
* that :(. I just cant seem to manage it otherwise.
+ *
+ * 20070825 : catching NULL off PW__fopen() for WinUAE
*/
void Save_Rip ( char * format_to_save, int FMT_EXT )
{
Save_Status = BAD;
- pw_write_log ( "%s found at %ld !. its size is : %ld\n", format_to_save , PW_Start_Address , OutputSize );
- if ( (PW_Start_Address + (long)OutputSize) > PW_in_size )
+ pw_write_log ( "%s found at %d !. its size is : %u\n", format_to_save , PW_Start_Address , OutputSize );
+ if ( (PW_Start_Address + (int32_t)OutputSize) > PW_in_size )
{
- pw_write_log ( "!!! Truncated, missing (%ld byte(s) !)\n"
+ pw_write_log ( "!!! Truncated, missing (%u byte(s) !)\n"
, (PW_Start_Address+OutputSize)-PW_in_size );
PW_i += 2 ;
return;
}
BZERO ( OutName_final, sizeof OutName_final);
- sprintf ( OutName_final , "%ld.%s" , Cpt_Filename , Extensions[FMT_EXT] );
+ sprintf ( OutName_final , "%d.%s" , Cpt_Filename , Extensions[FMT_EXT] );
pw_write_log ( " saving in file \"%s\" ... " , OutName_final );
Cpt_Filename += 1;
- PW_out = moduleripper2_fopen ( OutName_final , "w+b", format_to_save, PW_Start_Address, OutputSize);
- //PW_out = PW_fopen ( OutName_final , "w+b" );
- if (!PW_out)
- return;
+ PW_out = moduleripper2_fopen ( OutName_final , "w+b", format_to_save, PW_Start_Address, OutputSize );
+ if (PW_out == NULL)
+ return;
fwrite ( &in_data[PW_Start_Address] , OutputSize , 1 , PW_out );
fclose ( PW_out );
pw_write_log ( "done\n" );
{
pw_write_log ( " converting to Protracker ... " );
}
- //fflush ( stdout );
Save_Status = GOOD;
}
* Special cases for files with header to rebuild ...
*
*/
-void Save_Rip_Special ( char * format_to_save, int FMT_EXT, Uchar * Header_Block , Ulong Block_Size )
+void Save_Rip_Special ( char * format_to_save, int FMT_EXT, uint8_t * Header_Block , uint32_t Block_Size )
{
Save_Status = BAD;
- pw_write_log ( "%s found at %ld !. its size is : %ld\n", format_to_save , PW_Start_Address , OutputSize );
- if ( (PW_Start_Address + (long)OutputSize) > PW_in_size )
+ pw_write_log ( "%s found at %d !. its size is : %u\n", format_to_save , PW_Start_Address , OutputSize );
+ if ( (PW_Start_Address + (int32_t)OutputSize) > PW_in_size )
{
- pw_write_log ( "!!! Truncated, missing (%ld byte(s) !)\n"
+ pw_write_log ( "!!! Truncated, missing (%u byte(s) !)\n"
, (PW_Start_Address+OutputSize)-PW_in_size );
PW_i += 2 ;
return;
}
BZERO (OutName_final, sizeof OutName_final);
- sprintf ( OutName_final , "%ld.%s" , Cpt_Filename , Extensions[FMT_EXT] );
+ sprintf ( OutName_final , "%d.%s" , Cpt_Filename , Extensions[FMT_EXT] );
pw_write_log ( " saving in file \"%s\" ... " , OutName_final );
Cpt_Filename += 1;
-// PW_out = PW_fopen ( OutName_final , "w+b" );
PW_out = moduleripper2_fopen ( OutName_final , "w+b", format_to_save, PW_Start_Address, OutputSize );
+ if (PW_out == NULL)
+ return;
fwrite ( Header_Block , Block_Size , 1 , PW_out );
fwrite ( &in_data[PW_Start_Address] , OutputSize , 1 , PW_out );
fclose ( PW_out );
}
pw_write_log ( " Header of this file was missing and has been rebuilt !\n" );
if ( FMT_EXT == DragPack252)
- pw_write_log ( " WARNING !: it's a fake header since in this case !!\n" );
- //fflush ( stdout );
+ pw_write_log ( " WARNING !: it's a fake header in this case !!\n" );
Amiga_EXE_Header = GOOD;
Save_Status = GOOD;
}
/* writing craps in converted MODs */
-void Crap ( char *Format , Uchar Delta , Uchar Pack , FILE *out )
+void Crap ( char *Format , uint8_t Delta , uint8_t Pack , FILE *out )
{
fseek ( out , 560 , SEEK_SET );
fprintf ( out , "[ Converted with ]" );
}
/* writing craps in converted MODs */
-void Crap15 ( char *Format , Uchar Delta , Uchar Pack , FILE *out )
+void Crap15 ( char *Format , uint8_t Delta , uint8_t Pack , FILE *out )
{
fseek ( out , 260 , SEEK_SET );
fprintf ( out , "[ Converted with ]" );
* Special version of Test() for cruncher data (Ice! etc...)
* only one file and not hundreds ...
*/
-short testSpecialCruncherData ( long Pack_addy , long Unpack_addy )
+int16_t testSpecialCruncherData ( int32_t Pack_addy , int32_t Unpack_addy )
{
PW_Start_Address = PW_i;
/* a small test preventing hangover :) ... */
/* e.g. addressing of unassigned data */
- if ( ( (long)PW_i + Pack_addy ) > PW_in_size )
+ if ( ( (int32_t)PW_i + Pack_addy ) > PW_in_size )
{
/*printf ( "#0\n" );*/
return BAD;
PW_l *= 4;
PW_l += 10;
OutputSize = PW_l;
+ Header_Size = 6;
break;
default:
OutputSize = PW_l + Header_Size;
Save_Rip ( Packer_Name, Packer_Extension_Define );
if ( Save_Status == GOOD )
-// PW_i += (OutputSize - 2); /* 0 should do but call it "just to be sure" :) */
+/* PW_i += (OutputSize - 2); */ /* 0 should do but call it "just to be sure" :) */
PW_i += (Header_Size + 1); /* test to overcome fake datas */
PW_WholeSampleSize = 0;
/* yet again on Xigh's suggestion. How to handle 'correctly' a file size */
-long PWGetFileSize (char * infile)
+int32_t PWGetFileSize (char * infile)
{
- long i;
- struct stat *Stat;
- Stat = (struct stat *) malloc ( sizeof (struct stat));
- stat ( infile, Stat );
- i = (long)Stat->st_size;
- free ( Stat );
- return i;
+ struct stat sb;
+
+ if (stat ( infile, &sb ) < 0) {
+ /* xigh: TODO: Error */
+ return -1;
+ }
+ return (int32_t) sb.st_size;
}
-#if 0
/* Same as fopen() but saves a lot of tests, done only here. */
/* Done to check if the output file could be created */
-FILE * PW_fopen (char *filename, char fopenargs[3] )
+FILE * PW_fopen (char *filename, char *fopenargs )
{
- FILE *local_out;
- local_out = fopen (filename, fopenargs);
- if (local_out == NULL)
- {
- printf ("!!couldn't create the file \"%s\"!\nexiting...",filename);
- exit (-1);
- }
- return local_out;
+ return moduleripper_fopen (filename, fopenargs);
}
-#endif
-FILE * PW_fopen (char *filename, char *fopenargs)
+
+/* replacement for printf() for WinUAE */
+/* written by Toni Wilen ... thx :) */
+/*void write_log (const char *format, ...)
{
- return moduleripper_fopen (filename, fopenargs);
-}
+char buffer[WRITE_LOG_BUF_SIZE];
+va_list parms;
+va_start (parms, format);
+
+count = _vsnprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms);
+printf(buffer);
+va_end (parms);
+}*/
/* fills a var with all the pitch for PTK */
/* doing a function instead of a lot of includes ...*/
-void fillPTKtable (Uchar poss[37][2])
+void fillPTKtable (uint8_t poss[37][2])
{
poss[0][0]=0x00, poss[0][1]=0x00;
#ifndef htonl
unsigned int htonl(unsigned int v)
{
- return ((v >> 24) & 0x000000ff) | ((v >> 8) & 0x0000ff00) | ((v << 8) & 0x00ff0000) | ((v << 24) & 0xff000000);
+ return ((v >> 24) & 0x000000ff) | ((v >> 8) & 0x0000ff00) | ((v << 8) & 0x00ff0000) | ((v << 24) & 0xff000000);
}
#endif
+
+
+
+int16_t testDietDataPacker ( void )
+{
+ PW_Start_Address = PW_i;
+
+ PW_l = (in_data[PW_Start_Address+9]*256*256) +
+ (in_data[PW_Start_Address+11]*256) +
+ in_data[PW_Start_Address+10] + 5 + 12;
+
+ if ( PW_l > PW_in_size )
+ {
+ /* should be enough :))) */
+ /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
+ return BAD;
+ }
+
+ return GOOD;
+ /* PW_l is the size of the pack */
+}
+
+
+void Rip_DietDataPacker ( void )
+{
+ /* PW_l is still the whole size */
+
+ OutputSize = PW_l;
+
+ CONVERT = BAD;
+
+ if ((in_data[PW_Start_Address+6] == 0x45) &&
+ (in_data[PW_Start_Address+7] == 0x4F) &&
+ (in_data[PW_Start_Address+8] == 0x53))
+ {
+ in_data[PW_Start_Address+6] = 0x64;
+ in_data[PW_Start_Address+7] = 0x6C;
+ in_data[PW_Start_Address+8] = 0x7A;
+ }
+
+ Save_Rip ( "Diet Packer Data-file", Diet );
+
+ if ( Save_Status == GOOD )
+ PW_i += 1;
+}
/* start : if mod can possibly fit from the beginning of the file */
/* e.g. M.K. before 1080th byte */
-short test_1_start ( Ulong LIMIT )
+int16_t test_1_start ( uint32_t LIMIT )
{
return ( PW_i < LIMIT) ? BAD : GOOD;
}
-short test_smps ( long smpsiz, long lstart, long lsiz, Uchar vol, Uchar fine )
+int16_t test_smps ( int32_t smpsiz, int32_t lstart, int32_t lsiz, uint8_t vol, uint8_t fine )
{
if ( lstart > smpsiz )
return BAD;
return BAD;
if ( (lstart + lsiz) > smpsiz+2 )
return BAD;
- if ( (lstart != 0) && ( lsiz <= 2 ) )
+ if ( (lstart != 0) && ( lsiz < 2 ) )
return BAD;
if ( ((lstart != 0) || (lsiz > 2)) && (smpsiz = 0) )
return BAD;
/*
* Pro-Wizard_1.c
*
- * 1997-2007 (c) Sylvain "Asle" Chipaux
+ * 1997-2016 (c) Sylvain "Asle" Chipaux
*
*/
-#include "include/globals.h"
-#include "include/extern.h"
-#include "include/vars.h"
+#include "globals.h"
+#include "extern.h"
+#include "vars.h"
#if 0
int main ( int ac , char **av )
#else
-int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
+int prowizard_search (uint8_t *in_data_p, int PW_in_size_p)
#endif
{
- Support_Types_FileDefault ();
- in_data = in_data_p;
- PW_in_size = PW_in_size_p;
+
#if 0
- printf ( "\n\n-<([ Pro-Wizard v1.62 ])>-\n\n" );
+ printf ( "\n\n-<([ Pro-Wizard v1.70a ])>-\n\n" );
if ( ac != 2 )
{
/* get input file size */
PW_in_size = PWGetFileSize (av[1]);
fseek ( PW_in , 0 , 0 ); /* probably useless */
- printf ( "input file size : %ld\n" , PW_in_size );
+ printf ( "input file size : %d\n" , PW_in_size );
if ( PW_in_size < MINIMAL_FILE_LENGHT )
{
printf ( "! input file size is too small ...\n" );
}
/* alloc mem */
- in_data = (Uchar *) malloc ( PW_in_size );
+ in_data = (uint8_t *) malloc ( PW_in_size );
if ( in_data == NULL )
{
perror ( "Couldn't allocate memory" );
}
fread ( in_data , PW_in_size , 1 , PW_in );
fclose ( PW_in );
+#else
+ Support_Types_FileDefault ();
+ in_data = in_data_p;
+ PW_in_size = PW_in_size_p;
#endif
+
/********************************************************************/
/************************** SEARCH ******************************/
/********************************************************************/
/* do ..). */
/*******************************************************************/
+
if ( in_data[PW_i] <= 0x40 )
{
/* try to get rid of those 00 hanging all the time everywhere :(
*/
if ( in_data[PW_i] == 0x00 )
{
- for ( PW_j = 0 ; PW_j<MINIMAL_FILE_LENGHT ; PW_j++)
- {
- if ( in_data[PW_j+PW_i] != 0x00 )
- break;
- }
- if ( PW_j == MINIMAL_FILE_LENGHT )
- {
- PW_i += (MINIMAL_FILE_LENGHT-2);
- continue;
- }
+ for ( PW_j = 0 ; PW_j<MINIMAL_FILE_LENGHT ; PW_j++)
+ {
+ if ( in_data[PW_j+PW_i] != 0x00 )
+ break;
+ }
+ if ( PW_j == MINIMAL_FILE_LENGHT )
+ {
+ PW_i += (MINIMAL_FILE_LENGHT-2);
+ continue;
+ }
}
+
/* first, let's take care of the formats with 'ID' value <= 0x40 */
/* "!PM!" : ID of Power Music */
if ( (in_data[PW_i] == '!') &&
{
Rip_PM ();
Depack_PM ();
- continue;
}
}
/* Treasure Patterns ?*/
{
Rip_Treasure ();
Depack_Treasure ();
- continue;
}
}
*/
(in_data[PW_i+1] == 0x09) &&
(in_data[PW_i+2] == 0x0A) &&
((in_data[PW_i+3] == 0x08) ||
- (in_data[PW_i+3] == 0x0A)))
+ (in_data[PW_i+3] == 0x0A) ||
+ (in_data[PW_i+3] == 0x0B) ||
+ (in_data[PW_i+3] == 0x0E) ||
+ (in_data[PW_i+3] == 0x0D)))
{
if ( testSpecialCruncherData ( 8, 4 ) != BAD )
{
Rip_SpecialCruncherData ( "StoneCracker 2.92 Data Cruncher" , 12 , STC292data );
- continue;
}
}
/* "1AM" data cruncher */
if ( testSpecialCruncherData( 12, 8 ) != BAD )
{
Rip_SpecialCruncherData ( "Amnesty Design (1AM) Data Cruncher" , 16 , AmnestyDesign1 );
- continue;
}
}
/* "2AM" data cruncher */
if ( testSpecialCruncherData ( 8, 4 ) != BAD )
{
Rip_SpecialCruncherData ( "Amnesty Design (2AM) Data Cruncher" , 12 , AmnestyDesign2 );
- continue;
}
}
#endif
if ( testMOD(in_data[PW_i]-0x30) != BAD )
{
Rip_MOD (in_data[PW_i]-0x30);
- continue;
}
}
/* "[10-32]CH" FastTracker v1/v2 */
if ( testMOD((in_data[PW_i]-0x30)*10+in_data[PW_i+1]-0x30) != BAD )
{
Rip_MOD ((in_data[PW_i]-0x30)*10+in_data[PW_i+1]-0x30);
- continue;
}
}
#ifdef INCLUDEALL
if ( testSpecialCruncherData ( 8, 4 ) != BAD )
{
Rip_SpecialCruncherData ( "=SB= Data Cruncher" , 12 , SB_DataCruncher );
- continue;
+ }
+ }
+
+ /* B9AB data cruncher */
+ if ( (in_data[PW_i] == 0x0B) &&
+ (in_data[PW_i+1] == 0x09) &&
+ (in_data[PW_i+2] == 0x0A) &&
+ (in_data[PW_i+3] == 0x0B) )
+ {
+ if ( testB9AB () != BAD )
+ {
+ Rip_SpecialCruncherData ( "B9AB Data Cruncher" , 274, B9AB );
}
}
if ( testSpecialCruncherData ( 4, 8 ) != BAD )
{
Rip_SpecialCruncherData ( "-CJ- Data Cruncher" , 0 , CJ_DataCruncher );
- continue;
}
}
- /* -GD- Skizzo*/
+ /* -GD- GnoiPacker (Skizzo)*/
if ( (in_data[PW_i] == 0x2D) &&
(in_data[PW_i+1] == 'G') &&
(in_data[PW_i+2] == 'D') &&
{
Rip_Skizzo ();
Depack_Skizzo ();
- continue;
}
}
(in_data[PW_i+14] == 0xD1) &&
(in_data[PW_i+15] == 0xFA) )
{
- if ( testMaxPacker12() == BAD )
- break;
- Rip_MaxPacker12 ();
- continue;
+ if ( testMaxPacker12() != BAD )
+ {
+ Rip_MaxPacker12 ();
+ }
}
#endif
{
Rip_XANN ();
Depack_XANN ();
- continue;
}
}
{
Rip_MP_noID ();
Depack_MP ();
- continue;
}
/* Digital Illusion */
{
Rip_DI ();
Depack_DI ();
- continue;
}
/* SGTPacker */
{
Rip_SGT ();
Depack_SGT ();
- continue;
}
*/
/* eureka packer */
{
Rip_EUREKA ();
Depack_EUREKA ();
- continue;
}
/* The player 5.0a ? */
{
Rip_P50A ();
Depack_P50A ();
- continue;
}
/* The player 6.0a ? */
{
Rip_P60A ();
Depack_P60A ();
- continue;
}
/* The player 6.0a (packed samples)? */
if ( testP60A_pack() != BAD )
{
- printf ( "\b\b\b\b\b\b\b\bThe Player 6.0A with PACKED samples found at %ld ... cant rip it!\n" , PW_Start_Address );
+ printf ( "\b\b\b\b\b\b\b\bThe Player 6.0A with PACKED samples found at %d ... cant rip it!\n" , PW_Start_Address );
/*Rip_P60A ();*/
/*Depack_P60A ();*/
- continue;
}
/* The player 6.1a ? */
{
Rip_P61A ();
Depack_P61A ();
- continue;
}
/* The player 6.1a (packed samples)? */
if ( testP61A_pack() != BAD )
{
- printf ( "\b\b\b\b\b\b\b\bThe Player 6.1A with PACKED samples found at %ld ... cant rip it!\n" , PW_Start_Address );
+ printf ( "\b\b\b\b\b\b\b\bThe Player 6.1A with PACKED samples found at %d ... cant rip it!\n" , PW_Start_Address );
/*Rip_P61A ();*/
/*Depack_P61A ();*/
- continue;
}
/* Propacker 1.0 */
{
Rip_PP10 ();
Depack_PP10 ();
- continue;
}
/* Noise Packer v2 */
{
Rip_Noisepacker2 ();
Depack_Noisepacker2 ();
- continue;
}
/* Noise Packer v1 */
{
Rip_Noisepacker1 ();
Depack_Noisepacker1 ();
- continue;
}
/* Noise Packer v3 */
{
Rip_Noisepacker3 ();
Depack_Noisepacker3 ();
- continue;
}
/* Promizer 0.1 */
{
Rip_PM01 ();
Depack_PM01 ();
- continue;
}
/* ProPacker 2.1 */
{
Rip_PP21 ();
Depack_PP21 ();
- continue;
}
/* ProPacker 3.0 */
{
Rip_PP30 ();
Depack_PP30 ();
- continue;
}
/* StartTrekker pack */
{
Rip_STARPACK ();
Depack_STARPACK ();
- continue;
}
/* Zen packer */
{
Rip_ZEN ();
Depack_ZEN ();
- continue;
}
/* Unic tracker v1 ? */
{
Rip_UNIC_withID ();
Depack_UNIC ();
- continue;
}
/* Unic tracker v1 ? */
{
Rip_UNIC_noID ();
Depack_UNIC ();
- continue;
}
/* Unic trecker v2 ? */
{
Rip_UNIC2 ();
Depack_UNIC2 ();
- continue;
}
/* Game Music Creator ? */
{
Rip_GMC ();
Depack_GMC ();
- continue;
}
/* Heatseeker ? */
{
Rip_HEATSEEKER ();
Depack_HEATSEEKER ();
- continue;
}
/* SoundTracker (15 smp) */
if ( testSoundTracker() != BAD )
{
Rip_SoundTracker ();
- continue;
}
/* The Dark Demon (group name) format */
{
Rip_TheDarkDemon ();
Depack_TheDarkDemon ();
- continue;
}
/* Newtron */
{
Rip_Newtron ();
Depack_Newtron ();
- continue;
}
/* Newtron Old */
{
Rip_NewtronOld ();
Depack_NewtronOld ();
- continue;
}
- /* Titanics Packer ? */
+ /* Titanics Player ? */
if ( testTitanicsPlayer() != BAD )
{
Rip_TitanicsPlayer ();
Depack_TitanicsPlayer ();
- continue;
}
+
+ /* Struggle game ? */
+/* if ( testSTRUGGLE() != BAD )
+ {
+ Rip_STRUGGLE ();
+ Depack_STRUGGLE ();
+ continue;
+ }*/
}
(in_data[PW_i+2] == 'N') &&
(in_data[PW_i+3] == '!') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Imploder data" , 50 , IMP );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Imploder data" , 50 , IMP );
+ }
}
#endif
/* AMOS Music bank "AmBk" */
(in_data[PW_i+2] == 'B') &&
(in_data[PW_i+3] == 'k') )
{
- if ( testAmBk() == BAD )
- break;
- Rip_AmBk();
- Depack_AmBk();
- break;
+ if ( testAmBk() != BAD )
+ {
+ Rip_AmBk();
+ Depack_AmBk();
+ }
+ }
+ /* Sidmon v1 */
+ if ( in_data[PW_i+1] == 0xFA )
+ {
+ if ( testSIDMON1() != BAD )
+ {
+ Rip_SIDMON1();
+ }
}
#ifdef INCLUDEALL
/* Time Cruncher 1.7 */
(in_data[PW_i+20] == 0x20) &&
(in_data[PW_i+21] == 0x20) )
{
- if ( testTimeCruncher17() == BAD )
- break;
- Rip_TimeCruncher17 ();
- break;
+ if ( testTimeCruncher17() != BAD )
+ {
+ Rip_TimeCruncher17 ();
+ }
}
/* IAM Cruncher 1.0 (another case (aka ICE)) */
if ( (in_data[PW_i+1] == 'T') &&
(in_data[PW_i+2] == 'M') &&
(in_data[PW_i+3] == '5') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "IAM Packer 1.0 (ATM5) data" , 12 , ICE );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "IAM Packer 1.0 (ATM5) data" , 12 , ICE );
+ }
}
/* ATOM - Atomik Packer (Atari ST) */
if ( (in_data[PW_i+1] == 'T') &&
(in_data[PW_i+2] == 'O') &&
(in_data[PW_i+3] == 'M') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Atomik Packer (ATOM) data" , 12 , AtomikPackerData );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Atomik Packer (ATOM) data" , 12 , AtomikPackerData );
+ }
}
/* ATM3 - Atomik Packer (Atari ST) */
if ( (in_data[PW_i+1] == 'T') &&
(in_data[PW_i+2] == 'M') &&
(in_data[PW_i+3] == '3') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Atomik Packer (ATOM) data" , 12 , AtomikPackerData );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Atomik Packer (ATM3) data" , 12 , AtomikPackerData );
+ }
}
/* "AU5!" - Automation Packer 5.* (Atari ST) */
if ( (in_data[PW_i+1] == 'U') &&
(in_data[PW_i+2] == '5') &&
(in_data[PW_i+3] == '!') )
{
- if ( testSpecialCruncherData ( 4, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Automation Packer v5.01 (data)" , 0 , AutomationPackerData );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Automation Packer v5.01 (data)" , 0 , AutomationPackerData );
+ }
}
/* Syncro Packer 4.6 */
if ( (in_data[PW_i+1] == 0xFA ) &&
if ( testSyncroPacker() != BAD )
{
Rip_SyncroPacker ();
- break;
}
- break;
}
/* Tetrapack 1.02 */
if ( (in_data[PW_i+1] == 0xFA ) &&
(in_data[PW_i+18] == 0xD5 ) &&
(in_data[PW_i+19] == 0xC9 ) )
{
- if ( testTetrapack102() == BAD )
- break;
- Rip_Tetrapack102 ();
+ if ( testTetrapack102() != BAD )
+ {
+ Rip_Tetrapack102 ();
+ }
+ }
+ /* Tetrapack 1.01 */
+ if ( (in_data[PW_i+1] == 0xFA ) &&
+ (in_data[PW_i+2] == 0x00 ) &&
+ (in_data[PW_i+3] == 0xDE ) &&
+ (in_data[PW_i+4] == 0xD1 ) &&
+ (in_data[PW_i+5] == 0xFC ) &&
+ (in_data[PW_i+10] == 0x22 ) &&
+ (in_data[PW_i+11] == 0x7C ) &&
+ (in_data[PW_i+16] == 0x24 ) &&
+ (in_data[PW_i+17] == 0x60 ) &&
+ (in_data[PW_i+18] == 0xD5 ) &&
+ (in_data[PW_i+19] == 0xC9 ) )
+ {
+ if ( testTetrapack101() != BAD )
+ {
+ Rip_Tetrapack101 ();
+ }
}
/* "ArcD" data cruncher */
if ( (in_data[PW_i+1] == 'r') &&
(in_data[PW_i+2] == 'c') &&
(in_data[PW_i+3] == 'D'))
{
- if ( testArcDDataCruncher() == BAD )
- break;
- Rip_SpecialCruncherData ( "ArcD data Cruncher" , 0 , arcD );
- break;
+ if ( testArcDDataCruncher() != BAD )
+ {
+ Rip_SpecialCruncherData ( "ArcD data Cruncher" , 0 , arcD );
+ }
}
/* HQC Cruncher 2.0 */
if ( (in_data[PW_i+1] == 0xFA ) &&
if ( testHQCCruncher2() != BAD )
{
Rip_HQCCruncher2 ();
- break;
}
- break;
}
/* ByteKillerPro 1.0 */
if ( (in_data[PW_i+1] == 0xFA) &&
(in_data[PW_i+20] == 0x22) &&
(in_data[PW_i+21] == 0x28) )
{
- if ( testbytekillerpro10() == BAD )
- break;
- Rip_bytekillerpro10 ();
- break;
+ if ( testbytekillerpro10() != BAD )
+ {
+ Rip_bytekillerpro10 ();
+ }
+ }
+ /* Bytekiller Clone FLT */
+ if ( (in_data[PW_i+1] == 0xFA) &&
+ (in_data[PW_i+2] == 0x01) &&
+ (in_data[PW_i+3] == 0x32) &&
+ (in_data[PW_i+4] == 0xD1) &&
+ (in_data[PW_i+5] == 0xFA) &&
+ (in_data[PW_i+6] == 0x01) &&
+ (in_data[PW_i+7] == 0x2A) &&
+ (in_data[PW_i+8] == 0x22) &&
+ (in_data[PW_i+9] == 0x7c) )
+ {
+ if ( testBKCloneFLT() != BAD )
+ {
+ Rip_BKCloneFLT ();
+ }
+ }
+ /* unknown Bytekiller Clone 5 */
+ if ( (in_data[PW_i+1] == 0xFA) &&
+ (in_data[PW_i+2] == 0x01) &&
+ (in_data[PW_i+3] == 0x16) &&
+ (in_data[PW_i+4] == 0xD1) &&
+ (in_data[PW_i+5] == 0xFC) &&
+ (in_data[PW_i+10] == 0x43) &&
+ (in_data[PW_i+11] == 0xF9) &&
+ (in_data[PW_i+16] == 0x24) &&
+ (in_data[PW_i+17] == 0x60) )
+ {
+ if ( testBKClone5() != BAD )
+ {
+ Rip_BKClone5 ();
+ }
}
/* Ace? (data cruncher) */
if ( (in_data[PW_i+1] == 'c') &&
(in_data[PW_i+2] == 'e') &&
(in_data[PW_i+3] == '?') )
{
- if ( testSpecialCruncherData ( 4, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "(Ace?) Data Cruncher" , 0 , ACECruncherData );
- break;
+ if ( testSpecialCruncherData ( 4, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "(Ace?) Data Cruncher" , 0 , ACECruncherData );
+ }
}
#endif
+ /* Delta Music 1 */
+ if ( (in_data[PW_i+1] == 'L') &&
+ (in_data[PW_i+2] == 'L') &&
+ (in_data[PW_i+3] == ' ') )
+ {
+ if ( testDM1() != BAD )
+ {
+ Rip_DM1();
+ }
+ }
+
+
break;
case 'B': /* BTB6 */
if ( testByteKiller_13() != BAD )
{
Rip_ByteKiller ();
- break;
}
- testByteKiller_20 ();
if ( testByteKiller_20() != BAD )
{
Rip_ByteKiller ();
- break;
}
- break;
+ }
+
+ /* BHC2 (data cruncher) */
+ if ( (in_data[PW_i+1] == 'H') &&
+ (in_data[PW_i+2] == 'C') &&
+ (in_data[PW_i+3] == '2') )
+ {
+ if ( testSpecialCruncherData ( 6, 10 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "(BHC2) Data Cruncher" , 0x3C , BHC2CruncherData );
+ }
+ }
+ /* BHC3 (data cruncher) */
+ if ( (in_data[PW_i+1] == 'H') &&
+ (in_data[PW_i+2] == 'C') &&
+ (in_data[PW_i+3] == '3') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "(BHC3) Data Cruncher" , 0xC8 , BHC3CruncherData );
+ }
}
#endif
/* "BeEp" Jam Cracker */
(in_data[PW_i+2] == 'E') &&
(in_data[PW_i+3] == 'p') )
{
- if ( testJamCracker() == BAD )
- break;
- Rip_JamCracker ();
- break;
+ if ( testJamCracker() != BAD )
+ {
+ Rip_JamCracker ();
+ }
+ }
+
+ /* "BNR!" Binary Packer */
+ if ( (in_data[PW_i+1] == 'N') &&
+ (in_data[PW_i+2] == 'R') &&
+ (in_data[PW_i+3] == '!') )
+ {
+ if ( testBNR() != BAD )
+ {
+ Rip_BNR();
+ Depack_BNR();
+ }
}
break;
(in_data[PW_i+6] == 'P') &&
(in_data[PW_i+7] == '3') )
{
- if ( testTP3() == BAD )
- break;
- Rip_TP3 ();
- Depack_TP3 ();
- break;
+ if ( testTP3() != BAD )
+ {
+ Rip_TP3 ();
+ Depack_TP3 ();
+ }
}
#ifdef INCLUDEALL
/* CrM2 | Crm2 | CrM! */
(in_data[PW_i+2] == 'M') &&
(in_data[PW_i+3] == '!')) )
{
- if ( testSpecialCruncherData ( 10, 6 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Crunchmania / Normal data" , 14 , CRM1 );
- break;
+ if ( testSpecialCruncherData ( 10, 6 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Crunchmania / Normal data" , 14 , CRM1 );
+ }
}
/* "CHFI" another imploder case */
if ( (in_data[PW_i+1] == 'H') &&
(in_data[PW_i+2] == 'F') &&
(in_data[PW_i+3] == 'I') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Imploder data" , 50 , IMP );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Imploder data" , 50 , IMP );
+ }
}
/* "CRND" data cruncher */
if ( (in_data[PW_i+1] == 'R') &&
(in_data[PW_i+2] == 'N') &&
(in_data[PW_i+3] == 'D') )
{
- if ( testCRND() == BAD )
- break;
- Rip_SpecialCruncherData ( "CRND data cruncher" , 20 , CRND );
- break;
+ if ( testCRND() != BAD )
+ {
+ Rip_SpecialCruncherData ( "CRND data cruncher" , 20 , CRND );
+ }
}
/* Defjam Cruncher 3.2 */
if ( (in_data[PW_i+1] == 0xFA) &&
((in_data[PW_i+5] == 0xF9) || (in_data[PW_i+5] == 0xCD))&&
((in_data[PW_i+6] == 0x00) || (in_data[PW_i+6] == 0x4E)))
{
- if ( testDefjam32() == BAD )
- break;
- Rip_Defjam32 ();
- break;
+ if ( testDefjam32() != BAD )
+ {
+ Rip_Defjam32 ();
+ }
}
#endif
break;
(in_data[PW_i+2] == 'G') &&
(in_data[PW_i+3] == 'I') )
{
- if ( testDigiBooster17() == BAD )
- break;
- Rip_DigiBooster17 ();
- break;
+ if ( testDigiBooster17() != BAD )
+ {
+ Rip_DigiBooster17 ();
+ }
}
break;
(in_data[PW_i+2] == 'O') &&
(in_data[PW_i+3] == 'D') )
{
- if ( testQuadraComposer() == BAD )
- break;
- Rip_QuadraComposer ();
- Depack_QuadraComposer ();
- break;
+ if ( testQuadraComposer() != BAD )
+ {
+ Rip_QuadraComposer ();
+ /*Depack_QuadraComposer ();*/
+ }
}
/* "Extended Module" : ID of FastTracker 2 XM */
if ( (in_data[PW_i+1] == 'x') &&
(in_data[PW_i+9] == 'M') &&
(in_data[PW_i+10]== 'o') )
{
- if ( testXM() == BAD )
- break;
- Rip_XM ();
- break;
+ if ( testXM() != BAD )
+ {
+ Rip_XM ();
+ }
}
break;
(in_data[PW_i+2] == '-') &&
(in_data[PW_i+3] == 'M') )
{
- if ( testFC_M() == BAD )
- break;
- Rip_FC_M ();
- Depack_FC_M ();
- break;
+ if ( testFC_M() != BAD )
+ {
+ Rip_FC_M ();
+ Depack_FC_M ();
+ }
}
/* "FLT4" : ID of StarTrekker */
if ( (in_data[PW_i+1] == 'L') &&
(in_data[PW_i+2] == 'T') &&
(in_data[PW_i+3] == '4') )
{
- if ( testMOD(4) == BAD )
- break;
- Rip_MOD (4);
- break;
+ if ( testMOD(4) != BAD )
+ {
+ Rip_MOD (4);
+ }
}
/* "FC14" : Future Composer 1.4 */
if ( (in_data[PW_i+1] == 'C') &&
(in_data[PW_i+2] == '1') &&
(in_data[PW_i+3] == '4') )
{
- if ( testFC14() == BAD )
- break;
- Rip_FC14 ();
- break;
+ if ( testFC14() != BAD )
+ {
+ Rip_FC14 ();
+ }
+ }
+ /* "FORM" : EA-IFF */
+ if ( (in_data[PW_i+1] == 'O') &&
+ (in_data[PW_i+2] == 'R') &&
+ (in_data[PW_i+3] == 'M') )
+ {
+ if ( testIFF() != BAD )
+ {
+ Rip_IFF ();
+ }
}
/* "FUCO" : ID of BSI Future Composer */
if ( (in_data[PW_i+1] == 'U') &&
(in_data[PW_i+2] == 'C') &&
(in_data[PW_i+3] == 'O') )
{
- if ( testBSIFutureComposer() == BAD )
- break;
- Rip_BSIFutureComposer ();
- break;
+ if ( testBSIFutureComposer() != BAD )
+ {
+ Rip_BSIFutureComposer ();
+ }
}
/* "Fuck" : ID of Noise From Heaven chiptunes */
if ( (in_data[PW_i+1] == 'u') &&
(in_data[PW_i+2] == 'c') &&
(in_data[PW_i+3] == 'k') )
{
- if ( testNFH() == BAD )
- break;
- Rip_NFH ();
- Depack_NFH ();
- break;
+ if ( testNFH() != BAD )
+ {
+ Rip_NFH ();
+ Depack_NFH ();
+ }
}
/* "FAST" : ID of Stone Arts Player */
if ( (in_data[PW_i+1] == 'A') &&
(in_data[PW_i+2] == 'S') &&
(in_data[PW_i+3] == 'T') )
{
- if ( testStoneArtsPlayer() == BAD )
- break;
- Rip_StoneArtsPlayer ();
- Depack_StoneArtsPlayer ();
- break;
+ if ( testStoneArtsPlayer() != BAD )
+ {
+ Rip_StoneArtsPlayer ();
+ Depack_StoneArtsPlayer ();
+ }
}
#ifdef INCLUDEALL
/* FIRE (RNC clone) Cruncher */
(in_data[PW_i+2] == 'R') &&
(in_data[PW_i+3] == 'E') )
{
- if ( testSpecialCruncherData ( 4, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "FIRE (RNC Clone) data Cruncher" , 0 , FIRE );
- break;
+ if ( testSpecialCruncherData ( 4, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "FIRE (RNC Clone) data Cruncher" , 0 , FIRE );
+ }
}
#endif
break;
if ( testMegaCruncher10() != BAD )
{
Rip_MegaCruncher ();
- break;
}
- break;
}
/* Mega Cruncher 1.2 */
(in_data[PW_i+14] == 0xD1 ) &&
(in_data[PW_i+15] == 0xC1 ) )
{
- if ( testMegaCruncher12() == BAD )
- break;
- Rip_MegaCruncher ();
- break;
+ if ( testMegaCruncher12() != BAD )
+ {
+ Rip_MegaCruncher ();
+ }
}
/* Double Action v1.0 */
(in_data[PW_i+142]== 0x23 ) &&
(in_data[PW_i+143]== 0x20 ) )
{
- if ( testDoubleAction10() == BAD )
- break;
- Rip_DoubleAction10 ();
- break;
+ if ( testDoubleAction10() != BAD )
+ {
+ Rip_DoubleAction10 ();
+ }
}
#endif
/* GPMO (crunch player ?)*/
(in_data[PW_i+2] == 'M') &&
(in_data[PW_i+3] == 'O') )
{
- if ( testGPMO() == BAD )
- break;
- Rip_GPMO ();
- Depack_GPMO ();
- break;
+ if ( testGPMO() != BAD )
+ {
+ Rip_GPMO ();
+ Depack_GPMO ();
+ }
}
/* Gnu player */
(in_data[PW_i+2] == 'P') &&
(in_data[PW_i+3] == 'l') )
{
- if ( testGnuPlayer() == BAD )
- break;
- Rip_GnuPlayer ();
- Depack_GnuPlayer ();
- break;
+ if ( testGnuPlayer() != BAD )
+ {
+ Rip_GnuPlayer ();
+ Depack_GnuPlayer ();
+ }
}
break;
(in_data[PW_i+2] == 'T') &&
(in_data[PW_i+3] == '!') )
{
- if ( testHRT() == BAD )
- break;
- Rip_HRT ();
- Depack_HRT ();
- break;
+ if ( testHRT() != BAD )
+ {
+ Rip_HRT ();
+ Depack_HRT ();
+ }
}
#ifdef INCLUDEALL
(in_data[PW_i+14] == 0xD3) &&
(in_data[PW_i+15] == 0xC9) )
{
- if ( testMasterCruncher30addr() == BAD )
- break;
- Rip_MasterCruncher30addr ();
- break;
+ if ( testMasterCruncher30addr() != BAD )
+ {
+ Rip_MasterCruncher30addr ();
+ }
}
/* Powerpacker 4.0 library */
(in_data[PW_i+14] == 0x2C) &&
(in_data[PW_i+15] == 0x78) )
{
- if ( testPowerpacker4lib() == BAD )
- break;
- Rip_Powerpacker4lib ();
- break;
+ if ( testPowerpacker4lib() != BAD )
+ {
+ Rip_Powerpacker4lib ();
+ }
}
/* StoneCracker 2.70 */
if ( (in_data[PW_i+1] == 0xE7) &&
(in_data[PW_i+14] == 0x7A) &&
(in_data[PW_i+15] == 0x00) )
{
- if ( testStoneCracker270() == BAD )
- break;
- Rip_StoneCracker270 ();
- break;
+ if ( testStoneCracker270() != BAD )
+ {
+ Rip_StoneCracker270 ();
+ }
}
/* ByteKiller 3.0 */
(in_data[PW_i+14] == 0x4D) &&
(in_data[PW_i+15] == 0xF9) )
{
- if ( testByteKiller30() == BAD )
- break;
- Rip_ByteKiller30 ();
- break;
+ if ( testByteKiller30() != BAD )
+ {
+ Rip_ByteKiller30 ();
+ }
}
/* Powerpacker 2.3 */
(in_data[PW_i+14] == 0x4A) &&
(in_data[PW_i+15] == 0x98) )
{
- if ( testPowerpacker23() == BAD )
- break;
- Rip_Powerpacker23 ();
- break;
+ if ( testPowerpacker23() != BAD )
+ {
+ Rip_Powerpacker23 ();
+ }
}
/* Powerpacker 3.0 */
(in_data[PW_i+14] == 0xD1) &&
(in_data[PW_i+15] == 0xC8) )
{
- if ( testPowerpacker30() == BAD )
- break;
- Rip_Powerpacker30 ();
- break;
+ if ( testPowerpacker30() != BAD )
+ {
+ Rip_Powerpacker30 ();
+ }
}
/* Powerpacker 4.0 */
(in_data[PW_i+14] == 0xD1) &&
(in_data[PW_i+15] == 0xC8) )
{
- if ( testPowerpacker40() == BAD )
- break;
- Rip_Powerpacker40 ();
- break;
+ if ( testPowerpacker40() != BAD )
+ {
+ Rip_Powerpacker40 ();
+ }
}
/* Super Cruncher 2.7 */
(in_data[PW_i+14] == 0x41) &&
(in_data[PW_i+15] == 0xFA) )
{
- if ( testSuperCruncher27() == BAD )
- break;
- Rip_SuperCruncher27 ();
- break;
+ if ( testSuperCruncher27() != BAD )
+ {
+ Rip_SuperCruncher27 ();
+ }
}
/* Crunchmania Address */
(in_data[PW_i+30] == 0xB7) &&
(in_data[PW_i+31] == 0xCA) )
{
- if ( testcrunchmaniaAddr() == BAD )
- break;
- Rip_CrunchmaniaAddr ();
- continue;
+ if ( testcrunchmaniaAddr(1) != BAD )
+ {
+ Rip_CrunchmaniaAddr ();
+ }
}
/* Crunchmania Address (another)*/
(in_data[PW_i+30] == 0x43) &&
(in_data[PW_i+31] == 0xF9) )
{
- if ( testcrunchmaniaAddr() == BAD )
- break;
- Rip_CrunchmaniaAddr ();
- continue;
+ if ( testcrunchmaniaAddr(1) != BAD )
+ {
+ Rip_CrunchmaniaAddr ();
+ }
+ }
+
+ /* Crunchmania Address (another again)*/
+ if ((in_data[PW_i+1] == 0xe7) &&
+ (in_data[PW_i+14] == 0x1a) &&
+ (in_data[PW_i+15] == 0xbc) &&
+ (in_data[PW_i+16] == 0x00) &&
+ (in_data[PW_i+17] == 0xb9) &&
+ (in_data[PW_i+18] == 0x1a) &&
+ (in_data[PW_i+19] == 0xbc) &&
+ (in_data[PW_i+24] == 0x00) &&
+ (in_data[PW_i+25] == 0xe9) &&
+ (in_data[PW_i+26] == 0x1a) &&
+ (in_data[PW_i+27] == 0xbc) &&
+ (in_data[PW_i+28] == 0x00) &&
+ (in_data[PW_i+29] == 0xf1) &&
+ (in_data[PW_i+30] == 0x45) &&
+ (in_data[PW_i+31] == 0xfa) )
+ {
+ if ( testcrunchmaniaAddr(2) != BAD )
+ {
+ Rip_CrunchmaniaAddr ();
+ }
}
/* Crunchmania Simple */
(in_data[PW_i+13] == 0x4A) &&
(in_data[PW_i+14] == 0x28) &&
(in_data[PW_i+15] == 0x7A) )
- {
- if ( testcrunchmaniaSimple() == BAD )
- break;
- Rip_CrunchmaniaSimple();
- continue;
+ {
+ if ( testcrunchmaniaSimple() != BAD )
+ {
+ Rip_CrunchmaniaSimple();
+ }
}
/* RelokIt 1.0 */
(in_data[PW_i+14] == 0x23) &&
(in_data[PW_i+15] == 0xC0) )
{
- if ( testRelokIt10() == BAD )
- break;
- Rip_RelokIt10 ();
- break;
+ if ( testRelokIt10() != BAD )
+ {
+ Rip_RelokIt10 ();
+ }
}
/* Mega Cruncher Obj */
(in_data[PW_i+10] == 0x01) &&
(in_data[PW_i+11] == 0xC0) )
{
- if ( testMegaCruncherObj() == BAD )
- break;
- Rip_MegaCruncherObj ();
- break;
+ if ( testMegaCruncherObj() != BAD )
+ {
+ Rip_MegaCruncherObj ();
+ }
}
/* Turbo Squeezer 6.1 */
(in_data[PW_i+10] == 0x20) &&
(in_data[PW_i+11] == 0x7A) )
{
- if ( testTurboSqueezer61() == BAD )
- break;
- Rip_TurboSqueezer61 ();
- break;
+ if ( testTurboSqueezer61() != BAD )
+ {
+ Rip_TurboSqueezer61 ();
+ }
}
/* DragPack 2.52 */
(in_data[PW_i+14] == 0x00) &&
(in_data[PW_i+15] == 0x00) )
{
- if ( testDragpack252() == BAD )
- break;
- Rip_Dragpack252 ();
- break;
+ if ( testDragpack252() != BAD )
+ {
+ Rip_Dragpack252 ();
+ }
}
/* DragPack 1.00 */
if ( (in_data[PW_i+1] == 0xE7) &&
(in_data[PW_i+14] == 0x00) &&
(in_data[PW_i+15] == 0x00) )
{
- if ( testDragpack100() == BAD )
- break;
- Rip_Dragpack100 ();
- break;
+ if ( testDragpack100() != BAD )
+ {
+ Rip_Dragpack100 ();
+ }
}
/* GNU Packer 1.2 */
if ( (in_data[PW_i+1] == 0xE7) &&
(in_data[PW_i+14] == 0x00) &&
(in_data[PW_i+15] == 0x0C) )
{
- if ( testGNUPacker12() == BAD )
- break;
- Rip_GNUPacker12 ();
- break;
+ if ( testGNUPacker12() != BAD )
+ {
+ Rip_GNUPacker12 ();
+ }
}
#endif
+ /* "HVL" - Hively tracker */
+ if ( ( in_data[PW_i+1] == 'V' ) &&
+ ( in_data[PW_i+2] == 'L' ) &&
+ (( in_data[PW_i+3] == 0x00 )||( in_data[PW_i+3] == 0x01 )) )
+ {
+ if ( testTHX() != BAD )
+ {
+ Rip_THX ();
+ }
+ }
break;
case 'I': /* 0x48 */
(in_data[PW_i+2] == 'E') &&
(in_data[PW_i+3] == '!') )
{
- if ( testSpecialCruncherData ( 4, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "IAM Packer 1.0 (ICE!) data" , 0 , ICE );
- break;
+ if ( testSpecialCruncherData ( 4, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "IAM Packer 1.0 (ICE!) data" , 0 , ICE );
+ }
}
/* "Ice!" : ID of Ice! Cruncher */
if ( (in_data[PW_i+1] == 'c') &&
(in_data[PW_i+2] == 'e') &&
(in_data[PW_i+3] == '!') )
{
- if ( testSpecialCruncherData ( 4, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Ice! Cruncher (data)" , 0 , ICE );
- break;
+ if ( testSpecialCruncherData ( 4, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Ice! Cruncher (data)" , 0 , ICE );
+ }
}
/* "IMP!" */
if ( (in_data[PW_i+1] == 'M') &&
(in_data[PW_i+2] == 'P') &&
(in_data[PW_i+3] == '!') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Imploder data" , 50 , IMP );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Imploder data" , 50 , IMP );
+ }
+ }
+ /* "IMPM" : ID of Impulse Tracker */
+ if ( (in_data[PW_i+1] == 'M') &&
+ (in_data[PW_i+2] == 'P') &&
+ (in_data[PW_i+3] == 'M') )
+ {
+ if ( testIT() != BAD )
+ {
+ Rip_IT ();
+ }
}
#endif
if ( (in_data[PW_i+1] == 'T') &&
(in_data[PW_i+3] == '0') )
{
/* Ice Tracker 1.0 */
- if ( testSTK26() == BAD )
- break;
- Rip_STK26 ();
- Depack_STK26 ();
- break;
+ if ( testSTK26() != BAD )
+ {
+ Rip_STK26 ();
+ Depack_STK26 ();
+ }
}
break;
(in_data[PW_i+2] == 'I') &&
(in_data[PW_i+3] == 'S') )
{
- if ( testKRIS() == BAD )
- break;
- Rip_KRIS ();
- Depack_KRIS ();
- break;
+ if ( testKRIS() != BAD )
+ {
+ Rip_KRIS ();
+ Depack_KRIS ();
+ }
}
#ifdef INCLUDEALL
/* Try-It Cruncher 1.01 */
(in_data[PW_i+14] == 0x20) &&
(in_data[PW_i+15] == 0x4A) )
{
- if ( testTryIt101() == BAD )
- break;
- Rip_TryIt101 ();
- break;
+ if ( testTryIt101() != BAD )
+ {
+ Rip_TryIt101 ();
+ }
+ }
+#endif
+ break;
+
+ case 'L': /* 0x4C */
+#ifdef INCLUDEALL
+ /* "LSD!" : ID of Automation 2.3r packer (Atari ST) */
+ if ( (in_data[PW_i+1] == 'S') &&
+ (in_data[PW_i+2] == 'D') &&
+ (in_data[PW_i+3] == '!') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Automation 2.3r Data Cruncher" , 4 , LSDDataCruncher );
+ }
+ }
+
+ /* "LZH!" : ID of Jam Packer (LZH! compression) (Atari ST) */
+ if ( (in_data[PW_i+1] == 'Z') &&
+ (in_data[PW_i+2] == 'H') &&
+ (in_data[PW_i+3] == '!') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Jam Packer Data Cruncher" , 12 , JamDataCruncher );
+ }
}
#endif
break;
case 'M': /* 0x4D */
+ /* MASM data cruncher */
+ if ( (in_data[PW_i+1] == 'A') &&
+ (in_data[PW_i+2] == 'S') &&
+ (in_data[PW_i+3] == 'M') )
+ {
+ if ( testSpecialCruncherData ( 4, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "MASM Data Cruncher" , 0 , MASMDataCruncher );
+ }
+ }
+
if ( (in_data[PW_i+1] == '.') &&
(in_data[PW_i+2] == 'K') &&
(in_data[PW_i+3] == '.') )
if ( testMOD(4) != BAD )
{
Rip_MOD(4);
- break;
}
/* Unic tracker v1 ? */
{
Rip_UNIC_withID ();
Depack_UNIC ();
- break;
}
/* Noiserunner ? */
{
Rip_Noiserunner ();
Depack_Noiserunner ();
- break;
+ }
+
+ /* Mosh packer ? */
+ if ( testMOSH() != BAD )
+ {
+ Rip_MOSH ();
+ Depack_MOSH ();
+ }
+ /* HCD-protector ? */
+ if ( testHCD() != BAD )
+ {
+ Rip_HCD ();
+ Depack_HCD ();
}
}
{
Rip_Fuzzac ();
Depack_Fuzzac ();
- break;
}
}
{
Rip_TP2 ();
Depack_TP2 ();
- break;
}
/* tracker packer v1 */
if ( testTP1() != BAD )
{
Rip_TP1 ();
Depack_TP1 ();
- break;
}
}
{
Rip_KSM ();
Depack_KSM ();
- break;
}
}
- /*if ( (in_data[PW_i+1] == 'O') &&
+ if ( (in_data[PW_i+1] == 'O') &&
(in_data[PW_i+2] == 'D') &&
(in_data[PW_i+3] == 'U') )
- {*/
+ {
/* NovoTrade */
- /*if ( testNovoTrade() != BAD )
+ if ( testNovoTrade() != BAD )
{
Rip_NovoTrade ();
Depack_NovoTrade ();
- break;
+ continue;
}
- }*/
+ }
if ( (in_data[PW_i+1] == 'T') &&
(in_data[PW_i+2] == 'N') &&
{
Rip_STK26 ();
Depack_STK26 ();
- break;
}
}
if ( (in_data[PW_i+1] == 'M') &&
(in_data[PW_i+2] == 'D') &&
((in_data[PW_i+3] == '0') ||
- (in_data[PW_i+3] == '1') ||
+ (in_data[PW_i+3] == '1')) )/* ||
(in_data[PW_i+3] == '2') ||
- (in_data[PW_i+3] == '3')) )
+ (in_data[PW_i+3] == '3')) )*/
{
/* MED (MMD0) */
- if ( testMMD0() == BAD )
- break;
- Rip_MMD0 ();
+ if ( testMMD0() != BAD )
+ {
+ Rip_MMD0 ();
+ }
}
#ifdef INCLUDEALL
if ( testDefjam32pro() != BAD )
{
Rip_Defjam32 ();
- break;
}
}
if ( testSTC299d() != BAD )
{
Rip_STC299d ();
- break;
}
}
if ( testSTC299b() != BAD )
{
Rip_STC299b ();
- break;
}
}
if ( testSTC299() != BAD )
{
Rip_STC299 ();
- break;
}
}
if ( testSTC300() != BAD )
{
Rip_STC300 ();
- break;
}
}
if ( testSTC310() != BAD )
{
Rip_STC310 ();
- break;
+ }
+ }
+
+ /* Mental Image Packer (data) */
+ if ( (in_data[PW_i+1] == 'I') &&
+ (in_data[PW_i+2] == '1') &&
+ (in_data[PW_i+3] == '0') )
+ {
+ if ( testSpecialCruncherData ( 12, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Mental Image Packer" , 18 , MentalImage );
}
}
#endif
break;
+ case 'N': /* Sonic Arranger (no hunk) */
+ if ( (in_data[PW_i+1] == 0xFA) &&
+ (in_data[PW_i+2] == 0x00) &&
+ (in_data[PW_i+4] == 'N') &&
+ (in_data[PW_i+5] == 0xFA) &&
+ (in_data[PW_i+8] == 'N') &&
+ (in_data[PW_i+9] == 0xFA) &&
+ (in_data[PW_i+12] == 'N') &&
+ (in_data[PW_i+13] == 0xFA) &&
+ (in_data[PW_i+16] == 'N') &&
+ (in_data[PW_i+17] == 0xFA) &&
+ (in_data[PW_i+20] == 'N') &&
+ (in_data[PW_i+21] == 0xFA) &&
+ (in_data[PW_i+24] == 'N') &&
+ (in_data[PW_i+25] == 0xFA))
+ {
+ if ( testSA() != BAD )
+ {
+ Rip_SA ();
+ }
+ }
+ break;
+
+ case 'O': /* 0x4F */
+ /* "OKTASONG" : ID of Oktalizer */
+ if ( (in_data[PW_i+1] == 'K') &&
+ (in_data[PW_i+2] == 'T') &&
+ (in_data[PW_i+3] == 'A') &&
+ (in_data[PW_i+4] == 'S') &&
+ (in_data[PW_i+5] == 'O') &&
+ (in_data[PW_i+6] == 'N') &&
+ (in_data[PW_i+7] == 'G') &&
+ (in_data[PW_i+8] == 'C') &&
+ (in_data[PW_i+9] == 'M') &&
+ (in_data[PW_i+10] == 'O') &&
+ (in_data[PW_i+11] == 'D') )
+ {
+ if ( testOkta() != BAD )
+ {
+ Rip_Okta ();
+ }
+ }
+ break;
+
case 'P': /* 0x50 */
#ifdef INCLUDEALL
/* "PP20" : ID of PowerPacker */
(in_data[PW_i+2] == '2') &&
(in_data[PW_i+3] == '0') )
{
- printf ( "PowerPacker ID (PP20) found at %ld ... cant rip it!\n" , PW_i );
- break;
+ printf ( "PowerPacker ID (PP20) found at %u ... cant rip it!\n" , PW_i );
}
#endif
/* "P30A" : ID of The Player */
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == 'A') )
{
- if ( testP40A() == BAD ) /* yep same tests apply */
- break;
- Rip_P30A ();
- Depack_P30 ();
+ if ( testP40A() != BAD ) /* yep same tests apply */
+ {
+ Rip_P30A ();
+ Depack_P30 ();
+ }
}
-
/* "P22A" : ID of The Player */
if ( (in_data[PW_i+1] == '2') &&
(in_data[PW_i+2] == '2') &&
(in_data[PW_i+3] == 'A') )
{
- if ( testP40A() == BAD ) /* yep, same tests apply */
- break;
- Rip_P22A ();
- Depack_P22 ();
+ if ( testP40A() != BAD ) /* yep, same tests apply */
+ {
+ Rip_P22A ();
+ Depack_P22 ();
+ }
}
/* "P40A" : ID of The Player */
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == 'A') )
{
- if ( testP40A() == BAD )
- break;
- Rip_P40A ();
- Depack_P40 ();
+ if ( testP40A() != BAD )
+ {
+ Rip_P40A ();
+ Depack_P40 ();
+ }
}
/* "P40B" : ID of The Player */
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == 'B') )
{
- if ( testP40A() == BAD )
- break;
- Rip_P40B ();
- Depack_P40 ();
+ if ( testP40A() != BAD )
+ {
+ Rip_P40B ();
+ Depack_P40 ();
+ }
}
/* "P41A" : ID of The Player */
(in_data[PW_i+2] == '1') &&
(in_data[PW_i+3] == 'A') )
{
- if ( testP41A() == BAD )
- break;
- Rip_P41A ();
- Depack_P41A ();
- break;
+ if ( testP41A() != BAD )
+ {
+ Rip_P41A ();
+ Depack_P41A ();
+ }
+ }
+
+ /* "PMd3/PMD3 : ID of ?!? TSCC format - 8CHN */
+ if ( (in_data[PW_i+1] == 'M') &&
+ ((in_data[PW_i+2] == 'd') || (in_data[PW_i+2] == 'D')) &&
+ (in_data[PW_i+3] == '3') )
+ {
+ if ( testPMD3() != BAD ) /* yep, same tests apply */
+ {
+ Rip_PMD3 ();
+ Depack_PMD3 ();
+ }
}
/* "PM40" : ID of Promizer 4 */
(in_data[PW_i+2] == '4') &&
(in_data[PW_i+3] == '0') )
{
- if ( testPM40() == BAD )
- break;
- Rip_PM40 ();
- Depack_PM40 ();
- break;
+ if ( testPM40() != BAD )
+ {
+ Rip_PM40 ();
+ Depack_PM40 ();
+ }
}
#ifdef INCLUDEALL
(in_data[PW_i+2] == 'b') &&
(in_data[PW_i+3] == 'k') )
{
- if ( testPPbk() == BAD )
- break;
- Rip_PPbk ();
- break;
+ if ( testPPbk() != BAD )
+ {
+ Rip_PPbk ();
+ }
}
/* PARA data Cruncher */
(in_data[PW_i+2] == 'R') &&
(in_data[PW_i+3] == 'A') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "PARA Data Cruncher" , 46 , PARA );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "PARA Data Cruncher" , 46 , PARA );
+ }
+ }
+
+ /* Pac1 data Cruncher */
+ if ( (in_data[PW_i+1] == 'a') &&
+ (in_data[PW_i+2] == 'c') &&
+ (in_data[PW_i+3] == '1') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Pac1 Data Cruncher" , 12 , Pac1 );
+ }
}
/* Master cruncher 3.0 data */
(in_data[PW_i+6] == '.') &&
(in_data[PW_i+7] == '2') )
{
- if ( testSpecialCruncherData ( 12, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Master Cruncher 3.0 data" , 8 , MasterCruncher3data );
- break;
+ if ( testSpecialCruncherData ( 12, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Master Cruncher 3.0 data" , 8 , MasterCruncher3data );
+ }
}
#endif
/* POLKA Packer */
(in_data[PW_i+2] == 'U') &&
(in_data[PW_i+3] == 'X')))
{
- if ( testPolka() == BAD )
- break;
- Rip_Polka ();
- Depack_Polka ();
- break;
+ if ( testPolka() != BAD )
+ {
+ Rip_Polka ();
+ Depack_Polka ();
+ }
+ }
+
+ /* PERFSONG Packer */
+ if ( (in_data[PW_i+1] == 'E') &&
+ (in_data[PW_i+2] == 'R') &&
+ (in_data[PW_i+3] == 'F') &&
+ (in_data[PW_i+4] == 'S') &&
+ (in_data[PW_i+5] == 'O') &&
+ (in_data[PW_i+6] == 'N') &&
+ (in_data[PW_i+7] == 'G'))
+ {
+ if ( testPERFSONG() != BAD )
+ {
+ Rip_PERFSONG ();
+ Depack_PERFSONG ();
+ }
}
break;
(in_data[PW_i+2] == 'C') )
{
/* RNC */
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Propack (RNC) data" , 18 , RNC );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Propack (RNC) data" , 18 , RNC );
+ }
}
/* RLE Data Cruncher */
if ( (in_data[PW_i+1] == 'L') &&
(in_data[PW_i+2] == 'E') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "RLE Data Cruncher" , 11 , RLE );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "RLE Data Cruncher" , 11 , RLE );
+ }
}
#endif
break;
case 'S': /* 0x53 */
+#ifdef INCLUDEALL
+ /* SpeedPacker (SP20) Data Cruncher */
+ if ( (in_data[PW_i+1] == 'P') &&
+ (in_data[PW_i+2] == '2') &&
+ (in_data[PW_i+3] == '0') )
+ {
+ if ( testSpecialCruncherData ( 8, 12 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "SpeedPacker (SP20) Data Cruncher" , 16 , SP20 );
+ }
+ }
+#endif
/* "SNT!" ProRunner 2 */
if ( (in_data[PW_i+1] == 'N') &&
(in_data[PW_i+2] == 'T') &&
(in_data[PW_i+3] == '!') )
{
- if ( testPRUN2() == BAD )
- break;
- Rip_PRUN2 ();
- Depack_PRUN2 ();
- break;
+ if ( testPRUN2() != BAD )
+ {
+ Rip_PRUN2 ();
+ Depack_PRUN2 ();
+ }
}
/* "SNT." ProRunner 1 */
if ( (in_data[PW_i+1] == 'N') &&
(in_data[PW_i+2] == 'T') &&
(in_data[PW_i+3] == '.') )
{
- if ( testPRUN1() == BAD )
- break;
- Rip_PRUN1 ();
- Depack_PRUN1 ();
- break;
+ if ( testPRUN1() != BAD )
+ {
+ Rip_PRUN1 ();
+ Depack_PRUN1 ();
+ }
}
/* SKYT packer */
(in_data[PW_i+2] == 'Y') &&
(in_data[PW_i+3] == 'T') )
{
- if ( testSKYT() == BAD )
- break;
- Rip_SKYT ();
- Depack_SKYT ();
- break;
+ if ( testSKYT() != BAD )
+ {
+ Rip_SKYT ();
+ Depack_SKYT ();
+ }
}
/* SMOD Future Composer 1.0 - 1.3 */
(in_data[PW_i+2] == 'O') &&
(in_data[PW_i+3] == 'D') )
{
- if ( testFC13() == BAD )
- break;
- Rip_FC13 ();
- break;
+ if ( testFC13() != BAD )
+ {
+ Rip_FC13 ();
+ }
}
+ /* SIDMON 2 */
+/* if ( (in_data[PW_i+1] == 'I') &&
+ (in_data[PW_i+2] == 'D') &&
+ (in_data[PW_i+3] == 'M') &&
+ (in_data[PW_i+4] == 'O') &&
+ (in_data[PW_i+5] == 'N') &&
+ (in_data[PW_i+6] == ' ') &&
+ (in_data[PW_i+7] == 'I') &&
+ (in_data[PW_i+8] == 'I') &&
+ (in_data[PW_i+9] == ' ') )
+ {
+ if ( testSIDMON2() != BAD )
+ {
+ Rip_SIDMON2 ();
+ }
+ }*/
+
#ifdef INCLUDEALL
/* S404 StoneCracker 4.04 data */
if ( (in_data[PW_i+1] == '4') &&
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == '4') )
{
- if ( testSpecialCruncherData ( 12, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "StoneCracker 4.04 data" , 18 , S404 );
- break;
+ if ( testSpecialCruncherData ( 12, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "StoneCracker 4.04 data" , 18 , S404 );
+ }
}
/* S403 StoneCracker 4.03 data */
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == '3') )
{
- if ( testSpecialCruncherData ( 12, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "StoneCracker 4.03 data" , 20 , S404 );
- break;
+ if ( testSpecialCruncherData ( 12, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "StoneCracker 4.03 data" , 20 , S404 );
+ }
}
/* S401 StoneCracker 4.01 data */
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == '1') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "StoneCracker 4.01 data" , 12 , S404 );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "StoneCracker 4.01 data" , 12 , S404 );
+ }
+ }
+ /* S400 StoneCracker 4.00 data */
+ if ( (in_data[PW_i+1] == '4') &&
+ (in_data[PW_i+2] == '0') &&
+ (in_data[PW_i+3] == '0') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "StoneCracker 4.00 data" , 12 , S404 );
+ }
}
/* S310 StoneCracker 3.10 data */
(in_data[PW_i+2] == '1') &&
(in_data[PW_i+3] == '0') )
{
- if ( testSpecialCruncherData ( 8, 4 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "StoneCracker 3.10 data" , 16 , S404 );
- break;
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "StoneCracker 3.10 data" , 16 , S404 );
+ }
}
/* S300 StoneCracker 3.00 data */
(in_data[PW_i+2] == '0') &&
(in_data[PW_i+3] == '0') )
{
- if ( testSpecialCruncherData ( 12, 8 ) == BAD )
+ if ( testSpecialCruncherData ( 12, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "StoneCracker 3.00 data" , 16 , S404 );
+ }
+ }
+
+ /* "SCRM" : ID of ScreamTracker 3 S3M */
+ if ( (in_data[PW_i+1] == 'C') &&
+ (in_data[PW_i+2] == 'R') &&
+ (in_data[PW_i+3] == 'M') )
+ {
+ if ( testS3M() != BAD )
+ {
+ Rip_S3M ();
+ }
+ }
+
+ /* SC data cruncher */
+/* if ( (in_data[PW_i+1] == 'A') )
+ {
+ if ( testSpecialCruncherData ( 10, 6 ) == BAD )
break;
- Rip_SpecialCruncherData ( "StoneCracker 3.00 data" , 16 , S404 );
+ Rip_SpecialCruncherData ( "SA Data Cruncher" , 182 , SF );
break;
- }
+ }*/
+
+ /* SC data cruncher */
+/* if ( (in_data[PW_i+1] == 'C') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) == BAD )
+ break;
+ Rip_SpecialCruncherData ( "SC Data Cruncher" , 76 , SF );
+ break;
+ }*/
/* SF data cruncher */
- /*if ( (in_data[PW_i+1] == 'F') )
+/* if ( (in_data[PW_i+1] == 'F') )
{
if ( testSpecialCruncherData ( 6, 2 ) == BAD )
break;
Rip_SpecialCruncherData ( "SF Data Cruncher" , 11 , SF );
break;
- }*/
+ }*/
/* SQ data cruncher */
- /* if ( (in_data[PW_i+1] == 'Q') )
+/* if ( (in_data[PW_i+1] == 'Q') )
{
if ( testSpecialCruncherData ( 6, 2 ) == BAD )
break;
Rip_SpecialCruncherData ( "SQ Data Cruncher" , 999991 , SQ );
break;
- }*/
+ }*/
/* SP data cruncher */
- /*if ( (in_data[PW_i+1] == 'P') )
+/* if ( (in_data[PW_i+1] == 'P') )
{
if ( testSpecialCruncherData ( 8, 4 ) == BAD )
break;
Rip_SpecialCruncherData ( "SP Data Cruncher" , 12 , SP );
break;
- }*/
+ }*/
#endif
/* STIM Slamtilt */
if ( (in_data[PW_i+1] == 'T') &&
{
Rip_STIM ();
Depack_STIM ();
- break;
+ }
+ }
+
+ /* SA hunk */
+ if ( (in_data[PW_i+1] == 'O') &&
+ (in_data[PW_i+2] == 'A') &&
+ (in_data[PW_i+3] == 'R') &&
+ (in_data[PW_i+4] == 'V') &&
+ (in_data[PW_i+5] == '1') &&
+ (in_data[PW_i+6] == '.') &&
+ (in_data[PW_i+7] == '0') )
+ {
+ if ( testSAhunk() != BAD )
+ {
+ Rip_SA();
}
}
(in_data[PW_i+2] == 'v') &&
(in_data[PW_i+3] == '3') )
{
- if ( testSpecialCruncherData ( 8, 12 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Speed Packer 3 data" , 0 , SpeedPacker3Data );
- break;
+ if ( testSpecialCruncherData ( 8, 12 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Speed Packer 3 data" , 0 , SpeedPacker3Data );
+ }
}
#endif
/* SONG Fuchs Tracker */
{
Rip_FuchsTracker ();
Depack_FuchsTracker ();
- break;
}
/* Sound FX */
if ( testSoundFX13() != BAD )
#ifndef UNIX
Depack_SoundFX13 ();
#endif
- break;
+ }
+ }
+ break;
+
+ case 'T': /* "THX" - AHX */
+ if ( ( in_data[PW_i+1] == 'H' ) &&
+ ( in_data[PW_i+2] == 'X' ) &&
+ (( in_data[PW_i+3] == 0x00 )||( in_data[PW_i+3] == 0x01 )) )
+ {
+ if ( testTHX() != BAD )
+ {
+ Rip_THX ();
+ }
+ }
+
+ /* "TRK1" Module Protector */
+ if ( ( in_data[PW_i+1] == 'R' ) &&
+ ( in_data[PW_i+2] == 'K' ) &&
+ ( in_data[PW_i+3] == '1' ) )
+ {
+ /* Module Protector */
+ if ( testMP_withID() != BAD )
+ {
+ Rip_MP_withID ();
+ Depack_MP ();
+ }
+ }
+
+ /* "TMK. Timetracker ?!? */
+ if ( ( in_data[PW_i+1] == 'M' ) &&
+ ( in_data[PW_i+2] == 'K' ) &&
+ ( in_data[PW_i+3] == 0x01 ) )
+ {
+ if ( testTMK() != BAD )
+ {
+ Rip_TMK ();
+ Depack_TMK ();
}
}
break;
{
Rip_UNIC_withID ();
Depack_UNIC ();
- break;
}
}
/* Mugician */
if ( testMUGICIAN() != BAD )
{
Rip_MUGICIAN ();
- break;
}
}
break;
( in_data[PW_i+2] == '3' )) )
{
/* Sound Monitor v2/v3 */
- if ( testBP() == BAD )
- break;
- Rip_BP ();
- break;
+ if ( testBP() != BAD )
+ {
+ Rip_BP ();
+ }
}
#ifdef INCLUDEALL
/* Virtual Dreams VDCO data cruncher */
(in_data[PW_i+2] == 'C') &&
(in_data[PW_i+3] == 'O') )
{
- if ( testSpecialCruncherData ( 12, 8 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "Virtual Dreams (VDCO) data cruncher" , 13 , VDCO );
- break;
+ if ( testSpecialCruncherData ( 12, 8 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "Virtual Dreams (VDCO) data cruncher" , 13 , VDCO );
+ }
}
#endif
break;
- case 'T':
- /* "TRK1" Module Protector */
- if ( ( in_data[PW_i+1] == 'R' ) &&
- ( in_data[PW_i+2] == 'K' ) &&
- ( in_data[PW_i+3] == '1' ) )
- {
- /* Module Protector */
- if ( testMP_withID() == BAD )
- break;
- Rip_MP_withID ();
- Depack_MP ();
- break;
- }
-
- /* "TMK. Timetracker ?!? */
- if ( ( in_data[PW_i+1] == 'M' ) &&
- ( in_data[PW_i+2] == 'K' ) &&
- ( in_data[PW_i+3] == 0x01 ) )
- {
- if ( testTMK() == BAD )
- break;
- Rip_TMK ();
- Depack_TMK ();
- break;
- }
- break;
-
case 'W': /* 0x57 */
/* "WN" Wanton Packer */
if ( (in_data[PW_i+1] == 'N') &&
(in_data[PW_i+2] == 0x00 ) )
{
- if ( testWN() == BAD )
- break;
- Rip_WN ();
- Depack_WN ();
- break;
+ if ( testWN() != BAD )
+ {
+ Rip_WN ();
+ Depack_WN ();
+ }
}
break;
(in_data[PW_i+2] == 'K') &&
(in_data[PW_i+3] == 'F') )
{
- if ( testSpecialCruncherData ( 4, 12 ) == BAD )
- break;
- Rip_SpecialCruncherData ( "XPK" , 8 , XPK );
- break;
+ if ( testSpecialCruncherData ( 4, 12 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "XPK" , 8 , XPK );
+ }
}
#endif
break;
{
Rip_PM18a ();
Depack_PM18a ();
- break;
}
/* Promizer 1.0c */
{
Rip_PM10c ();
Depack_PM10c ();
- break;
}
- break;
}
/* promizer 2.0 ? */
(in_data[PW_i+14]== 0x10) &&
(in_data[PW_i+15]== 0x3a) ) /* gosh !, should be enough :) */
{
- if ( testPM2() == BAD )
- break;
- Rip_PM20 ();
- Depack_PM20 ();
- break;
+ if ( testPM2() != BAD )
+ {
+ Rip_PM20 ();
+ Depack_PM20 ();
+ }
}
#ifdef INCLUDEALL
(in_data[PW_i+36] == 0x58) &&
(in_data[PW_i+37] == 0x8B) )
{
- if ( testSpikeCruncher() == BAD )
- break;
- Rip_SpikeCruncher ();
- break;
+ if ( testSpikeCruncher() != BAD )
+ {
+ Rip_SpikeCruncher ();
+ }
}
#endif
break;
(in_data[PW_i+14] == 0x00) &&
(in_data[PW_i+15] == 0x04) )
{
- if ( testTNMCruncher11() == BAD )
- break;
- Rip_TNMCruncher11 ();
- break;
+ if ( testTNMCruncher11() != BAD )
+ {
+ Rip_TNMCruncher11 ();
+ }
}
/* "arcD" data cruncher */
(in_data[PW_i+2] == 'c') &&
(in_data[PW_i+3] == 'D'))
{
- if ( testArcDDataCruncher() == BAD )
- break;
- Rip_SpecialCruncherData ( "arcD data Cruncher" , 0 , arcD );
- break;
+ if ( testArcDDataCruncher() != BAD )
+ {
+ Rip_SpecialCruncherData ( "arcD data Cruncher" , 0 , arcD );
+ }
}
/* Tetrapack 2.1 */
(in_data[PW_i+7] == 0xF9) &&
(in_data[PW_i+8] == 0x00) &&
(in_data[PW_i+9] == 0xDF) &&
- (in_data[PW_i+10] == 0xF1) &&
(in_data[PW_i+12] == 0xD1) &&
(in_data[PW_i+13] == 0xFC) )
{
- if ( testTetrapack_2_1() == BAD )
- break;
- Rip_Tetrapack_2_1 ();
- break;
+ if ( testTetrapack_2_1() != BAD )
+ {
+ Rip_Tetrapack_2_1 ();
+ }
}
/* Tetrapack 2.2 */
(in_data[PW_i+12] == 0x28) &&
(in_data[PW_i+13] == 0x7A) )
{
- if ( testTetrapack_2_2() == GOOD )
+ if ( testTetrapack_2_2() != BAD )
Rip_Tetrapack_2_2 ();
- break;
+ }
+ /* High Pressure Cruncher */
+ if ( (in_data[PW_i+1] == 0x00) &&
+ (in_data[PW_i+2] == 0x00) &&
+ (in_data[PW_i+3] == 0xA8) &&
+ (in_data[PW_i+4] == 0x20) &&
+ (in_data[PW_i+5] == 0x7C) &&
+ (in_data[PW_i+10] == 0x22) &&
+ (in_data[PW_i+11] == 0x7c) &&
+ (in_data[PW_i+16] == 0x24) &&
+ (in_data[PW_i+17] == 0x48) &&
+ (in_data[PW_i+18] == 0x26) &&
+ (in_data[PW_i+19] == 0x49) &&
+ (in_data[PW_i+20] == 0x61))
+ {
+ if ( testHighPressureCruncher() != BAD )
+ {
+ Rip_HighPressureCruncher ();
+ }
+ }
+#endif
+ break;
+
+ case 'x': /* xVdg */
+#ifdef INCLUDEALL
+ /* AMOS sub file */
+ if ( (in_data[PW_i+1] == 'V') &&
+ (in_data[PW_i+2] == 'd') &&
+ (in_data[PW_i+3] == 'g') )
+ {
+ if ( testSpecialCruncherData ( 8, 4 ) != BAD )
+ {
+ Rip_SpecialCruncherData ( "xVdg" , 12 , xVdg );
+ }
}
#endif
break;
(in_data[PW_i+12] == 0x28) &&
(in_data[PW_i+13] == 0x7A) )
{
- if ( testTetrapack_2_2() == GOOD )
+ if ( testTetrapack_2_2() != BAD )
Rip_Tetrapack_2_2 ();
- break;
}
- /* Tetrapack 2.1 */
+ /* Tetrapack 2.1 case #2*/
if ( (in_data[PW_i+1] == 0x00) &&
(in_data[PW_i+2] == 0x41) &&
(in_data[PW_i+3] == 0xFA) &&
(in_data[PW_i+5] == 0xE4) &&
(in_data[PW_i+6] == 0x4B) &&
(in_data[PW_i+7] == 0xF9) &&
- (in_data[PW_i+8] == 0x00) &&
- (in_data[PW_i+9] == 0xDF) &&
- (in_data[PW_i+10] == 0xF1))
+ (in_data[PW_i+8] == 0x00))
{
- if ( testTetrapack_2_1() == BAD )
- break;
- Rip_Tetrapack_2_1 ();
- break;
+ if ( testTetrapack_2_1() != BAD )
+ {
+ Rip_Tetrapack_2_1 ();
+ }
}
/* Defjam Cruncher 3.2T */
(in_data[PW_i+9] == 0xDF) &&
(in_data[PW_i+10] == 0xF1))
{
- if ( testDefjam32t() == BAD )
- break;
- Rip_Defjam32 ();
- break;
+ if ( testDefjam32t() != BAD )
+ {
+ Rip_Defjam32 ();
+ }
}
#endif
- break;
+ break;
case 0x80:
/* Viruz2 8000 */
/* if ( (in_data[PW_i+1] == 0x00) &&
{
Rip_AC1D ();
Depack_AC1D ();
- break;
}
}
break;
+ case 0xB4:
+#ifdef INCLUDEALL
+ /* DIET PC data packer */
+ if ( (in_data[PW_i+1] == 0x4C) &&
+ (in_data[PW_i+2] == 0xCD) &&
+ (in_data[PW_i+3] == 0x21) &&
+ (in_data[PW_i+4] == 0x9D) &&
+ (in_data[PW_i+5] == 0x89) &&
+ ( ( (in_data[PW_i+6] == 0x64) &&
+ (in_data[PW_i+7] == 0x6C) &&
+ (in_data[PW_i+8] == 0x7A) ) ||
+ ( (in_data[PW_i+6] == 0x45) &&
+ (in_data[PW_i+7] == 0x4F) &&
+ (in_data[PW_i+8] == 0x53) ) ) )
+ {
+ if ( testDietDataPacker() != BAD )
+ {
+ Rip_DietDataPacker ();
+ }
+ }
+#endif
+ break;
+
case 0xC0:
/* Pha Packer */
if ( (PW_i >= 1) && (in_data[PW_i-1] == 0x03) )
{
Rip_PHA ();
Depack_PHA ();
- break;
}
}
break;
} /* end of switch */
}
+
#if 0
free ( in_data );
printf ( "\n" );
- printf ( " 1997-2007 (c) Sylvain \"Asle\" Chipaux (asle@free.fr)\n\n");
+ printf ( " 1997-2016 (c) Sylvain \"Asle\" Chipaux (asle@free.fr)\n\n");
/* getchar();*/
exit ( 0 );
#endif
-/* testAC1D() */
-/* Rip_AC1D() */
+/* testAC1D() */
+/* Rip_AC1D() */
/* Depack_AC1D() */
#include "globals.h"
#include "extern.h"
-short testAC1D ( void )
+int16_t testAC1D ( void )
{
/* test #1 */
- /* if ( PW_i<2 )*/
+ /* if ( PW_i<2 )*/
if ( test_1_start(2) == BAD )
return BAD;
return BAD;
}
+
/* test #4 */
for ( PW_k = 0 ; PW_k < 31 ; PW_k ++ )
{
Save_Rip ( "AC1D Packed module", AC1D_packer );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */
+ PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */
}
/*
-* ac1d.c 1996-1997 (c) Asle / ReDoX
-*
-* Converts AC1D packed MODs back to PTK MODs
-* thanks to Gryzor and his ProWizard tool ! ... without it, this prog
-* would not exist !!!
-*
-* Last update: 30/11/99
-* - removed open() (and other fread()s and the like)
-* - general Speed & Size Optmizings
-* 20051002 : testing fopen() ...
+ * ac1d.c 1996-1997 (c) Asle / ReDoX
+ *
+ * Converts AC1D packed MODs back to PTK MODs
+ * thanks to Gryzor and his ProWizard tool ! ... without it, this prog
+ * would not exist !!!
+ *
+ * Last update: 30/11/99
+ * - removed open() (and other fread()s and the like)
+ * - general Speed & Size Optmizings
+ * 20051002 : testing fopen() ...
*/
void Depack_AC1D ( void )
{
- Uchar NO_NOTE=0xff;
- Uchar c1,c2,c3,c4;
- Uchar *Whatever;
- Uchar Nbr_Pat;
- Uchar poss[37][2];
- Uchar Note,Smp,Fx,FxVal;
- long Sample_Data_Address;
- long WholeSampleSize=0;
- long Pattern_Addresses[128];
- long Pattern_Sizes[128];
- long siztrack1,siztrack2,siztrack3;
- long i,j,k;
- long Where = PW_Start_Address;
+ uint8_t NO_NOTE=0xff;
+ uint8_t c1,c2,c3,c4;
+ uint8_t *Whatever;
+ uint8_t Nbr_Pat;
+ uint8_t poss[37][2];
+ uint8_t Note,Smp,Fx,FxVal;
+ int32_t Sample_Data_Address;
+ int32_t WholeSampleSize=0;
+ int32_t Pattern_Addresses[128];
+ int32_t Pattern_Sizes[128];
+ int32_t siztrack1,siztrack2,siztrack3;
+ int32_t i,j,k;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
memset (Pattern_Addresses , 0 , 128*4);
/*printf ( "adress of sample datas : %ld\n" , Sample_Data_Address );*/
/* write title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );
/* crap ... */
- Crap ( " AC1D Packer " , BAD , BAD , out );
+ Crap ( " AC1D Packer " , BAD , BAD , out );
fflush ( out );
fclose ( out );
printf ( "done\n" );
return; /* useless ... but */
-}
\ No newline at end of file
+}
--- /dev/null
+/* (06 dec 2008)\r
+ AMF "advanced module format" (Dual Module Player internal format)\r
+ dirty AMF->MOD depack, when possible.\r
+ (c) Sylvain "Asle" Chipaux\r
+*/\r
+/* testAMF() */\r
+/* Rip_AMF() */\r
+/* Depack_AMF() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testAMF ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+ /* test 1 */\r
+ if ( (PW_Start_Address+75)>=PW_in_size )\r
+ {\r
+/*printf ( "#1 (PW_i:%ld)\n" , PW_i );*/\r
+ return BAD;\r
+ }\r
+\r
+ /* test 2 */\r
+ PW_j = in_data[PW_Start_Address+36]; /* nbr of samples */\r
+ PW_k = in_data[PW_Start_Address+40]; /* nbr of voices */\r
+ if ( (PW_j>0x1F) || (PW_k>0x04) ) /* yes, 4 voices only .. I _want_ PTK ..*/\r
+ {\r
+/*printf ( "#2 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+void Rip_AMF ( void )\r
+{\r
+ /* PW_j is still the number of samples */\r
+ /* PW_k is still the number of voices */\r
+\r
+/* TODO */\r
+\r
+ /*PW_WholeSampleSize is already the whole sample size */\r
+ /*for ( PW_j=0 ; PW_j<31 ; PW_j++ )\r
+ PW_WholeSampleSize += (((in_data[PW_Start_Address+42+PW_j*30]*256)+in_data[PW_Start_Address+43+PW_j*30])*2);*/\r
+\r
+ OutputSize = PW_WholeSampleSize + PW_l;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "Eureka Packed module", Eureka_packer );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += (OutputSize - 46); /* 45 should do but call it "just to be sure" :) */\r
+}\r
+\r
+\r
+/*\r
+ * AMF.c 2008 (c) Sylvain "Asle" Chipaux\r
+ *\r
+ * Converts MODs packed DMP replayer\r
+*/\r
+\r
+void Depack_AMF ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ uint8_t c1=0x00;\r
+ uint8_t Pat_Max=0x00;\r
+ int32_t Sample_Start_Address=0;\r
+ int32_t WholeSampleSize=0;\r
+ int32_t Track_Address[128][4];\r
+ int32_t i=0,j=0,k;\r
+ int32_t Where = PW_Start_Address;\r
+ FILE *out;\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ /* read header ... same as ptk */\r
+ fwrite ( &in_data[Where] , 1080 , 1 , out );\r
+\r
+ /* now, let's sort out that a bit :) */\r
+ /* first, the whole sample size */\r
+ for ( i=0 ; i<31 ; i++ )\r
+ WholeSampleSize += (((in_data[Where+i*30+42]*256)+in_data[Where+i*30+43])*2);\r
+ /*printf ( "Whole sample size : %ld\n" , WholeSampleSize );*/\r
+\r
+ /* next, the size of the pattern list */\r
+ /*printf ( "Size of pattern list : %d\n" , in_data[Where+950] );*/\r
+\r
+ /* now, the pattern list .. and the max */\r
+ Pat_Max = 0x00;\r
+ for ( i=0 ; i<128 ; i++ )\r
+ {\r
+ if ( in_data[Where+952+i] > Pat_Max )\r
+ Pat_Max = in_data[Where+952+i];\r
+ }\r
+ Pat_Max += 1;\r
+ /*printf ( "Number of patterns : %d\n" , Pat_Max );*/\r
+\r
+ /* write ptk's ID */\r
+ Whatever = (uint8_t *) malloc (1024);\r
+ BZERO ( Whatever , 1024 );\r
+ Whatever[0] = 'M';\r
+ Whatever[1] = '.';\r
+ Whatever[2] = 'K';\r
+ Whatever[3] = '.';\r
+ fwrite ( Whatever , 4 , 1 , out );\r
+\r
+\r
+ /* read sample data address */\r
+ Where = PW_Start_Address+1080;\r
+ Sample_Start_Address = (in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ Where += 4;\r
+ /*printf ( "Address of sample data : %ld\n" , Sample_Start_Address );*/\r
+\r
+ /* read tracks addresses */\r
+ for ( i=0 ; i<Pat_Max ; i++ )\r
+ {\r
+ for ( j=0 ; j<4 ; j++ )\r
+ {\r
+ Track_Address[i][j] = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+ }\r
+ }\r
+\r
+ /* the track data now ... */\r
+ for ( i=0 ; i<Pat_Max ; i++ )\r
+ {\r
+ BZERO ( Whatever , 1024 );\r
+ for ( j=0 ; j<4 ; j++ )\r
+ {\r
+ Where = PW_Start_Address + Track_Address[i][j];\r
+ for ( k=0 ; k<64 ; k++ )\r
+ {\r
+ c1 = in_data[Where++];\r
+ if ( ( c1 & 0xc0 ) == 0x00 )\r
+ {\r
+ Whatever[k*16+j*4] = c1;\r
+ Whatever[k*16+j*4+1] = in_data[Where++];\r
+ Whatever[k*16+j*4+2] = in_data[Where++];\r
+ Whatever[k*16+j*4+3] = in_data[Where++];\r
+ continue;\r
+ }\r
+ if ( ( c1 & 0xc0 ) == 0xc0 )\r
+ {\r
+ k += (c1&0x3f);\r
+ continue;\r
+ }\r
+ if ( ( c1 & 0xc0 ) == 0x40 )\r
+ {\r
+ Whatever[k*16+j*4+2] = c1&0x0f;\r
+ Whatever[k*16+j*4+3] = in_data[Where++];\r
+ continue;\r
+ }\r
+ if ( ( c1 & 0xc0 ) == 0x80 )\r
+ {\r
+ Whatever[k*16+j*4] = in_data[Where++];\r
+ Whatever[k*16+j*4+1] = in_data[Where++];\r
+ Whatever[k*16+j*4+2] = (c1<<4)&0xf0;\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ /*printf ( "+" );*/\r
+ }\r
+ free ( Whatever );\r
+\r
+ /* go to sample data addy */\r
+ Where = PW_Start_Address + Sample_Start_Address;\r
+\r
+ /* read sample data */\r
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );\r
+\r
+ /* crap .. */\r
+ Crap ( " EUREKA Packer " , BAD , BAD , out );\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
+\r
#include "extern.h"
-short testAmBk ( void )
+int16_t testAmBk ( void )
{
if (PW_i + 68 > PW_in_size)
{
*/
void Depack_AmBk ( void )
{
- /*Uchar c1,c2,c3,c4;*/
- Uchar *Whatever,*address;
- Uchar poss[37][2];
- /*Uchar Note,Smp,Fx,FxVal;*/
- long i,j,k;
- long Where = PW_Start_Address;
- long INST_HDATA_ADDY,SONGS_DATA_ADDY,PAT_DATA_ADDY;/*,INST_DATA_ADDY;*/
- long BANK_LEN;
- long smps_addys[31],smp_sizes[31];
+ /*uint8_t c1,c2,c3,c4;*/
+ uint8_t *Whatever,*address, *Header;
+ uint8_t poss[37][2];
+ /*uint8_t Note,Smp,Fx,FxVal;*/
+ int32_t i,j,k;
+ int32_t Where = PW_Start_Address;
+ int32_t INST_HDATA_ADDY,SONGS_DATA_ADDY,PAT_DATA_ADDY;/*,INST_DATA_ADDY;*/
+ int32_t BANK_LEN;
+ int32_t smps_addys[31],smp_sizes[31];
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
fillPTKtable(poss);
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO (Whatever,1024);
+ Header = (uint8_t *) malloc (1084);
+ BZERO (Header,1084);
BANK_LEN = ((in_data[Where + 0x09]*256*256)+
(in_data[Where + 0x0a]*256)+
if ( j > 1 )
{
printf ( "\n!!! unsupported feature in depack_AmBk() - send this file to asle@free.fr !\n" );
- free(Whatever);
return;
}
j = ((in_data[Where+2]*256*256*256)+(in_data[Where+3]*256*256)+(in_data[Where+4]*256)+in_data[Where+5]);
- fwrite ( &in_data[Where + j + 0x0c], 16, 1, out );
- fwrite ( Whatever, 4, 1, out );
+ for (i=0; i<16; i++)
+ Header[i] = in_data[Where + j + 0x0c + i];
+ /*fwrite ( &in_data[Where + j + 0x0c], 16, 1, out );*/
+ /*fwrite ( Whatever, 4, 1, out );*/
Where = PW_Start_Address + INST_HDATA_ADDY;
/*printf ( "\naddy of instrument headers : %ld\n", Where );*/
Where += 2;
for ( i=0 ; i<j ; i++ )
{
+ int a;
smps_addys[i] = ((in_data[Where]*256*256*256)+(in_data[Where+1]*256*256)+(in_data[Where+2]*256)+in_data[Where+3]);
/* printf ( "sample[%ld] : %ld\n", i,smps_addys[i]);*/
/* sample name */
- fwrite ( &in_data[Where+16], 16, 1, out );
- fwrite ( Whatever, 6, 1, out ); /* pad */
+ for (a=0; a<16; a++)
+ Header[20+(i*30)+a] = in_data[Where+16+a];
+
/* size */
k = 0x0e;
if ( (in_data[Where+ 0x0e] == 0x00) && (in_data[Where + 0x0f] == 0x00))
k = 0x08;
- if ( (((in_data[Where+k]*256) + in_data[Where+k+1]) == 2 )||
- (((in_data[Where+k]*256) + in_data[Where+k+1]) == 4 ))
- fwrite (&Whatever[0], 2, 1, out );
- else
- {
- fwrite (&in_data[Where+k], 2, 1, out );
- smp_sizes[i] = (in_data[Where+k]*256) + in_data[Where+k];
- }
+
+ Header[42+(i*30)] = in_data[Where+k];
+ Header[43+(i*30)] = in_data[Where+k+1];
+ smp_sizes[i] = (in_data[Where+k]*256) + in_data[Where+k];
+
/* fine + vol */
- fwrite ( &in_data[Where + 0x0c], 2, 1, out );
+ Header[44+(i*30)] = in_data[Where + 0x0c];
+ Header[45+(i*30)] = in_data[Where + 0x0d];
+ /*fwrite ( &in_data[Where + 0x0c], 2, 1, out );*/
/* loop */
k = (in_data[Where+ 0x05]*256*256) + (in_data[Where + 0x06]*256) + in_data[Where + 0x07];
- if ( k < smps_addys[0] )
- fwrite (&Whatever[0], 2, 1, out );
- else
+ if (k>=smps_addys[i])
{
k -= smps_addys[i]; k/=2;
- /* PC only code !!! */
- address = (Uchar *) &k;
- Whatever[32] = *(address+1);
- Whatever[33] = *address;
- fwrite ( &Whatever[32], 2, 1, out );
+ /* PC only code !!! */
+ address = (uint8_t *) &k;
+ Header[46+(i*30)] = *(address+1);
+ Header[47+(i*30)] = *address;
}
/* loop size */
if ( (in_data[Where + 0x0a] == 0x00) && (in_data[Where + 0x0b] <= 0x02) )
{
- Whatever[29] = 0x01;
- fwrite ( &Whatever[28], 2, 1, out );
+ Header[49+(i*30)] = 0x01;
}
else
- fwrite ( &in_data[Where + 0x0a], 2, 1, out );
+ {
+ Header[48+(i*30)] = in_data[Where + 0x0a];
+ Header[49+(i*30)] = in_data[Where + 0x0b];
+ }
Where += 32;
/*printf ( "where out : %x\n", ftell (out ));*/
}
- /* padding to 31 samples */
- while (i++ < 31)
- fwrite ( Whatever, 30, 1, out );
/* end of sample header */
+ fwrite (Header, 1084, 1, out);
+
+
+
+
+ free(Header);
+ free(Whatever);
+
/* crap ... */
/* Crap ( " AmBk " , BAD , BAD , out );*/
#include "globals.h"
#include "extern.h"
-short testPPbk ( void )
+int16_t testPPbk ( void )
{
PW_Start_Address = PW_i;
#include "extern.h"
-short testBP ( void )
+int16_t testBP ( void )
{
/* test 1 */
if ( (PW_i < 26) || ((PW_Start_Address+512)>PW_in_size) )
for ( PW_k=0 ; PW_k<PW_l ; PW_k++ )
{
- if ( (in_data[PW_Start_Address+512+PW_k*16]*256 +
- in_data[PW_Start_Address+513+PW_k*16]) > PW_j )
+ if ( (in_data[PW_Start_Address+512+PW_k*16]*256 + in_data[PW_Start_Address+513+PW_k*16]) > PW_j )
+ {
PW_j = (in_data[PW_Start_Address+512+PW_k*16]*256 + in_data[PW_Start_Address+513+PW_k*16]);
- if ( (in_data[PW_Start_Address+516+PW_k*16]*256 +
- in_data[PW_Start_Address+517+PW_k*16]) > PW_j )
+ }
+ if ( (in_data[PW_Start_Address+516+PW_k*16]*256 + in_data[PW_Start_Address+517+PW_k*16]) > PW_j )
+ {
PW_j = (in_data[PW_Start_Address+516+PW_k*16]*256 + in_data[PW_Start_Address+517+PW_k*16]);
- if ( (in_data[PW_Start_Address+520+PW_k*16]*256 +
- in_data[PW_Start_Address+521+PW_k*16]) > PW_j )
+ }
+ if ( (in_data[PW_Start_Address+520+PW_k*16]*256 + in_data[PW_Start_Address+521+PW_k*16]) > PW_j )
+ {
PW_j = (in_data[PW_Start_Address+520+PW_k*16]*256 + in_data[PW_Start_Address+521+PW_k*16]);
- if ( (in_data[PW_Start_Address+524+PW_k*16]*256 +
- in_data[PW_Start_Address+525+PW_k*16]) > PW_j )
+ }
+ if ( (in_data[PW_Start_Address+524+PW_k*16]*256 + in_data[PW_Start_Address+525+PW_k*16]) > PW_j )
+ {
PW_j = (in_data[PW_Start_Address+524+PW_k*16]*256 + in_data[PW_Start_Address+525+PW_k*16]);
+ }
}
return GOOD;
#include "globals.h"
#include "extern.h"
-short testBSIFutureComposer ( void )
+int16_t testBSIFutureComposer ( void )
{
PW_Start_Address = PW_i;
/* testByteKiller_20() */
/* testByteKiller30() */
/* testbytekillerpro10() */
+/* testBKCloneFLT */
+/* testBKClone5 20130416*/
/* Rip_ByteKiller() */
/* Rip_ByteKiller30() */
/* Rip_bytekillerpro10 */
+/* Rip_BKCloneFLT */
+/* Rip_BKClone5 20130416*/
#include "globals.h"
#include "extern.h"
-short testByteKiller_13 ( void )
+int16_t testByteKiller_13 ( void )
{
/* if ( PW_i < 135 )*/
if ( test_1_start (135) == BAD )
-short testByteKiller_20 ( void )
+int16_t testByteKiller_20 ( void )
{
if ( test_1_start(127) == BAD )
{
(in_data[PW_Start_Address+4] != 0x4D ) ||
(in_data[PW_Start_Address+5] != 0xF9 ) ||
(in_data[PW_Start_Address+6] != 0x00 ) ||
- (in_data[PW_Start_Address+7] != 0xDF ) ||
- (in_data[PW_Start_Address+8] != 0xF1 ) ||
(in_data[PW_Start_Address+10] != 0x41 ) ||
(in_data[PW_Start_Address+11] != 0xFA ) ||
(in_data[PW_Start_Address+12] != 0x00 ) ||
}
-short testByteKiller30 ( void )
+int16_t testByteKiller30 ( void )
{
PW_Start_Address = PW_i;
/* PW_l is the size of the pack */
}
-short testbytekillerpro10 ( void )
+int16_t testbytekillerpro10 ( void )
{
PW_Start_Address = PW_i;
}
+int16_t testBKCloneFLT ( void )
+{
+ PW_Start_Address = PW_i;
+
+ if ((PW_i + 308) > PW_in_size)
+ return BAD;
+
+ if ( (in_data[PW_Start_Address+14] != 0x24 ) ||
+ (in_data[PW_Start_Address+15] != 0x60 ) ||
+ (in_data[PW_Start_Address+16] != 0xd5 ) ||
+ (in_data[PW_Start_Address+17] != 0xc9 ) ||
+ (in_data[PW_Start_Address+18] != 0x4a ) ||
+ (in_data[PW_Start_Address+19] != 0xa0 ) ||
+ (in_data[PW_Start_Address+20] != 0x20 ) ||
+ (in_data[PW_Start_Address+21] != 0x20 ) ||
+ (in_data[PW_Start_Address+22] != 0x13 ) ||
+ (in_data[PW_Start_Address+23] != 0xf9 ) ||
+ (in_data[PW_Start_Address+24] != 0x00 ) ||
+ (in_data[PW_Start_Address+25] != 0xdf ) ||
+ (in_data[PW_Start_Address+26] != 0xf0 ) ||
+ (in_data[PW_Start_Address+27] != 0x06 ) ||
+ (in_data[PW_Start_Address+28] != 0x00 ) ||
+ (in_data[PW_Start_Address+29] != 0xdf ) )
+ {
+ /* should be enough :))) */
+/*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
+ return BAD;
+
+ }
+
+
+ /* packed size */
+ PW_l = ( (in_data[PW_Start_Address+304]*256*256*256) +
+ (in_data[PW_Start_Address+305]*256*256) +
+ (in_data[PW_Start_Address+306]*256) +
+ in_data[PW_Start_Address+307] );
+
+ PW_l += 348;
+
+
+ if ( PW_i >= 36 )
+ {
+ if ( (in_data[PW_Start_Address-36] != 0x00 ) ||
+ (in_data[PW_Start_Address-35] != 0x00 ) ||
+ (in_data[PW_Start_Address-34] != 0x03 ) ||
+ (in_data[PW_Start_Address-33] != 0xF3 ) ||
+ (in_data[PW_Start_Address-32] != 0x00 ) ||
+ (in_data[PW_Start_Address-31] != 0x00 ) ||
+ (in_data[PW_Start_Address-30] != 0x00 ) ||
+ (in_data[PW_Start_Address-29] != 0x00 ) ||
+ (in_data[PW_Start_Address-28] != 0x00 ) ||
+ (in_data[PW_Start_Address-27] != 0x00 ) ||
+ (in_data[PW_Start_Address-26] != 0x00 ) ||
+ (in_data[PW_Start_Address-25] != 0x02 ) ||
+ (in_data[PW_Start_Address-24] != 0x00 ) ||
+ (in_data[PW_Start_Address-23] != 0x00 ) ||
+ (in_data[PW_Start_Address-22] != 0x00 ) ||
+ (in_data[PW_Start_Address-21] != 0x00 ) )
+ {
+ Amiga_EXE_Header = BAD;
+ }
+ else
+ Amiga_EXE_Header = GOOD;
+ }
+ else
+ Amiga_EXE_Header = BAD;
+
+ return GOOD;
+ /* PW_l is the size of the pack */
+}
+
+/* exe found in Anarchy demo Seeing Is Believing */
+/* added 20130415 */
+int16_t testBKClone5 ( void )
+{
+ PW_Start_Address = PW_i;
+
+ if ((PW_i + 284) > PW_in_size)
+ return BAD;
+
+ if ( (in_data[PW_Start_Address+18] != 0xD5 ) ||
+ (in_data[PW_Start_Address+19] != 0xC9 ) ||
+ (in_data[PW_Start_Address+20] != 0x20 ) ||
+ (in_data[PW_Start_Address+21] != 0x20 ) ||
+ (in_data[PW_Start_Address+22] != 0x47 ) ||
+ (in_data[PW_Start_Address+23] != 0xFA ) ||
+ (in_data[PW_Start_Address+24] != 0x00 ) ||
+ (in_data[PW_Start_Address+25] != 0xE0 ) ||
+ (in_data[PW_Start_Address+26] != 0x72 ) ||
+ (in_data[PW_Start_Address+27] != 0x03 ) ||
+ (in_data[PW_Start_Address+28] != 0x4E ) ||
+ (in_data[PW_Start_Address+29] != 0x93 ) )
+ {
+ /* should be enough :))) */
+/*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
+ return BAD;
+
+ }
+
+
+ /* packed size */
+ PW_l = ( (in_data[PW_Start_Address+6]*256*256*256) +
+ (in_data[PW_Start_Address+7]*256*256) +
+ (in_data[PW_Start_Address+8]*256) +
+ in_data[PW_Start_Address+9] );
+
+ PW_l += 284;
+
+
+ if ( PW_i >= 32 )
+ {
+ if ( (in_data[PW_Start_Address-32] != 0x00 ) ||
+ (in_data[PW_Start_Address-31] != 0x00 ) ||
+ (in_data[PW_Start_Address-30] != 0x03 ) ||
+ (in_data[PW_Start_Address-29] != 0xF3 ) ||
+ (in_data[PW_Start_Address-28] != 0x00 ) ||
+ (in_data[PW_Start_Address-27] != 0x00 ) ||
+ (in_data[PW_Start_Address-26] != 0x00 ) ||
+ (in_data[PW_Start_Address-25] != 0x00 ) ||
+ (in_data[PW_Start_Address-24] != 0x00 ) ||
+ (in_data[PW_Start_Address-23] != 0x00 ) ||
+ (in_data[PW_Start_Address-22] != 0x00 ) ||
+ (in_data[PW_Start_Address-21] != 0x01 ) ||
+ (in_data[PW_Start_Address-20] != 0x00 ) ||
+ (in_data[PW_Start_Address-19] != 0x00 ) ||
+ (in_data[PW_Start_Address-18] != 0x00 ) ||
+ (in_data[PW_Start_Address-17] != 0x00 ) )
+ {
+ Amiga_EXE_Header = BAD;
+ }
+ else
+ Amiga_EXE_Header = GOOD;
+ }
+ else
+ Amiga_EXE_Header = BAD;
+
+ return GOOD;
+ /* PW_l is the size of the pack */
+}
+
void Rip_ByteKiller ( void )
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 60;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 50;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 60;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
PW_i += 54; /* 51 should do but call it "just to be sure" :) */
}
+
+void Rip_BKCloneFLT ( void )
+{
+ /* PW_l is still the whole size */
+
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
+
+ OutputSize = PW_l;
+
+ CONVERT = BAD;
+
+ if ( Amiga_EXE_Header == BAD )
+ {
+ OutputSize -= 40;
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
+ BZERO ( Amiga_EXE_Header_Block , 36 );
+ Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
+ Amiga_EXE_Header_Block[3] = 0xF3;
+ Amiga_EXE_Header_Block[11] = 0x02;
+ Amiga_EXE_Header_Block[19] = 0x01;
+ Amiga_EXE_Header_Block[27] = 0x01;
+ Amiga_EXE_Header_Block[31] = 0xE9;
+
+ /* WARNING !!! WORKS ONLY ON PC !!! */
+ /* 68k machines code : c1 = *(Whatever+2); */
+ /* 68k machines code : c2 = *(Whatever+3); */
+ PW_j = PW_l - 40;
+ PW_j /= 4;
+ Whatever = (uint8_t *) &PW_j;
+ Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
+ Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
+ Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
+ Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[35] = *Whatever;
+
+ /* also the last 4 bytes could have been 'removed' ... Here they are */
+ /* I know, now, it's not safe method ... */
+ in_data[PW_Start_Address+OutputSize-4] = 0x00;
+ in_data[PW_Start_Address+OutputSize-3] = 0x00;
+ in_data[PW_Start_Address+OutputSize-2] = 0x03;
+ in_data[PW_Start_Address+OutputSize-1] = 0xF2;
+
+ Save_Rip_Special ( "ByteKiller Clone FLT Exe-file", BKCloneFLT, Amiga_EXE_Header_Block , 36 );
+ free ( Amiga_EXE_Header_Block );
+ }
+ else
+ {
+ PW_Start_Address -= 36;
+ Save_Rip ( "ByteKiller Clone FLT Exe-file", BKCloneFLT );
+ }
+
+ if ( Save_Status == GOOD )
+ PW_i += 37;
+}
+
+void Rip_BKClone5 ( void )
+{
+ /* PW_l is still the whole size */
+
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
+
+ OutputSize = PW_l + 36; /* + 36 for header/footer sizes */
+
+ CONVERT = BAD;
+
+ if ( Amiga_EXE_Header == BAD )
+ {
+ OutputSize -= 32;
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
+ BZERO ( Amiga_EXE_Header_Block , 32 );
+ Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
+ Amiga_EXE_Header_Block[3] = 0xF3;
+ Amiga_EXE_Header_Block[11] = 0x01;
+ Amiga_EXE_Header_Block[27] = 0xE9;
+
+ /* WARNING !!! WORKS ONLY ON PC !!! */
+ /* 68k machines code : c1 = *(Whatever+2); */
+ /* 68k machines code : c2 = *(Whatever+3); */
+ PW_j = PW_l - 36;
+ PW_j /= 4;
+ Whatever = (uint8_t *) &PW_j;
+ Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
+ Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
+ Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
+ Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[31] = *Whatever;
+ Save_Rip_Special ( "Unknown ByteKiller Clone 5 Exe-file", BKClone5, Amiga_EXE_Header_Block , 32 );
+ free ( Amiga_EXE_Header_Block );
+ }
+ else
+ {
+ PW_Start_Address -= 32;
+ Save_Rip ( "Unknown ByteKiller Clone 5 Exe-file", BKClone5 );
+ }
+
+ if ( Save_Status == GOOD )
+ PW_i += 36; /* 32 should do but call it "just to be sure" :) */
+}
#include "globals.h"
#include "extern.h"
-short testKRIS ( void )
+int16_t testKRIS ( void )
{
/* test 1 */
if ( (PW_i<952) || ((PW_Start_Address+977)>PW_in_size) )
/*
* Update: 20/12/2000
* - debug .. correct size calculated now.
+ * Update: 01/09/2010
+ * - debug .. pattern data size scan only on patternlist size
*/
void Rip_KRIS ( void )
{
/*printf ("\nKRIS:smpsiz:%ld\n", PW_WholeSampleSize);*/
PW_l = 0;
/*printf ("KRIS:");*/
- for ( PW_k=0 ; PW_k<512 ; PW_k++ )
+
+ /* 20100901 : 128 replaced by patternlist size */
+ for ( PW_k=0 ; PW_k<(in_data[PW_Start_Address+956]*4) ; PW_k++ )
{
/*printf ( "%2x-%2x ",in_data[PW_Start_Address+958+PW_k*2],in_data[PW_Start_Address+959+PW_k*2]);*/
if ( (in_data[PW_Start_Address+958+PW_k*2]*256)+in_data[PW_Start_Address+959+PW_k*2] > PW_l )
Save_Rip ( "KRIS Tracker module", KRIS_tracker );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 954); /* 953 should do but call it "just to be sure" :) */
+ PW_i += 954; /* 953 should do but call it "just to be sure" :) */
}
void Depack_KRIS ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00;
- Uchar poss[37][2];
- Uchar Max=0x00;
- Uchar Note,Smp,Fx,FxVal;
- Uchar TrackData[512][256];
- Uchar PatternTableSize=0x00;
- Uchar PatternTable[128];
- short TrackAddressTable[128][4];
- long i=0,j=0,k=0;
- long WholeSampleSize=0;
- long Where = PW_Start_Address;
- short MaxTrackAddress=0;
- FILE *out; /*,*debug;*/
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t TrackData[512][256];
+ uint8_t PatternTableSize=0x00;
+ uint8_t PatternTable[128];
+ int16_t TrackAddressTable[128][4];
+ int32_t i=0,j=0,k=0;
+ int32_t WholeSampleSize=0;
+ int32_t Where = PW_Start_Address;
+ int16_t MaxTrackAddress=0;
+ FILE *out;
+ /*FILE *debug;*/
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
+ /*debug = fopen ( "debug.txt" , "w+b" );*/
fillPTKtable(poss);
BZERO ( TrackData , 512*256 );
BZERO ( PatternTable , 128 );
-/* debug = fopen ( "debug" , "w+b" );*/
/* title */
fwrite ( &in_data[Where] , 20 , 1 , out );
Where += 22; /* 20 + 2 */
/* 31 samples */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO (Whatever , 1024);
for ( i=0 ; i<31 ; i++ )
{
/* pattern table (read,count and write) */
c1 = 0x00;
k=0;
- for ( i=0 ; i<128 ; i++ , k++ )
+ for ( i=0 ; i<PatternTableSize ; i++ , k++ )
{
/*fprintf ( debug , "%-2ld" , i );*/
for ( j=0 ; j<4 ; j++ )
}
Max = c1;
+ c1 = 0x00;
+ while (i++<128)
+ {
+ fwrite (&c1,1,1,out);
+ Where += 8;
+ }
/*printf ( "Number of patterns : %d\n" , Max );*/
/* ptk ID */
for ( j=0 ; j<256 ; j++ )
Whatever[j] = in_data[Where+j];
Where += 256;
+ /*printf ("[track %ld] (%ld)\n",i,Where);*/
for ( j=0 ; j<64 ; j++ )
{
fflush ( out );
fclose ( out );
-/* fclose ( debug );*/
+ /*fclose ( debug );*/
printf ( "done\n" );
return; /* useless ... but */
#include "extern.h"
-short testcrunchmaniaAddr ( void )
+/* 20091203 - update with yet another case */
+int16_t testcrunchmaniaAddr ( int PW_case )
{
/*PW_Start_Address = PW_i - 4;*/
PW_Start_Address = PW_i;
- if ( (in_data[PW_Start_Address+32] != 0x6F ) ||
- (in_data[PW_Start_Address+33] != 0x14 ) ||
- (in_data[PW_Start_Address+34] != 0x26 ) ||
- (in_data[PW_Start_Address+35] != 0x4A ) ||
- (in_data[PW_Start_Address+36] != 0x49 ) ||
- (in_data[PW_Start_Address+37] != 0xE9 ) ||
- (in_data[PW_Start_Address+42] != 0xE4 ) ||
- (in_data[PW_Start_Address+43] != 0x8F ) ||
- (in_data[PW_Start_Address+44] != 0x52 ) ||
- (in_data[PW_Start_Address+45] != 0x87 ) ||
- (in_data[PW_Start_Address+46] != 0x24 ) ||
- (in_data[PW_Start_Address+47] != 0x4C ) ||
- (in_data[PW_Start_Address+48] != 0x28 ) ||
- (in_data[PW_Start_Address+49] != 0xDB ) ||
- (in_data[PW_Start_Address+50] != 0x53 ) ||
- (in_data[PW_Start_Address+51] != 0x87 ) ||
- (in_data[PW_Start_Address+52] != 0x66 ) ||
- (in_data[PW_Start_Address+53] != 0xFA ) )
- { /* another case ...*/
- if ( (in_data[PW_Start_Address+36] != 0x22 ) ||
- (in_data[PW_Start_Address+37] != 0x1A ) ||
- (in_data[PW_Start_Address+38] != 0x24 ) ||
- (in_data[PW_Start_Address+39] != 0x1A ) ||
- (in_data[PW_Start_Address+40] != 0x47 ) ||
- (in_data[PW_Start_Address+41] != 0xEA ) )
+ if (PW_case == 1)
+ {
+ if ( (in_data[PW_Start_Address+32] != 0x6F ) ||
+ (in_data[PW_Start_Address+33] != 0x14 ) ||
+ (in_data[PW_Start_Address+34] != 0x26 ) ||
+ (in_data[PW_Start_Address+35] != 0x4A ) ||
+ (in_data[PW_Start_Address+36] != 0x49 ) ||
+ (in_data[PW_Start_Address+37] != 0xE9 ) ||
+ (in_data[PW_Start_Address+42] != 0xE4 ) ||
+ (in_data[PW_Start_Address+43] != 0x8F ) ||
+ (in_data[PW_Start_Address+44] != 0x52 ) ||
+ (in_data[PW_Start_Address+45] != 0x87 ) ||
+ (in_data[PW_Start_Address+46] != 0x24 ) ||
+ (in_data[PW_Start_Address+47] != 0x4C ) ||
+ (in_data[PW_Start_Address+48] != 0x28 ) ||
+ (in_data[PW_Start_Address+49] != 0xDB ) ||
+ (in_data[PW_Start_Address+50] != 0x53 ) ||
+ (in_data[PW_Start_Address+51] != 0x87 ) ||
+ (in_data[PW_Start_Address+52] != 0x66 ) ||
+ (in_data[PW_Start_Address+53] != 0xFA ) )
+ { /* another case ...*/
+ if ( (in_data[PW_Start_Address+36] != 0x22 ) ||
+ (in_data[PW_Start_Address+37] != 0x1A ) ||
+ (in_data[PW_Start_Address+38] != 0x24 ) ||
+ (in_data[PW_Start_Address+39] != 0x1A ) ||
+ (in_data[PW_Start_Address+40] != 0x47 ) ||
+ (in_data[PW_Start_Address+41] != 0xEA ) )
+ {
+ if ( (in_data[PW_Start_Address+36] != 0x00 ) ||
+ (in_data[PW_Start_Address+37] != 0x07 ) ||
+ (in_data[PW_Start_Address+38] != 0xf7 ) ||
+ (in_data[PW_Start_Address+39] != 0x00 ) ||
+ (in_data[PW_Start_Address+40] != 0x20 ) ||
+ (in_data[PW_Start_Address+41] != 0x4c ) )
+ {
+ /* should be enough :))) */
+ /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
+ return BAD;
+ }
+ }
+ }
+ /* packed size */
+ PW_j = ( (in_data[PW_Start_Address+6]*256) +
+ in_data[PW_Start_Address+7] )+10;
+ if ((PW_Start_Address+PW_j) > PW_in_size)
+ {
+ return BAD;
+ }
+
+ PW_l = ( (in_data[PW_Start_Address+PW_j]*256*256*256) +
+ (in_data[PW_Start_Address+PW_j+1]*256*256) +
+ (in_data[PW_Start_Address+PW_j+2]*256) +
+ in_data[PW_Start_Address+PW_j+3] );
+
+ PW_l += (40 + PW_j);
+ if ((PW_l%4) != 0)
+ PW_l += 2;
+
+ }
+ else if (PW_case == 2)
+ {
+ if ( (in_data[PW_Start_Address+36] != 0x00 ) ||
+ (in_data[PW_Start_Address+37] != 0x07 ) ||
+ (in_data[PW_Start_Address+38] != 0xf7 ) ||
+ (in_data[PW_Start_Address+39] != 0x00 ) ||
+ (in_data[PW_Start_Address+40] != 0x20 ) ||
+ (in_data[PW_Start_Address+41] != 0x4c ) )
{
/* should be enough :))) */
/*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
return BAD;
}
+ PW_j = 374;
+ if ((PW_Start_Address+PW_j) > PW_in_size)
+ {
+ return BAD;
+ }
+
+ PW_l = ( (in_data[PW_Start_Address+PW_j]*256*256*256) +
+ (in_data[PW_Start_Address+PW_j+1]*256*256) +
+ (in_data[PW_Start_Address+PW_j+2]*256) +
+ in_data[PW_Start_Address+PW_j+3] );
+ PW_l += 378;
+ if (((PW_l/4)*4) != PW_l)
+ PW_l += 2;
}
+ else
+ return BAD;
- /* packed size */
- PW_j = ( (in_data[PW_Start_Address+6]*256) +
- in_data[PW_Start_Address+7] )+10;
+ if ((PW_Start_Address+PW_j) > PW_in_size)
+ {
+ return BAD;
+ }
PW_l = ( (in_data[PW_Start_Address+PW_j]*256*256*256) +
(in_data[PW_Start_Address+PW_j+1]*256*256) +
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testcrunchmaniaSimple ( void )
+int16_t testcrunchmaniaSimple ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
in_data[PW_Start_Address+367] );
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 48;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[34] = *(Whatever+1);
PW_n += 2;
PW_n += 372;
PW_n /= 4;
- Whatever = (Uchar *) &PW_n;
+ Whatever = (uint8_t *) &PW_n;
Amiga_EXE_Header_Block[20] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = *(Whatever+1);
--- /dev/null
+/*\r
+ Delta Music 1 ("shot in the dark" try)\r
+ 20160309 - Asle\r
+*/\r
+/* testDM1() */\r
+/* Rip_DM1() */\r
+\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testDM1 ( void )\r
+{\r
+ int32_t t[64],a;\r
+ PW_Start_Address = PW_i;\r
+\r
+ /* file size */\r
+ if ( (PW_Start_Address + 104) > PW_in_size )\r
+ {\r
+ /*printf ( "#1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* get track sizes */\r
+ for ( a=0; a<4; a++)\r
+ {\r
+ t[a] = (( in_data[PW_Start_Address+6+(a*4)]*256)+\r
+ in_data[PW_Start_Address+7+(a*4)] );\r
+ if (t[a] > 0x7fff) return BAD;\r
+ }\r
+\r
+ /* get note block size */\r
+ t[4] = (( in_data[PW_Start_Address+22]*256) + in_data[PW_Start_Address+23] );\r
+\r
+\r
+ /* get sounds sizes */\r
+ for ( a=0; a<20; a++)\r
+ {\r
+ t[a+40] = (( in_data[PW_Start_Address+25+(a*4)]*256*256)+\r
+ ( in_data[PW_Start_Address+26+(a*4)]*256)+\r
+ in_data[PW_Start_Address+27+(a*4)] );\r
+ if (t[a+40] > 0xffff) return BAD;\r
+ }\r
+\r
+ /* file size */\r
+ PW_l = t[0] + t[1] + t[2] + t[3] + t[4] + 104;\r
+ if ( (PW_Start_Address + PW_l) > PW_in_size)\r
+ {\r
+ printf ( "#1,3 (start:%d) (t[0]:%x)(t[1]:%x)(t[2]:%x)(t[3]:%x)(t[4]:%x)\n" , PW_Start_Address , t[0],t[1],t[2],t[3],t[4]);\r
+ return BAD;\r
+ }\r
+\r
+ for ( a=40; a<60; a++)PW_l += t[a];\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_DM1 ( void )\r
+{\r
+ /* PW_l contains the whole size */\r
+ OutputSize = PW_l;\r
+\r
+ CONVERT = BAD;\r
+ Save_Rip ( "Delta Music 1", DM1 );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
#include "extern.h"
-short testDefjam32 ( void )
+int16_t testDefjam32 ( void )
{
PW_Start_Address = PW_i-2;
in_data[PW_Start_Address+23] );
PW_l += 692;
+ /*printf ( "testdefjam32():%ld (start:%ld)",PW_l,PW_Start_Address );*/
if ( PW_i >= 32 )
{
}
-short testDefjam32pro ( void )
+int16_t testDefjam32pro ( void )
{
PW_Start_Address = PW_i;
}
-short testDefjam32t ( void )
+int16_t testDefjam32t ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[31] = *Whatever;
- /* also the last 4 bytes are 'removed' frequently ... Here they are */
- in_data[PW_Start_Address+OutputSize-4] = 0x00;
- in_data[PW_Start_Address+OutputSize-3] = 0x00;
- in_data[PW_Start_Address+OutputSize-2] = 0x03;
- in_data[PW_Start_Address+OutputSize-1] = 0xF2;
-
Save_Rip_Special ( "Defjam Cruncher 3.2 / pro / t Exe-file", Defjam_32, Amiga_EXE_Header_Block , 32 );
free ( Amiga_EXE_Header_Block );
}
#include "extern.h"
-short testDigiBooster17 ( void )
+int16_t testDigiBooster17 ( void )
{
PW_Start_Address = PW_i;
#include "extern.h"
-short testDI ( void )
+int16_t testDI ( void )
{
/* test #1 */
if ( PW_i < 17 )
* - removed open() (and other fread()s and the like)
* - general Speed & Size Optmizings
* 20051002 : testing fopen()
+ * 20100119 : cleaned up a bit - header is one fwrite.
*/
void Depack_DI ( void )
{
- Uchar Note,Smp,Fx,FxVal;
- Uchar poss[37][2];
- Uchar *Whatever;
- long i=0,k=0;
- Ushort Pattern_Addresses_Table[128];
- long Add_Pattern_Table=0;
- long Add_Pattern_Data=0;
- long Add_Sample_Data=0;
- long Total_Sample_Size=0;
- long Where = PW_Start_Address;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t poss[37][2];
+ uint8_t *Whatever, c1;
+ int32_t i=0,k=0;
+ uint16_t Pattern_Addresses_Table[128];
+ int32_t Add_Pattern_Table=0;
+ int32_t Add_Pattern_Data=0;
+ int32_t Add_Sample_Data=0;
+ int32_t Total_Sample_Size=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
fillPTKtable(poss);
BZERO ( Pattern_Addresses_Table , 128*2 );
/* title */
- Whatever = (Uchar *) malloc (1024);
- BZERO ( Whatever , 1024 );
- fwrite ( Whatever , 20 , 1 , out );
+ Whatever = (uint8_t *) malloc (1085);
+ BZERO ( Whatever , 1085 );
k = (in_data[Where]*256)+in_data[Where+1];
Where += 2;
(in_data[Where+2]*256)+
in_data[Where+3];
Where += 4;
- /*printf ( "Pattern table address : %ld\n" , Add_Pattern_Table );*/
+ /*printf ( "Pattern table address : %d\n" , Add_Pattern_Table );*/
Add_Pattern_Data = (in_data[Where+1]*256*256)+
(in_data[Where+2]*256)+
in_data[Where+3];
Where += 4;
- /*printf ( "Pattern data address : %ld\n" , Add_Pattern_Data );*/
+ printf ( "Pattern data address : %d\n" , Add_Pattern_Data );
Add_Sample_Data = (in_data[Where+1]*256*256)+
(in_data[Where+2]*256)+
in_data[Where+3];
Where += 4;
- /*printf ( "Sample data address : %ld\n" , Add_Sample_Data );*/
+ printf ( "Sample data address : %d\n" , Add_Sample_Data );
for ( i=0 ; i<k ; i++ )
{
- fwrite ( Whatever , 22 , 1 , out );
-
Total_Sample_Size += (((in_data[Where]*256)+in_data[Where+1])*2);
- fwrite ( &in_data[Where] , 8 , 1 , out );
+ Whatever[i*30 + 42] = in_data[Where];
+ Whatever[i*30 + 43] = in_data[Where+1];
+ Whatever[i*30 + 44] = in_data[Where+2];
+ Whatever[i*30 + 45] = in_data[Where+3];
+ Whatever[i*30 + 46] = in_data[Where+4];
+ Whatever[i*30 + 47] = in_data[Where+5];
+ Whatever[i*30 + 48] = in_data[Where+6];
+ Whatever[i*30 + 49] = in_data[Where+7];
Where += 8;
}
- /*printf ( "Whole sample size : %ld\n" , Total_Sample_Size );*/
+ /*printf ( "Whole sample size : %d\n" , Total_Sample_Size );*/
- Whatever[29] = 0x01;
for ( i=k ; i<31 ; i++ )
- fwrite ( Whatever , 30 , 1 , out );
+ Whatever[i*30 + 49] = 0x01;;
k = Where;
Where = PW_Start_Address + Add_Pattern_Table;
i=0;
- do
- {
- Whatever[200] = in_data[Where++];
- Whatever[i]=Whatever[200];
- i+=1;
- }while ( Whatever[200] != 0xff );
- Whatever[i-1] = 0x00;
- Whatever[257] = i-1;
- fwrite ( &Whatever[257] , 1 , 1 , out );
-
- Whatever[256] = 0x7f;
- fwrite ( &Whatever[256] , 1 , 1 , out );
-
- Whatever[256] = 0;
- for ( i=0 ; i<128 ; i++ )
+ c1 = 0x00;
+ while ( in_data[Where] != 0xff )
{
- if ( Whatever[i] > Whatever[256] )
- Whatever[256] = Whatever[i];
+ Whatever[i+952]=in_data[Where];
+ if (in_data[Where] > c1)
+ c1 = in_data[Where];
+ i+=1;Where += 1;
}
- fwrite ( Whatever , 128 , 1 , out );
+ Whatever[950] = (uint8_t)i;
+ Whatever[951] = 0x7f;
+
+ printf ( "\nHighest pattern number : %d (Where:%x)\n" , c1,Where );
- /*printf ( "Number of pattern : %d\n" , Whatever[257] );*/
- /*printf ( "Highest pattern number : %d\n" , Whatever[256] );*/
+ Whatever[1080] = 'M';
+ Whatever[1081] = '.';
+ Whatever[1082] = 'K';
+ Whatever[1083] = '.';
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
- Whatever[3] = '.';
- fwrite ( Whatever , 4 , 1 , out );
+ fwrite ( Whatever , 1084 , 1 , out );
Where = k;
- for ( i=0 ; i<=Whatever[256] ; i++ )
+ for ( i=0 ; i<=c1 ; i++ )
{
Pattern_Addresses_Table[i] = (in_data[Where]*256)+in_data[Where+1];
Where += 2;
}
- for ( i=0 ; i<=Whatever[256] ; i++ )
+ for ( i=0 ; i<=c1 ; i++ )
{
Where = PW_Start_Address + Pattern_Addresses_Table[i];
for ( k=0 ; k<256 ; k++ ) /* 256 = 4(voices) * 64(rows) */
if ( (Whatever[10] & 0x80) == 0 )
{
Whatever[11] = in_data[Where++];
- Note = ( ((Whatever[10] << 4) & 0x30) | ( ( Whatever[11]>>4 ) & 0x0f ) );
- Whatever[0] = poss[Note][0];
- Whatever[1] = poss[Note][1];
- Smp = (Whatever[10] >> 2) & 0x1f;
- Whatever[0] |= (Smp & 0xf0);
- Whatever[2] = (Smp << 4) & 0xf0;
- Fx = Whatever[11] & 0x0f;
- Whatever[2] |= Fx;
- FxVal = 0x00;
- Whatever[3] = FxVal;
- fwrite ( Whatever , 4 , 1 , out );
- continue;
+ Note = ( ((Whatever[10] << 4) & 0x30) | ( ( Whatever[11]>>4 ) & 0x0f ) );
+ Whatever[0] = poss[Note][0];
+ Whatever[1] = poss[Note][1];
+ Smp = (Whatever[10] >> 2) & 0x1f;
+ Whatever[0] |= (Smp & 0xf0);
+ Whatever[2] = (Smp << 4) & 0xf0;
+ Fx = Whatever[11] & 0x0f;
+ Whatever[2] |= Fx;
+ FxVal = 0x00;
+ Whatever[3] = FxVal;
+ fwrite ( Whatever , 4 , 1 , out );
+ continue;
}
if ( Whatever[10] == 0xff )
{
Whatever[0] = Whatever[1] = Whatever[2] = Whatever[3] = 0x00;
- fwrite ( Whatever , 4 , 1 , out );
- continue;
+ fwrite ( Whatever , 4 , 1 , out );
+ continue;
}
Whatever[11] = in_data[Where++];
Whatever[12] = in_data[Where++];
#include "extern.h"
-short testDoubleAction10 ( void )
+int16_t testDoubleAction10 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
-/* Uchar * Amiga_EXE_Header_Block;*/
+/* uint8_t * Amiga_EXE_Header_Block;*/
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
/* OutputSize -= 24; */
-/* Amiga_EXE_Header_Block = (Uchar *) malloc ( 24 ); */
+/* Amiga_EXE_Header_Block = (uint8_t *) malloc ( 24 ); */
/* BZERO ( Amiga_EXE_Header_Block , 24 ); */
/* Amiga_EXE_Header_Block[2] = 0x03; */
/* Amiga_EXE_Header_Block[3] = 0xF3; */
/* Save_Rip_Special ( "Double Action 1.0 Exe-file", Double_Action, Amiga_EXE_Header_Block , 24 ); */
/* free ( Amiga_EXE_Header_Block ); */
- printf ("Double Action 1.0 Exe-file without header detected at %ld. Can't rebuild it, sorry\n", PW_Start_Address);
+ printf ("Double Action 1.0 Exe-file without header detected at %d. Can't rebuild it, sorry\n", PW_Start_Address);
}
else
{
#include "extern.h"
-short testDragpack100 ( void )
+int16_t testDragpack100 ( void )
{
PW_Start_Address = PW_i;
(in_data[PW_Start_Address+17] != 0x18 ) ||
(in_data[PW_Start_Address+18] != 0x22 ) ||
(in_data[PW_Start_Address+19] != 0x18 ) ||
- (in_data[PW_Start_Address+22] != 0x2A ) ||
- (in_data[PW_Start_Address+23] != 0x18 ) ||
- (in_data[PW_Start_Address+24] != 0x24 ) ||
- (in_data[PW_Start_Address+25] != 0x49 ) ||
- (in_data[PW_Start_Address+26] != 0xD1 ) ||
- (in_data[PW_Start_Address+27] != 0xC0 ) ||
- (in_data[PW_Start_Address+30] != 0xD5 ) ||
- (in_data[PW_Start_Address+31] != 0xC1 ) )
+ (in_data[PW_Start_Address+20] != 0x2A ) ||
+ (in_data[PW_Start_Address+21] != 0x18 ) ||
+ (in_data[PW_Start_Address+22] != 0x24 ) ||
+ (in_data[PW_Start_Address+23] != 0x49 ) ||
+ (in_data[PW_Start_Address+24] != 0xD1 ) ||
+ (in_data[PW_Start_Address+25] != 0xC0 ) ||
+ (in_data[PW_Start_Address+26] != 0xD5 ) ||
+ (in_data[PW_Start_Address+27] != 0xC1 ) )
{
/* should be enough :))) */
/*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 40;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 40 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 40 );
BZERO ( Amiga_EXE_Header_Block , 40 );
Amiga_EXE_Header_Block[2] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 804;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[24] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[25] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[26] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
else
{
PW_Start_Address -= 40;
- Save_Rip ( "DragPack 1.00 Exe-file", ByteKiller );
+ Save_Rip ( "DragPack 1.00 Exe-file", DragPack100 );
}
if ( Save_Status == GOOD )
#include "extern.h"
-short testDragpack252 ( void )
+int16_t testDragpack252 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
* (30/08/10)
* changed #4.3 as the "remaining" patternlist isn't always 0x00
*/
-short testEUREKA ( void )
+int16_t testEUREKA ( void )
{
/* test 1 */
if ( (PW_i < 45) || ((PW_Start_Address+950)>=PW_in_size) )
void Depack_EUREKA ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00;
- Uchar Pat_Max=0x00;
- long Sample_Start_Address=0;
- long WholeSampleSize=0;
- long Track_Address[128][4];
- long i=0,j=0,k;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t c1=0x00;
+ uint8_t Pat_Max=0x00;
+ int32_t Sample_Start_Address=0;
+ int32_t WholeSampleSize=0;
+ int32_t Track_Address[128][4];
+ int32_t i=0,j=0,k;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read header ... same as ptk */
/*printf ( "Number of patterns : %d\n" , Pat_Max );*/
/* write ptk's ID */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
Whatever[0] = 'M';
Whatever[1] = '.';
#include "extern.h"
-short testFC_M ( void )
+int16_t testFC_M ( void )
{
/* test 1 */
PW_Start_Address = PW_i;
*/
void Depack_FC_M ( void )
{
- Uchar *Whatever;
- long i=0;
- long WholeSampleSize=0;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ int32_t i=0;
+ int32_t WholeSampleSize=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* bypass "FC-M" ID */
Where += 34;
/* read and write sample descriptions */
- Whatever = (Uchar *)malloc(256);
+ Whatever = (uint8_t *)malloc(256);
BZERO ( Whatever , 256 );
for ( i=0 ; i<31 ; i++ )
{
}
/*printf ( "Whole sample size : %ld\n" , WholeSampleSize );*/
- /* bypass "LONG" chunk */
+ /* bypass "int32_t " chunk */
Where += 4;
/* read and write pattern table lenght */
#include "extern.h"
-short testXM ( void )
+int16_t testXM ( void )
{
/* test #1 */
PW_Start_Address = PW_i;
/* getting siz of one pattern */
PW_m = (in_data[PW_Start_Address+PW_l+8]*256) + in_data[PW_Start_Address+PW_l+7];
/* adding it to current pointer + 9 being the pat header siz */
+ fflush (stdout);
PW_l += (PW_m + 9);
}
/* get whole insts data siz */
for ( PW_o=0 ; PW_o<PW_k ; PW_o++ )
{
- long siz=0;
+ int32_t siz=0;
/* getting siz of one inst header */
PW_m = (in_data[PW_Start_Address+PW_l+1]*256) + in_data[PW_Start_Address+PW_l];
/* getting nbr of samples in this inst */
PW_j = (in_data[PW_Start_Address+PW_l+28]*256) + in_data[PW_Start_Address+PW_l+27];
/* getting sizes of samples */
+ /*printf ("inst %ld at %lx (inst:%ld)\n",(long)PW_o, (long)(PW_Start_Address+PW_l), (long)PW_j);*/
+ if (PW_j>16)break;
PW_l += PW_m; /* so that it points on first sample header */
for ( PW_n=0 ; PW_n<PW_j ; PW_n++ )
{
(in_data[PW_Start_Address+PW_l+1]*256) +
in_data[PW_Start_Address+PW_l]);
/* move pointer onto the next sample header if one exists*/
+ /*printf ("- smp %ld at %lx size is %lx\n",(long)PW_n, (long)(PW_Start_Address+PW_l), (long)siz );*/
PW_l += 40;
}
/* add sample datas of this instrument now */
-short testFuchsTracker ( void )
+int16_t testFuchsTracker ( void )
{
/* test #1 */
if ( PW_i<192 )
/* PW_m is the size of all samples (in descriptions) */
/* PW_k is the highest pattern data -1 */
- /* input file not long enough ? */
+ /* input file not int32_t enough ? */
PW_k += 1;
PW_k *= 1024;
if ( (PW_k+200) > PW_in_size )
void Depack_FuchsTracker ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00;
- long WholeSampleSize=0;
- long SampleSizes[16];
- long LoopStart[16];
- unsigned long i=0,j=0,k;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t c1=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t SampleSizes[16];
+ int32_t LoopStart[16];
+ uint32_t i=0,j=0,k;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
BZERO ( SampleSizes , 16*4 );
BZERO ( LoopStart , 16*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* write empty ptk header */
- Whatever = (Uchar *) malloc ( 1080 );
+ Whatever = (uint8_t *) malloc ( 1080 );
BZERO ( Whatever , 1080 );
fwrite ( Whatever , 1080 , 1 , out );
j /= 2;
/* use of htonl() suggested by Xigh !.*/
k = htonl(j);
- Whatever[0] = *((Uchar *)&k+2);
- Whatever[1] = *((Uchar *)&k+3);
+ Whatever[0] = *((uint8_t *)&k+2);
+ Whatever[1] = *((uint8_t *)&k+3);
fwrite ( Whatever , 2 , 1 , out );
}
/* read pattern data */
free ( Whatever );
- Whatever = (Uchar *) malloc ( j );
+ Whatever = (uint8_t *) malloc ( j );
/* convert shits */
for ( i=0 ; i<j ; i+=4 )
#include "extern.h"
-short testFC13 ( void )
+int16_t testFC13 ( void )
{
PW_Start_Address = PW_i;
#include "globals.h"
#include "extern.h"
-short testFC14 ( void )
+int16_t testFC14 ( void )
{
PW_Start_Address = PW_i;
#include "extern.h"
-short testFUZZAC ( void )
+int16_t testFUZZAC ( void )
{
PW_Start_Address = PW_i;
void Depack_Fuzzac ( void )
{
- Uchar c5;
- Uchar PatPos;
- Uchar *Whatever;
- Uchar NbrTracks;
- Uchar Track_Numbers[128][16];
- Uchar Track_Numbers_Real[128][4];
- Uchar Track_Datas[4][256];
- Uchar Status=ON;
- long WholeSampleSize=0;
- long i,j,k,l;
- long Where = PW_Start_Address;
+ uint8_t c5;
+ uint8_t PatPos;
+ uint8_t *Whatever;
+ uint8_t NbrTracks;
+ uint8_t Track_Numbers[128][16];
+ uint8_t Track_Numbers_Real[128][4];
+ uint8_t Track_Datas[4][256];
+ uint8_t Status=ON;
+ int32_t WholeSampleSize=0;
+ int32_t i,j,k,l;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
BZERO ( Track_Numbers , 128*16 );
BZERO ( Track_Numbers_Real , 128*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* bypass ID */
Where += 6;
/* write title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
#include "globals.h"
#include "extern.h"
-
-short testGMC ( void )
+/*
+ * 20100902 - some test enhancements - less fake
+*/
+int16_t testGMC ( void )
{
/* test #1 */
if ( (PW_i<7) || ((PW_Start_Address+444)>PW_in_size) )
}
PW_Start_Address = PW_i-7;
+
/* samples descriptions */
PW_WholeSampleSize=0;
PW_j=0;
{
for ( PW_n=0 ; PW_n<256 ; PW_n++ )
{
- if ( ( in_data[PW_Start_Address+444+PW_k*1024+PW_n*4] > 0x03 ) ||
- ( (in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0x0f) >= 0x90 ))
+ if ( in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)] > 0x03 )
{
-/*printf ( "#5,0 Start:%ld (PW_k:%ld)\n" , PW_Start_Address , PW_k);*/
- return BAD;
+/*printf ( "#5,0 Start:%d (PW_k:%d)(where:%d)\n" , PW_Start_Address , PW_k,PW_Start_Address+444+(PW_k*1024)+(PW_n*4) );*/
+ return BAD;
+ }
+ /* 20010902:new test if note pitch too small */
+ if ( (in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)] == 0x00) &&
+ (in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)+1] < 0x71) &&
+ (in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)+1] > 0x00) )
+ {
+/*printf ( "#5,0,1 Start:%d (PW_k:%d)(PW_n:%d)(pitch:%x-%x)\n"
+ , PW_Start_Address , PW_k,PW_n,in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)],in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)+1]);*/
+ return BAD;
+ }
+ /* 20100902 - wrong test with 0x90 instead of 0x09 - less fake found now */
+ if ( ((in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)+2]&0x0f) >= 0x09 ) &&
+ ((in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)+2]&0x0f) != 0x0f ) )
+ {
+/*printf ( "#5,0,2 Start:%d (PW_k:%d)(PW_n:%d)(fx:%x)(Where:%d)\n"
+ , PW_Start_Address , PW_k,PW_n,in_data[PW_Start_Address+444+(PW_k*1024)+(PW_n*4)+2],444+(PW_k*1024)+(PW_n*4)+2);*/
+ return BAD;
}
/* 20100822 - following test is removed as there seem to exist GMC with
sample number higher than the actual number of sample saved ...
printf ( "#5,1 Start:%ld (PW_j:%ld) (where:%ld) (value:%x)\n"
, PW_Start_Address , PW_j , PW_Start_Address+444+PW_k*1024+PW_n*4+2
, ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0xf0)>>4) );
- return BAD;
+ return BAD;
}*/
/* test volume effect if value is > 64 */
if ( ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0x0f) == 3) &&
(in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3] > 0x64) )
{
-/*printf ( "#5,2 Start:%ld (PW_j:%ld)\n" , PW_Start_Address , PW_j);*/
- return BAD;
+/*printf ( "#5,2 Start:%d (PW_j:%d)\n" , PW_Start_Address , PW_j);*/
+ return BAD;
}
if ( ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0x0f) == 4) &&
(in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3] > 0x63) )
{
-/*printf ( "#5,3 Start:%ld (PW_j:%ld)\n" , PW_Start_Address , PW_j);*/
- return BAD;
+/*printf ( "#5,3 Start:%d (PW_j:%d)\n" , PW_Start_Address , PW_j);*/
+ return BAD;
}
if ( ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0x0f) == 5) &&
(in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3] > PW_o+1) )
{
-/*printf ( "#5,4 Start:%ld (effect:5)(PW_o:%ld)(4th note byte:%x)\n" , PW_Start_Address , PW_j , in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3]);*/
- return BAD;
+/*printf ( "#5,4 Start:%d (effect:5)(PW_o:%d)(4th note byte:%x)\n" , PW_Start_Address , PW_j , in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3]);*/
+ return BAD;
}
if ( ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0x0f) == 6) &&
(in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3] >= 0x02) )
{
-/*printf ( "#5,5 Start:%ld (at:%ld)\n" , PW_Start_Address , PW_Start_Address+444+PW_k*1024+PW_n*4+3 );*/
- return BAD;
+/*printf ( "#5,5 Start:%d (at:%d)\n" , PW_Start_Address , PW_Start_Address+444+PW_k*1024+PW_n*4+3 );*/
+ return BAD;
}
if ( ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+2]&0x0f) == 7) &&
(in_data[PW_Start_Address+444+PW_k*1024+PW_n*4+3] >= 0x02) )
{
-/*printf ( "#5,6 Start:%ld (at:%ld)\n" , PW_Start_Address , PW_Start_Address+444+PW_k*1024+PW_n*4+3 );*/
- return BAD;
+/*printf ( "#5,6 Start:%d (at:%d)\n" , PW_Start_Address , PW_Start_Address+444+PW_k*1024+PW_n*4+3 );*/
+ return BAD;
}
if ( ((in_data[PW_Start_Address+444+PW_k*1024+PW_n*4]&0x0f) > 0x00) || (in_data[PW_Start_Address+445+PW_k*1024+PW_n*4] > 0x00) )
- PW_m = 1;
+ PW_m = 1;
}
}
if ( PW_m == 0 )
void Depack_GMC ( void )
{
- Uchar *Whatever;
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc ( 1084 );
+ Whatever = (uint8_t *) malloc ( 1084 );
BZERO ( Whatever , 1084 );
/* read and write whole header */
{
switch ( Whatever[(j*4)+2]&0x0f )
{
+ case 0: /* no fx -> empty fxval */
+ Whatever[(j*4)+3] = 0x00;
+ break;
case 3: /* replace by C */
Whatever[(j*4)+2] += 0x09;
break;
#include "extern.h"
-short testGNUPacker12 ( void )
+int16_t testGNUPacker12 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testGPMO ( void )
+int16_t testGPMO ( void )
{
/* test 1 */
if ( PW_i < 1080 )
void Depack_GPMO ( void )
{
- Uchar *Whatever;
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0;
- long Where=PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0;
+ int32_t Where=PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* get whole sample size and patch vols (/2)*/
Where += 952;
/* write ID */
- Whatever = (Uchar *) malloc (4);
+ Whatever = (uint8_t *) malloc (4);
Whatever[0] = 'M';
Whatever[1] = '.';
Whatever[2] = 'K';
#include "extern.h"
-short testGnuPlayer ( void )
+int16_t testGnuPlayer ( void )
{
/* test #1 */
if ( PW_i < 0x92 )
void Depack_GnuPlayer ( void )
{
- Uchar *Whatever;
- long i=0,j=0,k=0,l=0;
- long Where = PW_Start_Address;
- Uchar * Pattern;
- Uchar poss[37][2];
+ uint8_t *Whatever;
+ int32_t i=0,j=0,k=0,l=0;
+ int32_t Where = PW_Start_Address;
+ uint8_t * Pattern;
+ uint8_t poss[37][2];
FILE *out;/*,*info;*/
- long SizOfTrack,len1,len2;
- long SmpSizes[31];
- long NbrSmp = 0;
- short SfxNbr=0;
+ int32_t SizOfTrack,len1,len2;
+ int32_t SmpSizes[31];
+ int32_t NbrSmp = 0;
+ int16_t SfxNbr=0;
if ( Save_Status == BAD )
return;
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*info = fopen ( "info", "w+b" );*/
*/
/*take care of pattern right now*/
- Pattern = (Uchar *) malloc (65536);
+ Pattern = (uint8_t *) malloc (65536);
BZERO (Pattern, 65536);
- Where = PW_Start_Address + 0x96;
+ Where += 0x96;
/* track 1 & 2 */
SizOfTrack = (in_data[Where]*256) + in_data[Where+1]; /* size of track 1 */
/*fprintf ( info, "Size of track 1 : %ld (%x)\n", SizOfTrack,SizOfTrack );*/
switch (in_data[Where+i])
{
case 0: /* track end */
- /*fprintf ( info, "[%3ld][%4ld] <-- end of track\n\n", i,l );*/
- i = SizOfTrack;
- break;
+ /*fprintf ( info, "[%3ld][%4ld] <-- end of track\n\n", i,l );*/
+ i = SizOfTrack;
+ break;
case 1: /* set volume */
- SfxNbr += 1;
- /*fprintf ( info, "[%3ld][%4ld] C fx (arg:%2d) [sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
- Pattern[l+2] |= 0x0C;
- Pattern[l+3] = in_data[Where+1+i];
- Pattern[l+6] |= 0x0C;
- Pattern[l+7] = in_data[Where+1+i];
- break;
+ SfxNbr += 1;
+ /*fprintf ( info, "[%3ld][%4ld] C fx (arg:%2d) [sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
+ Pattern[l+2] |= 0x0C;
+ Pattern[l+3] = in_data[Where+1+i];
+ Pattern[l+6] |= 0x0C;
+ Pattern[l+7] = in_data[Where+1+i];
+ break;
case 2: /* same a A */
- SfxNbr += 1;
- /*fprintf ( info, "[%3ld][%4ld] A fx (arg:%2d) [sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
- Pattern[l+2] += 0x0A;
- Pattern[l+3] = in_data[Where+1+i];
- Pattern[l+6] += 0x0A;
- Pattern[l+7] = in_data[Where+1+i];
- break;
+ SfxNbr += 1;
+ /*fprintf ( info, "[%3ld][%4ld] A fx (arg:%2d) [sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
+ Pattern[l+2] += 0x0A;
+ Pattern[l+3] = in_data[Where+1+i];
+ Pattern[l+6] += 0x0A;
+ Pattern[l+7] = in_data[Where+1+i];
+ break;
case 3: /* set speed */
- SfxNbr += 1;
- /*fprintf ( info, "[%3ld][%4ld] F fx (arg:%2d) [sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
- if ( SfxNbr == 1 )
- {
- Pattern[l+2] |= 0x0f;
- Pattern[l+3] = in_data[Where+1+i];
- }
- else /* if SfxNbr == 3, I'm in trouble :( */
- {
- Pattern[l+6] |= 0x0f;
- Pattern[l+7] = in_data[Where+1+i];
- }
- break;
+ SfxNbr += 1;
+ /*fprintf ( info, "[%3ld][%4ld] F fx (arg:%2d) [sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
+ if ( SfxNbr == 1 )
+ {
+ Pattern[l+2] |= 0x0f;
+ Pattern[l+3] = in_data[Where+1+i];
+ }
+ else /* if SfxNbr == 3, I'm in trouble :( */
+ {
+ Pattern[l+6] |= 0x0f;
+ Pattern[l+7] = in_data[Where+1+i];
+ }
+ break;
case 4: /* bypass rows */
- /*fprintf ( info, "[%3ld][%4ld] bypass rows : %d\n",i,l,in_data[Where+1+i]);*/
- l += (in_data[Where+i+1] * 16);
- SfxNbr = 0;
- break;
+ /*fprintf ( info, "[%3ld][%4ld] bypass rows : %d\n",i,l,in_data[Where+1+i]);*/
+ l += (in_data[Where+i+1] * 16);
+ SfxNbr = 0;
+ break;
case 5: /* set note */
- /*fprintf ( info, "[%3ld][%4ld] set note with smp nbr %d\n",i,l,in_data[Where+1+i]);*/
- Pattern[l] = (in_data[Where+1+i]&0xf0);
- Pattern[l] |= in_data[PW_Start_Address + 0x90];
- Pattern[l+1] = in_data[PW_Start_Address + 0x91];
- Pattern[l+4] = (in_data[Where+1+i]&0xf0);
- Pattern[l+4] |= in_data[PW_Start_Address + 0x90];
- Pattern[l+5] = in_data[PW_Start_Address + 0x91];
- Pattern[l+2] |= (in_data[Where+1+i]<<4);
- Pattern[l+6] |= (in_data[Where+1+i]<<4);
- break;
+ /*fprintf ( info, "[%3ld][%4ld] set note with smp nbr %d\n",i,l,in_data[Where+1+i]);*/
+ Pattern[l] = (in_data[Where+1+i]&0xf0);
+ Pattern[l] |= in_data[PW_Start_Address + 0x90];
+ Pattern[l+1] = in_data[PW_Start_Address + 0x91];
+ Pattern[l+4] = (in_data[Where+1+i]&0xf0);
+ Pattern[l+4] |= in_data[PW_Start_Address + 0x90];
+ Pattern[l+5] = in_data[PW_Start_Address + 0x91];
+ Pattern[l+2] |= (in_data[Where+1+i]<<4);
+ Pattern[l+6] |= (in_data[Where+1+i]<<4);
+ break;
default :
- printf ( "\nunsupported case in Depack_GnuPlayer(). Please send this file to \"asle@free.fr\" :)\n" );
+ printf ( "\nunsupported case in Depack_GnuPlayer(). Please send this file to \"asle@free.fr\" :)\n" );
break;
}
}
switch (in_data[Where+i])
{
case 0: /* track end */
- /*fprintf ( info, "[%3ld][%4ld] <-- end of track\n\n", i,l );*/
- i = SizOfTrack;
- break;
+ /*fprintf ( info, "[%3ld][%4ld] <-- end of track\n\n", i,l );*/
+ i = SizOfTrack;
+ break;
case 1: /* set volume */
- SfxNbr += 1;
- /*fprintf ( info, "[%3ld][%4ld] C fx (arg:%d) [Sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
- Pattern[l+10] |= 0x0C;
- Pattern[l+11] = in_data[Where+1+i];
- Pattern[l+14] |= 0x0C;
- Pattern[l+15] = in_data[Where+1+i];
- break;
+ SfxNbr += 1;
+ /*fprintf ( info, "[%3ld][%4ld] C fx (arg:%d) [Sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
+ Pattern[l+10] |= 0x0C;
+ Pattern[l+11] = in_data[Where+1+i];
+ Pattern[l+14] |= 0x0C;
+ Pattern[l+15] = in_data[Where+1+i];
+ break;
case 2: /* same a A */
- SfxNbr += 1;
- /*fprintf ( info, "[%3ld][%4ld] A fx (arg:%2d) [Sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
- Pattern[l+10] |= 0x0A;
- Pattern[l+11] = in_data[Where+1+i];
- Pattern[l+14] |= 0x0A;
- Pattern[l+15] = in_data[Where+1+i];
- break;
+ SfxNbr += 1;
+ /*fprintf ( info, "[%3ld][%4ld] A fx (arg:%2d) [Sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
+ Pattern[l+10] |= 0x0A;
+ Pattern[l+11] = in_data[Where+1+i];
+ Pattern[l+14] |= 0x0A;
+ Pattern[l+15] = in_data[Where+1+i];
+ break;
case 3: /* set speed */
- SfxNbr += 1;
- /*fprintf ( info, "[%3ld][%4ld] F fx (arg:%2d) [Sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
- if ( SfxNbr == 1 )
- {
- Pattern[l+10] |= 0x0f;
- Pattern[l+11] = in_data[Where+1+i];
- }
- else
- {
- Pattern[l+14] |= 0x0f;
- Pattern[l+15] = in_data[Where+1+i];
- }
- break;
+ SfxNbr += 1;
+ /*fprintf ( info, "[%3ld][%4ld] F fx (arg:%2d) [Sfx %d]\n",i,l,in_data[Where+1+i],SfxNbr);*/
+ if ( SfxNbr == 1 )
+ {
+ Pattern[l+10] |= 0x0f;
+ Pattern[l+11] = in_data[Where+1+i];
+ }
+ else
+ {
+ Pattern[l+14] |= 0x0f;
+ Pattern[l+15] = in_data[Where+1+i];
+ }
+ break;
case 4: /* bypass rows */
- /*fprintf ( info, "[%3ld][%4ld] bypass rows : %d\n",i,l,in_data[Where+1+i]);*/
- l += (in_data[Where+i+1] * 16);
- SfxNbr = 0;
- break;
+ /*fprintf ( info, "[%3ld][%4ld] bypass rows : %d\n",i,l,in_data[Where+1+i]);*/
+ l += (in_data[Where+i+1] * 16);
+ SfxNbr = 0;
+ break;
case 5: /* set note */
- /*fprintf ( info, "[%3ld][%4ld] set note with smp nbr %d\n",i,l,in_data[Where+1+i]);*/
- Pattern[l+8] = (in_data[Where+1+i]&0xf0);
- Pattern[l+8] |= in_data[PW_Start_Address + 0x90];
- Pattern[l+9] = in_data[PW_Start_Address + 0x91];
- Pattern[l+12] = (in_data[Where+1+i]&0xf0);
- Pattern[l+12] |= in_data[PW_Start_Address + 0x90];
- Pattern[l+13] = in_data[PW_Start_Address + 0x91];
- Pattern[l+10] |= (in_data[Where+1+i]<<4);
- Pattern[l+14] |= (in_data[Where+1+i]<<4);
- break;
+ /*fprintf ( info, "[%3ld][%4ld] set note with smp nbr %d\n",i,l,in_data[Where+1+i]);*/
+ Pattern[l+8] = (in_data[Where+1+i]&0xf0);
+ Pattern[l+8] |= in_data[PW_Start_Address + 0x90];
+ Pattern[l+9] = in_data[PW_Start_Address + 0x91];
+ Pattern[l+12] = (in_data[Where+1+i]&0xf0);
+ Pattern[l+12] |= in_data[PW_Start_Address + 0x90];
+ Pattern[l+13] = in_data[PW_Start_Address + 0x91];
+ Pattern[l+10] |= (in_data[Where+1+i]<<4);
+ Pattern[l+14] |= (in_data[Where+1+i]<<4);
+ break;
default :
- printf ( "\nunsupported case in Depack_GnuPlayer(). Please send this file to \"asle@free.fr\" :)\n" );
+ printf ( "\nunsupported case in Depack_GnuPlayer(). Please send this file to \"asle@free.fr\" :)\n" );
break;
}
}
/*fprintf ( info, "\nWhere before first sample : %ld (%x)\n", Where,Where );*/
/* sample header stuff */
- Whatever = (Uchar *) malloc ( 2048 );
+ Whatever = (uint8_t *) malloc ( 2048 );
BZERO (Whatever, 2048);
/*get nbr of non-null samples */
+ l = 0;
for ( i=0 ; i< 31 ; i++)
{
k = (in_data[PW_Start_Address + 20 + (i*4)]*256) + in_data[PW_Start_Address + 21 + (i*4)];
if ( k != 0 )
NbrSmp += 1;
- SmpSizes[i] = k;
+ SmpSizes[i] = k*2;
+ l += SmpSizes[i];
Whatever[22+(i*30)] = in_data[PW_Start_Address + 20 + (i*4)];
Whatever[23+(i*30)] = in_data[PW_Start_Address + 21 + (i*4)];
Whatever[27+(i*30)] = in_data[PW_Start_Address + 23 + (i*4)];
Whatever[29+(i*30)] = 0x01;
}
+ /*printf ("\nwhole sample size : %ld\n",l);*/
k = MAXI(len1,len2);
Whatever[930] = k;
Whatever[931] = 0x7f;
for ( i=0; i<k ;i++ )
- Whatever[i+932] = (Uchar) i;
+ Whatever[i+932] = (uint8_t) i;
Whatever[1060] = 'M';
Whatever[1061] = '.';
Whatever[1062] = 'K';
/* sample stuff */
free ( Whatever );
- Whatever = (Uchar *) malloc (65436);
+ Whatever = (uint8_t *) malloc (65436);
+ /*printf ( "\nNbrSmp : %ld\n",NbrSmp);*/
+ l=0;
for ( i=0 ; i<NbrSmp ; i++ )
{
- long out_end;
+ int32_t out_end;
char samp;
k = 0;
BZERO (Whatever,65536);
j = (in_data[Where]*256) + in_data[Where+1];
Where += 2;
out_end = (j*2);
- /*fprintf ( info, "sample %ld : siz:%ld where:%ld\n" , i,out_end,Where);*/
+ /*printf ( "sample %ld : siz:%ld where:%ld (%ld -> %ld)\n" , i,out_end,Where,l+24636,ftell(out));*/
+ l += SmpSizes[i];
/*fflush ( info );*/
Whatever[k++] = in_data[Where++];
while ( k < out_end )
{
samp = (in_data[Where]>>4)&0x0f;
if ( samp & 0x08 ) samp -= 0x10;
- Whatever[k++] = (Whatever[k-1] + samp);
+ k+=1;
+ Whatever[k] = (Whatever[k-1] + samp);
samp = in_data[Where] & 0x0f;
if ( samp & 0x08 ) samp -= 0x10;
- Whatever[k++] = (Whatever[k-1] + samp);
+ k+=1;
+ Whatever[k] = (Whatever[k-1] + samp);
Where += 1;
}
Where -= 1;
- fwrite ( &Whatever[0], out_end, 1, out );
+ /*printf ("output pos:%ld, sizeout:%ld\n",ftell(out), SmpSizes[i]);*/
+ /*fwrite ( &Whatever[0], out_end, 1, out );*/
+ /*printf ("%ld then ",ftell(out));*/
+ fwrite ( &Whatever[0], SmpSizes[i], 1, out );
+ fflush(out);
+ /*printf ("%ld (%ld)\n",ftell(out),SmpSizes[i]);*/
}
free ( Whatever );
--- /dev/null
+/* testHCD() */\r
+/* Rip_HCD() */\r
+/* Depack_HCD() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testHCD ( void )\r
+{\r
+ /* test 1 */\r
+ if ( PW_i < 1080 )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* test 2 */\r
+ PW_Start_Address = PW_i-1080;\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_k=0 ; PW_k<31 ; PW_k++ )\r
+ {\r
+ /* size */\r
+ PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);\r
+ /* loop start */\r
+ PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2)-0x68A;\r
+ /* loop size */\r
+ PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);\r
+\r
+ if ( test_smps(PW_j*2, PW_m, PW_n, in_data[PW_Start_Address+45+30*PW_k], in_data[PW_Start_Address+44+30*PW_k] ) == BAD )\r
+ {\r
+ /*printf ( "start : %ld\n", PW_Start_Address );*/\r
+ return BAD; \r
+ }\r
+\r
+ PW_WholeSampleSize += PW_j;\r
+ }\r
+ \r
+ /* test #3 pattern list size */\r
+ PW_l = in_data[PW_Start_Address+950];\r
+ if ( (PW_l>127) || (PW_l==0) )\r
+ {\r
+ /*printf ( "#4,0 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ /* PW_l holds the size of the pattern list */\r
+ PW_k=0;\r
+ for ( PW_j=0 ; PW_j<128 ; PW_j++ )\r
+ {\r
+ if ( in_data[PW_Start_Address+952+PW_j] > PW_k )\r
+ PW_k = in_data[PW_Start_Address+952+PW_j];\r
+ if ( in_data[PW_Start_Address+952+PW_j] > 127 )\r
+ {\r
+ /*printf ( "#4,1 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ }\r
+ /* PW_k holds the highest pattern number */\r
+ PW_k += 1;\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_HCD ( void )\r
+{\r
+ OutputSize = (PW_k*1024) + 1084 + PW_WholeSampleSize;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "HCD-Protector module", HCD );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
+\r
+\r
+/*\r
+ * HCD.c 2008 (c) Sylvain "Asle" Chipaux\r
+ \r
+ same header as PTK save for the sample loop start which is +0x0345\r
+ pattern data is <<3\r
+*/\r
+void Depack_HCD ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ uint8_t poss[37][2];\r
+ uint8_t Max=0x00;\r
+ int32_t WholeSampleSize=0;\r
+ int32_t i=0,j=0;\r
+ int32_t Where=PW_Start_Address;\r
+ FILE *out;\r
+\r
+ fillPTKtable(poss);\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ /* header */\r
+ Whatever = (uint8_t *) malloc (2048);\r
+ for ( i=0; i<1084 ; i++ )\r
+ {\r
+ Whatever[i] = in_data[Where+i];\r
+ }\r
+ \r
+ /* fix loop start */\r
+ for (i=46 ; i<950 ; i+=30)\r
+ {\r
+ Whatever[i] -= 0x03;\r
+ Whatever[i+1] -= 0x45;\r
+ WholeSampleSize += (((in_data[Where+i-4]*256)+in_data[Where+i-3])*2);\r
+ }\r
+ \r
+ /*write header*/\r
+ fwrite ( Whatever , 1084 , 1 , out );\r
+\r
+ /* get number of pattern */\r
+ Max = 0x00;\r
+ for ( i=952 ; i<1080 ; i++ )\r
+ {\r
+ if ( Whatever[i] > Max )\r
+ Max = Whatever[i];\r
+ }\r
+ /*printf ( "Number of pattern : %d\n" , Max );*/\r
+\r
+ /* pattern data */\r
+ Where += 1084;\r
+ for ( i=0 ; i<=Max ; i++ )\r
+ {\r
+ for ( j=0 ; j<256 ; j++ )\r
+ {\r
+ /*d = ((uint32_t *) in_data)[0] >> 3;*/\r
+ Whatever[j*4] = in_data[Where]>>3;\r
+ Whatever[j*4+1] = (in_data[Where+1]>>3)|(in_data[Where]<<5);\r
+ Whatever[j*4+2] = (in_data[Where+2]>>3)|(in_data[Where+1]<<5);\r
+ Whatever[j*4+3] = (in_data[Where+3]>>3)|(in_data[Where+2]<<5);\r
+ Where += 4;\r
+ }\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ }\r
+ free ( Whatever );\r
+\r
+\r
+ /* sample data */\r
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );\r
+\r
+\r
+ /* crap */\r
+ Crap ( " HCD Protector " , BAD , BAD , out );\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
+\r
#include "extern.h"
-short testHQCCruncher2 ( void )
+int16_t testHQCCruncher2 ( void )
{
PW_Start_Address = PW_i - 64;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 50;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 60;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
#include "extern.h"
-short testHEATSEEKER ( void )
+int16_t testHEATSEEKER ( void )
{
int nbr_notes=0;
void Depack_HEATSEEKER ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar Pat_Max=0x00;
- Uchar *Whatever;
- long Track_Addresses[512];
- long i=0,j=0,k=0,l=0,m;
- long WholeSampleSize=0;
- long Where = PW_Start_Address;
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;
+ uint8_t Pat_Max=0x00;
+ uint8_t *Whatever;
+ int32_t Track_Addresses[512];
+ int32_t i=0,j=0,k=0,l=0,m;
+ int32_t WholeSampleSize=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
BZERO ( Track_Addresses , 512*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* write title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
--- /dev/null
+/* testHighPressureCruncher() */\r
+/* Rip_HighPressureCruncher() */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testHighPressureCruncher ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+\r
+ if ( (in_data[PW_Start_Address+23] != 0x84 ) ||\r
+ (in_data[PW_Start_Address+24] != 0x28 ) ||\r
+ (in_data[PW_Start_Address+25] != 0x00 ) ||\r
+ (in_data[PW_Start_Address+26] != 0xD5 ) ||\r
+ (in_data[PW_Start_Address+27] != 0xC4 ) ||\r
+ (in_data[PW_Start_Address+28] != 0x61 ) ||\r
+ (in_data[PW_Start_Address+29] != 0x00 ) ||\r
+ (in_data[PW_Start_Address+30] != 0x00 ) ||\r
+ (in_data[PW_Start_Address+31] != 0x7C ) ||\r
+ (in_data[PW_Start_Address+32] != 0xD3 ) ||\r
+ (in_data[PW_Start_Address+33] != 0xC0 ) ||\r
+ (in_data[PW_Start_Address+34] != 0x26 ) ||\r
+ (in_data[PW_Start_Address+35] != 0x00 ) ||\r
+ (in_data[PW_Start_Address+36] != 0x08 ) ||\r
+ (in_data[PW_Start_Address+37] != 0x79 ) ||\r
+ (in_data[PW_Start_Address+38] != 0x00 ) ||\r
+ (in_data[PW_Start_Address+39] != 0x01 ) ||\r
+ (in_data[PW_Start_Address+40] != 0x00 ) ||\r
+ (in_data[PW_Start_Address+41] != 0xBF ) ||\r
+ (in_data[PW_Start_Address+42] != 0xE0 ) ||\r
+ (in_data[PW_Start_Address+43] != 0x01 ) ||\r
+ (in_data[PW_Start_Address+44] != 0x18 ) )\r
+ {\r
+ /* should be enough :))) */\r
+ /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ \r
+ }\r
+\r
+\r
+ /* packed size */\r
+ PW_l = ( (in_data[PW_Start_Address+176]*256*256*256) +\r
+ (in_data[PW_Start_Address+177]*256*256) +\r
+ (in_data[PW_Start_Address+178]*256) +\r
+ in_data[PW_Start_Address+179] );\r
+\r
+ PW_l += 548;\r
+ /*printf ( "testHighPressureCruncher():%ld (start:%ld)",PW_l,PW_Start_Address );*/\r
+\r
+ if ( PW_i >= 36 )\r
+ {\r
+ if ( (in_data[PW_Start_Address-36] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-35] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-34] != 0x03 ) ||\r
+ (in_data[PW_Start_Address-33] != 0xF3 ) ||\r
+ (in_data[PW_Start_Address-32] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-31] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-30] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-29] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-28] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-27] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-26] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-25] != 0x02 ) ||\r
+ (in_data[PW_Start_Address-24] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-23] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-22] != 0x00 ) ||\r
+ (in_data[PW_Start_Address-21] != 0x00 ) )\r
+ {\r
+ Amiga_EXE_Header = BAD;\r
+ }\r
+ else\r
+ Amiga_EXE_Header = GOOD;\r
+ }\r
+ else\r
+ Amiga_EXE_Header = BAD;\r
+\r
+ return GOOD;\r
+ /* PW_l is the size of the pack */\r
+}\r
+\r
+\r
+void Rip_HighPressureCruncher ( void )\r
+{\r
+ /* PW_l is still the whole size */\r
+\r
+ uint8_t * Amiga_EXE_Header_Block;\r
+ uint8_t * Whatever;\r
+\r
+ OutputSize = PW_l;\r
+\r
+ CONVERT = BAD;\r
+\r
+ if ( Amiga_EXE_Header == BAD )\r
+ {\r
+ OutputSize -= 36;\r
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );\r
+ BZERO ( Amiga_EXE_Header_Block , 36 );\r
+ Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;\r
+ Amiga_EXE_Header_Block[3] = 0xF3;\r
+ Amiga_EXE_Header_Block[11] = 0x02;\r
+ Amiga_EXE_Header_Block[13] = Amiga_EXE_Header_Block[27] = 0x01;\r
+ Amiga_EXE_Header_Block[31] = 0xE9;\r
+\r
+ /* WARNING !!! WORKS ONLY ON PC !!! */\r
+ /* 68k machines code : c1 = *(Whatever+2); */\r
+ /* 68k machines code : c2 = *(Whatever+3); */\r
+ PW_j = PW_l - 60;\r
+ PW_j /= 4;\r
+ Whatever = (uint8_t *) &PW_j;\r
+ Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);\r
+ Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);\r
+ Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);\r
+ Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[35] = *Whatever;\r
+\r
+ Save_Rip_Special ( "High Pressure Cruncher Exe-file", HighPresCruncher, Amiga_EXE_Header_Block , 36 );\r
+ free ( Amiga_EXE_Header_Block );\r
+ }\r
+ else\r
+ {\r
+ PW_Start_Address -= 36;\r
+ Save_Rip ( "High Pressure Cruncher Exe-file", HighPresCruncher );\r
+ }\r
+\r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
#include "extern.h"
-short testHRT ( void )
+int16_t testHRT ( void )
{
/* test 1 */
if ( PW_i < 1080 )
void Depack_HRT ( void )
{
- Uchar *Whatever;
- Uchar poss[37][2];
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read header */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
for ( i=0 ; i<950 ; i++ )
Whatever[i] = in_data[Where++];
--- /dev/null
+/* testIFF() */\r
+/* Rip_IFF() */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testIFF ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+\r
+ if ( PW_Start_Address + 20 > PW_in_size )\r
+ {\r
+/*printf ( "#1 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+/* ILBM -> picture */\r
+ if ( (in_data[PW_Start_Address+8] != 'I' ) ||\r
+ (in_data[PW_Start_Address+9] != 'L' ) ||\r
+ (in_data[PW_Start_Address+10] != 'B' ) ||\r
+ (in_data[PW_Start_Address+11] != 'M' ))\r
+ {\r
+/*printf ( "#2 Start:%d\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ PW_m = 16;\r
+ while (1)\r
+ {\r
+ /* size of hunk */\r
+ PW_l = ( (in_data[PW_Start_Address+PW_m]*256*256*256) +\r
+ (in_data[PW_Start_Address+PW_m+1]*256*256) +\r
+ (in_data[PW_Start_Address+PW_m+2]*256) +\r
+ in_data[PW_Start_Address+PW_m+3] );\r
+ if (((PW_l/2)*2) != PW_l) PW_l += 1;\r
+/*printf ("at %x (%x) - ",(PW_Start_Address+PW_m),PW_l);*/\r
+\r
+ PW_m += 4;\r
+ PW_m += PW_l;\r
+ \r
+ if ((PW_Start_Address+PW_m + 8 > PW_in_size)||(PW_l == 0))\r
+ {\r
+/* printf ( "#3 Start:%d\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ \r
+ if ((in_data[PW_Start_Address+PW_m] == 'B') &&\r
+ (in_data[PW_Start_Address+PW_m+1] == 'O') &&\r
+ (in_data[PW_Start_Address+PW_m+2] == 'D') &&\r
+ (in_data[PW_Start_Address+PW_m+3] == 'Y'))\r
+ break;\r
+/*printf ("%02x %02x %02x %02x\n",in_data[PW_Start_Address+PW_m],in_data[PW_Start_Address+PW_m+1],in_data[PW_Start_Address+PW_m+2],in_data[PW_Start_Address+PW_m+3]);*/\r
+\r
+ PW_m += 4;\r
+ \r
+ }\r
+\r
+ PW_k = ( (in_data[PW_Start_Address+PW_m+4]*256*256*256) +\r
+ (in_data[PW_Start_Address+PW_m+5]*256*256) +\r
+ (in_data[PW_Start_Address+PW_m+6]*256) +\r
+ in_data[PW_Start_Address+PW_m+7] );\r
+ PW_l = PW_m + 8 + PW_k;\r
+/*printf ("\nPW_l %d\n",PW_l);\r
+printf ("PW_m %d\n",PW_m);\r
+printf ("PW_Start_Address %d\n",PW_Start_Address);\r
+printf ("PW_k %d\n",PW_k);*/\r
+\r
+ return GOOD;\r
+ /* PW_l is the size of the picture */\r
+}\r
+\r
+void Rip_IFF ( void )\r
+{\r
+ /* PW_l is still the whole size */\r
+\r
+ OutputSize = PW_l;\r
+\r
+ CONVERT = BAD;\r
+\r
+ Save_Rip ( "IFF graphic", IFF );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 4;\r
+}\r
--- /dev/null
+/* testIT() */\r
+/* Rip_IT() */\r
+\r
+/*\r
+first try : 20110808\r
+*/\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testIT ( void )\r
+{\r
+ /* test #1 */\r
+ PW_Start_Address = PW_i;\r
+ if ( (PW_Start_Address + 0xc0) > PW_in_size)\r
+ {\r
+ /*printf ( "#1 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ /* must be < 10 */\r
+ if ( (in_data[PW_Start_Address + 41] >= 0x0f) || (in_data[PW_Start_Address + 43] >= 0x0F) )\r
+ {\r
+ /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ PW_k = 0xc0 + (in_data[PW_Start_Address + 33]*256)+in_data[PW_Start_Address + 32];\r
+ if ( PW_k > PW_in_size)\r
+ {\r
+ /*printf ( "#3 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ PW_j = PW_k + ((in_data[PW_Start_Address + 35]*256)+in_data[PW_Start_Address + 34])*4;\r
+ if ( PW_j > PW_in_size)\r
+ {\r
+ /*printf ( "#4 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ PW_l = PW_j + ((in_data[PW_Start_Address + 37]*256)+in_data[PW_Start_Address + 36])*4;\r
+ if ( PW_l > PW_in_size)\r
+ {\r
+ /*printf ( "#4 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ return GOOD;\r
+/* PW_k => inst addresses*/\r
+/* PW_j => smp headers addresses*/\r
+/* PW_l => patterns addresses */\r
+}\r
+\r
+\r
+/*\r
+ * IT ripper\r
+ * 20110808 - Sylvain "Asle" Chipaux\r
+ *\r
+ * let's try it\r
+ * OK, what's is the size of one compressed sample ?!?!?\r
+*/\r
+void Rip_IT ( void )\r
+{\r
+/*\r
+from the test part -> \r
+ PW_k => inst addresses\r
+ PW_j => smp headers addresses\r
+ PW_l => patterns addresses\r
+*/\r
+\r
+ int32_t PtrInst = PW_k;\r
+ int32_t NbrInst = (in_data[PW_Start_Address + 35]*256)+in_data[PW_Start_Address + 34];\r
+ int32_t LenInst = 0;\r
+ int32_t PtrSmpHead = PW_j;\r
+ int32_t NbrSmpHead = (in_data[PW_Start_Address + 37]*256)+in_data[PW_Start_Address + 36];\r
+/* int32_t LenSmpHead = 0;*/\r
+ int32_t PtrPatt = PW_l;\r
+/* int32_t NbrPatt = (in_data[PW_Start_Address + 39]*256)+in_data[PW_Start_Address + 38];*/\r
+/* int32_t LenPatt = 0;*/\r
+ int32_t currentptr;\r
+ int32_t max = 0;\r
+/* int32_t whole_inst_size=0;*/\r
+/* int32_t whole_head_size=0;*/\r
+ uint8_t COMPRESSED = 1;\r
+\r
+ printf ("\nPtrInst:%x\nPtrSmpHead:%x\nPtrPatt:%x\n",PtrInst,PtrSmpHead,PtrPatt);\r
+\r
+ /* let's get the highest address of an instrument (if any is set) */\r
+ if (NbrInst > 0)\r
+ {\r
+ currentptr = PW_Start_Address + PtrInst;\r
+ for ( PW_k=0 ; PW_k<NbrInst ; PW_k++ )\r
+ {\r
+ int32_t tmp_addy = ((in_data[currentptr+(PW_k*4)+3]*256*256*256) +\r
+ (in_data[currentptr+(PW_k*4)+2]*256*256) +\r
+ (in_data[currentptr+(PW_k*4)+1]*256) +\r
+ in_data[currentptr+(PW_k*4)]);\r
+ /*printf ("inst addy[%lx]:%lx\n",PW_k,tmp_addy);*/\r
+ if (tmp_addy == 0)\r
+ continue;\r
+ if ( tmp_addy > max )\r
+ {\r
+ max = tmp_addy + 554;\r
+ }\r
+ /* inst have constant size */\r
+\r
+ LenInst = NbrInst*554;\r
+\r
+ }\r
+ }\r
+\r
+ /* let's get the highest address of a sample (if any is set) */\r
+ if (NbrSmpHead > 0)\r
+ {\r
+ currentptr = PW_Start_Address + PtrSmpHead;\r
+ for ( PW_k=0 ; PW_k<NbrSmpHead ; PW_k++ )\r
+ {\r
+ /* address of smaple header */\r
+ int32_t tmp_addy = ((in_data[currentptr+(PW_k*4)+3]*256*256*256) +\r
+ (in_data[currentptr+(PW_k*4)+2]*256*256) +\r
+ (in_data[currentptr+(PW_k*4)+1]*256) +\r
+ in_data[currentptr+(PW_k*4)]);\r
+ /* then address of its sample data */\r
+ int32_t tmp_addy2 = (in_data[PW_Start_Address+tmp_addy+0x4b]*256*256*256)+\r
+ (in_data[PW_Start_Address+tmp_addy+0x4a]*256*256)+\r
+ (in_data[PW_Start_Address+tmp_addy+0x49]*256)+\r
+ in_data[PW_Start_Address+tmp_addy+0x48];\r
+ printf ("smp addy[%2x]:%x (max:%x)(at:%x) ",PW_k,tmp_addy,max,tmp_addy2);\r
+ if (tmp_addy == 0)\r
+ continue;\r
+ if (tmp_addy2 == 0)\r
+ {\r
+ printf ("---");\r
+ }\r
+ if ( tmp_addy > max )\r
+ max = tmp_addy+0x50;\r
+ if ( tmp_addy2 >= max )\r
+ {\r
+ int32_t tmp_size = (in_data[PW_Start_Address+tmp_addy+0x33]*256*256*256)+\r
+ (in_data[PW_Start_Address+tmp_addy+0x32]*256*256)+\r
+ (in_data[PW_Start_Address+tmp_addy+0x31]*256)+\r
+ in_data[PW_Start_Address+tmp_addy+0x30];\r
+ if ((in_data[PW_Start_Address+tmp_addy+0x12]&0x02) == 0x02) /* 16 bits ? */\r
+ tmp_size *= 2;\r
+ /* OK, what's the size of 'compressed' samples ?!? */\r
+ if ((in_data[PW_Start_Address+tmp_addy+0x12]&0x08) == 0x08) /* compressed ? */\r
+ {\r
+ printf ("*");\r
+ COMPRESSED = 2;\r
+ tmp_size /= 2; /* just to be sure */\r
+ }\r
+ else\r
+ COMPRESSED = 1;\r
+ printf ("- size:%x)",tmp_size);\r
+ max = tmp_addy2+tmp_size;\r
+ }\r
+ printf ("\n");\r
+\r
+ /* here, max is now after the farthest sample data */\r
+\r
+ }\r
+ }\r
+\r
+/* PATTERNS could be _after_ the samples ... never seen but ...\r
+shall have to be handled, some day */\r
+\r
+ OutputSize = max;\r
+\r
+ CONVERT = BAD;\r
+ if (COMPRESSED == 2)\r
+ {\r
+ printf ("found Impulse Tracker module at %d with last sample compressed - can't save\n",PW_Start_Address);\r
+ Save_Status = GOOD;\r
+ }\r
+ else\r
+ {\r
+ Save_Rip ( "Impulse Tracker module", ImpulseTracker );\r
+ }\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
#include "extern.h"
-short testJamCracker ( void )
+int16_t testJamCracker ( void )
{
PW_Start_Address = PW_i;
#include "extern.h"
-short testKSM ( void )
+int16_t testKSM ( void )
{
PW_Start_Address = PW_i;
if ( (PW_Start_Address + 1536) > PW_in_size)
void Depack_KSM ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00,c5;
- Uchar Track_Numbers[128][4];
- Uchar Track_Numbers_Real[128][4];
- Uchar Track_Datas[4][192];
- Uchar Max=0x00;
- Uchar poss[37][2];
- Uchar PatPos;
- Uchar Status=ON;
- Uchar transco[]={'a','b','c','d','e','f','g','h','i','j'
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00,c5;
+ uint8_t Track_Numbers[128][4];
+ uint8_t Track_Numbers_Real[128][4];
+ uint8_t Track_Datas[4][192];
+ uint8_t Max=0x00;
+ uint8_t poss[37][2];
+ uint8_t PatPos;
+ uint8_t Status=ON;
+ uint8_t transco[]={'a','b','c','d','e','f','g','h','i','j'
,'k','l','m','n','o','p','q','r','s','t'
,'u','v','w','x','y','z'
,'-',':','!','~','1','2','3','4','5','6'
,'7','8','9','0',' ',';'};
- long Where=PW_Start_Address;
- long WholeSampleSize=0;
- unsigned long i=0,j=0,k=0,l;
+ int32_t Where=PW_Start_Address;
+ int32_t WholeSampleSize=0;
+ uint32_t i=0,j=0,k=0,l;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( &in_data[Where+2] , 13 , 1 , out );
fwrite ( Whatever , 7 , 1 , out ); /* fill-up there */
/* use of htonl() suggested by Xigh !.*/
j/=2;
l = htonl(j);
- c1 = *((Uchar *)&l+2);
- c2 = *((Uchar *)&l+3);
+ c1 = *((uint8_t *)&l+2);
+ c2 = *((uint8_t *)&l+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
}
/* valid for MMD0 & MMD1 */
-short testMMD0 ( void )
+int16_t testMMD0 ( void )
{
PW_Start_Address = PW_i;
if ( (PW_Start_Address + 52) > PW_in_size )
#include "extern.h"
-short testMOD ( int nbrchannels )
+int16_t testMOD ( int nbrchannels )
{
/* test 1 */
if ( PW_i < 1080 )
#include "globals.h"
#include "extern.h"
-short testMasterCruncher30addr ( void )
+int16_t testMasterCruncher30addr ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
+ uint8_t * Amiga_EXE_Header_Block;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
-short testMaxPacker12 ( void )
+int16_t testMaxPacker12 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testMegaCruncherObj ( void )
+int16_t testMegaCruncherObj ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 204;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
#include "extern.h"
-short testMegaCruncher10 ( void )
+int16_t testMegaCruncher10 ( void )
{
PW_Start_Address = PW_i;
}
-short testMegaCruncher12 ( void )
+int16_t testMegaCruncher12 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 60;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
#include "extern.h"
-short testMP_noID ( void )
+int16_t testMP_noID ( void )
{
+ /* TODO : test notes */
+
/* test #1 */
if ( (PW_i < 3) || ((PW_i+375)>PW_in_size))
{
if ( test_smps(PW_k, PW_m, PW_n, in_data[PW_Start_Address+3+8*PW_j], in_data[PW_Start_Address+2+8*PW_j] ) == BAD )
{
- /* printf ( "#2 Start:%ld (siz:%ld)(lstart:%ld)(lsiz:%ld)\n", PW_Start_Address,PW_k,PW_m,PW_n );*/
+ /*printf ( "#2 Start:%ld (siz:%ld)(lstart:%ld)(lsiz:%ld)\n", PW_Start_Address,PW_k,PW_m,PW_n );*/
return BAD;
}
}
PW_k = in_data[PW_Start_Address+250+PW_j];
if ( in_data[PW_Start_Address+250+PW_j] > 0x7f )
{
- /*printf( "#4 (Start:%ld)\n",PW_Start_Address );*/
+/*printf( "#4 (Start:%ld)\n",PW_Start_Address );*/
+ return BAD;
+ }
+ if ( (PW_j > PW_l+10) && (in_data[PW_Start_Address+250+PW_j] != 0x00) )
+ {
+/*printf( "#4,1 (Start:%ld)(unclean patternlist at %ld:%x)\n",PW_Start_Address, 250+PW_j,in_data[PW_Start_Address+250+PW_j]);*/
return BAD;
}
- if ( PW_j > PW_l+3 )
- if (in_data[PW_Start_Address+250+PW_j] != 0x00)
- {
- /*printf( "#4,1 (Start:%ld)\n",PW_Start_Address );*/
- return BAD;
- }
}
PW_k += 1;
for ( PW_j=0 ; PW_j<((256*PW_k)-4) ; PW_j++ )
{
PW_l = in_data[PW_Start_Address+378+PW_j*4+4];
- if ( PW_l > 19 ) /* 0x13 */
+ if ( (PW_l&0xf0) > 0x10 )
{
- /*printf( "#5 (Start:%ld)(byte0:%x)(Where:%ld)\n",PW_Start_Address,in_data[PW_Start_Address+378+PW_j*4],PW_Start_Address+378+PW_j*4 );*/
+/*printf( "#5 (Start:%ld)(byte0:%x)(Where:%ld)\n",PW_Start_Address,in_data[PW_Start_Address+378+PW_j*4],PW_Start_Address+378+PW_j*4 );*/
+ return BAD;
+ }
+ if ( (PW_l&0x0f) > 0x03 )
+ {
+/*printf( "#5,0 (Start:%ld)(byte0:%x)(Where:%ld)\n",PW_Start_Address,in_data[PW_Start_Address+378+PW_j*4],PW_Start_Address+378+PW_j*4 );*/
return BAD;
}
PW_l = in_data[PW_Start_Address+378+PW_j*4]&0x0f;
PW_m = 1;
if ( PW_n != 0 )
PW_o = 1;
- if ( (PW_l > 0) && (PW_l<0x71) )
+ /*20100905 : more accurate test to lower fake finding */
+ if ( (PW_l<0x100) && (PW_l != 0x00) && (PW_l != 0x71) &&(PW_l != 0x78) &&(PW_l != 0x7f) &&(PW_l != 0x87) &&(PW_l != 0x8f) &&
+ (PW_l != 0x97) && (PW_l != 0xa0) &&(PW_l != 0xaa) &&(PW_l != 0xb4) &&(PW_l != 0xbe) &&(PW_l != 0xca) &&
+ (PW_l != 0xd6) && (PW_l != 0xe2) && (PW_l != 0xf0) && (PW_l != 0xfe))
{
- /*printf ( "#5,1 (Start:%ld)(where:%ld)(note:%ld)\n" , PW_Start_Address,PW_Start_Address+378+PW_j*4, PW_l );*/
+/*printf ( "#5,1 (Start:%ld)(where:%ld)(note:%lx)\n" , PW_Start_Address,PW_Start_Address+378+PW_j*4, PW_l );*/
return BAD;
}
}
if ( (PW_m == 0) || (PW_o == 0) )
{
/* no note ... odd */
- /*printf ("#5,2 (Start:%ld)\n",PW_Start_Address);*/
+/*printf ("#5,2 (Start:%ld)\n",PW_Start_Address);*/
return BAD;
}
+(((in_data[PW_Start_Address+6+PW_j*8]*256)+in_data[PW_Start_Address+7+PW_j*8])*2);
if ( PW_l > (PW_k+2) )
{
- /*printf( "#6 (Start:%ld)\n",PW_Start_Address );*/
+/*printf( "#6 (Start:%ld)\n",PW_Start_Address );*/
return BAD;
}
}
}
-short testMP_withID ( void )
+int16_t testMP_withID ( void )
{
/* test #1 */
PW_Start_Address = PW_i;
* Last update: 28/11/99
* - removed open() (and other fread()s and the like)
* - general Speed & Size Optmizings
+ *
+ * 20100119 : clean up - only one fwrite for header
*/
void Depack_MP ( void )
{
- Uchar *Whatever;
- long i=0;
- long Total_Sample_Size=0;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ int32_t i=0,j=0;
+ int32_t WholeSampleSize=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Whatever = (Uchar *) malloc (64);
- BZERO ( Whatever , 64 );
+ Whatever = (uint8_t *) malloc (1085);
+ BZERO ( Whatever , 1085 );
- /* title */
- fwrite ( Whatever , 20 , 1 , out );
+ /* empty title */
if ( (in_data[Where] == 'T') && (in_data[Where+1] == 'R') && (in_data[Where+2] == 'K') && (in_data[Where+3] == '1') )
Where += 4;
for ( i=0 ; i<31 ; i++ )
{
- /*sample name*/
- fwrite ( Whatever , 22 , 1 , out );
-
- Total_Sample_Size += (((in_data[Where]*256)+in_data[Where+1])*2);
- fwrite ( &in_data[Where] , 8 , 1 , out );
+ WholeSampleSize += (((in_data[Where]*256)+in_data[Where+1])*2);
+ Whatever[i*30 + 42] = in_data[Where];
+ Whatever[i*30 + 43] = in_data[Where+1];
+ Whatever[i*30 + 44] = in_data[Where+2];
+ Whatever[i*30 + 45] = in_data[Where+3];
+ Whatever[i*30 + 46] = in_data[Where+4];
+ Whatever[i*30 + 47] = in_data[Where+5];
+ Whatever[i*30 + 48] = in_data[Where+6];
+ Whatever[i*30 + 49] = in_data[Where+7];
Where += 8;
}
- /*printf ( "Whole sample size : %ld\n" , Total_Sample_Size );*/
+ /*printf ( "Whole sample size : %ld\n" , WholeSampleSize );*/
/* pattern table lenght & Ntk byte */
- fwrite ( &in_data[Where] , 2 , 1 , out );
- Where += 2;
+ Whatever[950] = in_data[Where++];
+ Whatever[951] = in_data[Where++];
- Whatever[32] = 0x00;
+ j = 0;
for ( i=0 ; i<128 ; i++ )
{
- if ( in_data[Where+i] > Whatever[32] )
- Whatever[32] = in_data[Where+i];
+ Whatever[952+i] = in_data[Where+i];
+ if ( in_data[Where+i] > j )
+ j = in_data[Where+i];
}
- fwrite ( &in_data[Where] , 128 , 1 , out );
Where += 128;
/*printf ( "Number of pattern : %d\n" , Max+1 );*/
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
- Whatever[3] = '.';
- fwrite ( Whatever , 4 , 1 , out );
+ Whatever[1080] = 'M';
+ Whatever[1081] = '.';
+ Whatever[1082] = 'K';
+ Whatever[1083] = '.';
+
+ fwrite ( Whatever , 1084 , 1 , out );
+ free ( Whatever );
/* bypass 4 unknown empty bytes */
if ( (in_data[Where]==0x00)&&(in_data[Where+1]==0x00)&&(in_data[Where+2]==0x00)&&(in_data[Where+3]==0x00) )
/*printf ( "! four empty bytes bypassed at the beginning of the pattern data\n" );*/
/* pattern data */
- i = (Whatever[32]+1)*1024;
+ i = (j+1)*1024;
fwrite ( &in_data[Where] , i , 1 , out );
Where += i;
- free ( Whatever );
/* sample data */
- fwrite ( &in_data[Where] , Total_Sample_Size , 1 , out );
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );
Crap ( " Module Protector " , BAD , BAD , out );
#include "globals.h"
#include "extern.h"
-short testMUGICIAN ( void )
+int16_t testMUGICIAN ( void )
{
if ( PW_i<2 )
{
#include "globals.h"
#include "extern.h"
-short testNoisepacker3 ( void )
+int16_t testNoisepacker3 ( void )
{
if ( PW_i < 9 )
{
*/
void Depack_Noisepacker3 ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar Nbr_Pos;
- Uchar Nbr_Smp;
- Uchar poss[36][2];
- Uchar Pat_Max=0x00;
- long Where=PW_Start_Address;
- long WholeSampleSize=0;
- long TrackDataSize;
- long Track_Addresses[128][4];
- long Unknown1;
- long i=0,j=0,k;
- long Track_Data_Start_Address;
- long SampleDataAddress=0;
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;
+ uint8_t Nbr_Pos;
+ uint8_t Nbr_Smp;
+ uint8_t poss[37][2];
+ uint8_t Pat_Max=0x00;
+ int32_t Where=PW_Start_Address;
+ int32_t WholeSampleSize=0;
+ int32_t TrackDataSize;
+ int32_t Track_Addresses[128][4];
+ int32_t Unknown1;
+ int32_t i=0,j=0,k;
+ int32_t Track_Data_Start_Address;
+ int32_t SampleDataAddress=0;
FILE *out;
+/* FILE *DEBUG;*/
if ( Save_Status == BAD )
return;
+/* DEBUG = fopen ("debug.txt","w+b");*/
+
fillPTKtable(poss);
BZERO ( Track_Addresses , 128*4*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read number of sample */
/*printf ( "\nNumber of sample : %d (%x)\n" , Nbr_Smp , Nbr_Smp );*/
/* write title */
- Whatever = (Uchar *) malloc ( 1084 );
+ Whatever = (uint8_t *) malloc ( 1084 );
BZERO ( Whatever , 1084 );
/*fwrite ( Whatever , 20 , 1 , out );*/
/* the track data now ... */
for ( i=0 ; i<Pat_Max ; i++ )
{
+/*fprintf (DEBUG,"\ni:%d\n",i);*/
BZERO ( Whatever , 1084 );
for ( j=0 ; j<4 ; j++ )
{
Where += 1;
c3 = in_data[Where];
Where += 1;
+/*fprintf (DEBUG,"[%2d][%2d](@%d) %2x-%2x-%2x - ",j,k,Where,c1,c2,c3);*/
Whatever[k*16+j*4] = (c1<<4)&0x10;
c4 = (c1 & 0xFE)/2;
+/*fprintf (DEBUG,"(%2x) - \n",c4);*/
+/*fprintf (DEBUG,"= %2x -> ",Whatever[k*16+j*4]);*/
Whatever[k*16+j*4] |= poss[c4][0];
+/*fprintf (DEBUG,"%2x (note:%2x)\n",Whatever[k*16+j*4],poss[c4][0]);*/
Whatever[k*16+j*4+1] = poss[c4][1];
if ( (c2&0x0f) == 0x08 )
c2 &= 0xf0;
}
Whatever[k*16+j*4+2] = c2;
Whatever[k*16+j*4+3] = c3;
+/*fprintf (DEBUG,"%2x-%2x-%2x\n",Whatever[k*16+j*4+1], Whatever[k*16+j*4+2], Whatever[k*16+j*4+3]);*/
if ( (c2&0x0f) == 0x0D )
k = 100; /* to leave the loop */
}
Crap ( " NoisePacker v3 " , BAD , BAD , out );
+/* fclose (DEBUG);*/
fclose ( out );
printf ( "done\n" );
#include "extern.h"
-short testNewtron ( void )
+int16_t testNewtron ( void )
{
/* test #1 */
if ( (PW_i < 7) || ((PW_i+373+1024+2)>PW_in_size))
void Depack_Newtron ( void )
{
- Uchar *Whatever;
- long i=0;
- long Total_Sample_Size=0;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ int32_t i=0;
+ int32_t Total_Sample_Size=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Whatever = (Uchar *) malloc (64);
+ Whatever = (uint8_t *) malloc (64);
BZERO ( Whatever , 64 );
/* title */
/*
* newtronold.c ... 21 jan 2007
+
+ Newtron Old format
+Created by ?!?
+Analysed by Sylvain "Asle" Chipaux (asle@free.fr)
+
+Source :
+ - Little Joe & Newtron Musicdisk
+
+
+Offset size (byte) Comment
+------ ----------- -------
+
+ 0 2 patternlist address (-8) [A]
+ 2 2 size of patternlist [B]
+ 4 4 ?
+
+ **************************************
+ * the following is repeated [A]/8 times *
+ * with 8 bytes description for 1 smp *
+******************************************************
+ *
+ 8 2 Sample Size / 2 *
+ 10 1 Finetune (0 -> F) *
+ 11 1 Volume (0 - 40h) *
+ 12 2 Loop Start / 2 *
+ 14 2 Loop Size / 2 *
+ *
+******************************************************
+
+[A] [B] Pattern table
+
+[A]+[B] ? Pattern datas
+ (Pattern datas are stored like Ptk)
+ (one pattern is 1024 ($400) bytes).
+
+
+ Follow the Sample datas stored like ProTracker.
+Nothing is packed..
+
*/
/* testNewtronOld() */
/* Rip_NewtronOld() */
#include "globals.h"
#include "extern.h"
-
-short testNewtronOld ( void )
+/*
+ * additional tests - 20100207
+*/
+int16_t testNewtronOld ( void )
{
/* test #1 */
if ( (PW_i < 11) || ((PW_i+6+1+1024+2)>PW_in_size))
return BAD;
}
- /* test #2 */
PW_l=(in_data[PW_Start_Address]*256)+in_data[PW_Start_Address+1]+8;
- PW_l = (PW_l/8)-1;
+ /* test #2 samples */
PW_WholeSampleSize = 0;
+ PW_l = (PW_l/8)-1;
for ( PW_j=0 ; PW_j<PW_l ; PW_j+=1 )
{
/* size */
return BAD;
}
- /* test #4 */
+ /* test #4 - patternlist size */
PW_l = in_data[PW_Start_Address+3];
if ( (PW_l > 0x7f) || (PW_l == 0x00) )
{
/* PW_WholeSampleSize is the whole sample size */
PW_k += PW_l;
/* PW_k is now the pat data addy */
+ /*printf ( "\nPW_k:%lx\n",PW_k );*/
for ( PW_j=0 ; PW_j<(256*PW_m) ; PW_j++ )
{
- PW_l = in_data[PW_Start_Address+PW_k+PW_j*4];
- if ( PW_l > 19 ) /* 0x13 */
+ unsigned char c = in_data[PW_Start_Address+PW_k+(PW_j*4)];
+ if ((c&0x0f) > 0x03)
+ {
+ /*printf( "#7,1 (start:%ld)(where:%lx)(c:%x)\n",PW_Start_Address,PW_Start_Address+PW_k+(PW_j*4),c );*/
+ return BAD;
+ }
+ if ((c&0xf0) > 0x10)
{
- /*printf( "#7,0\n" );*/
+ /*printf( "#7,2 (start:%ld)(where:%lx)(c:%x)\n",PW_Start_Address,PW_Start_Address+PW_k+(PW_j*4),c );*/
return BAD;
}
PW_n = in_data[PW_Start_Address+PW_k+PW_j*4]&0x0f;
*
* Converts Newtron Old packed MODs back to PTK MODs
*
+ * clean up - 20100207
*/
void Depack_NewtronOld ( void )
{
- Uchar *Whatever;
- long i=0,j=0;
- long Total_Sample_Size=0;
- long Where = PW_Start_Address;
- long patlistaddy=0;
- Uchar patsize = 0;
- Uchar max=0x00;
+ uint8_t *Whatever;
+ int32_t i=0,j=0;
+ int32_t Total_Sample_Size=0;
+ int32_t Where = PW_Start_Address;
+ int32_t patlistaddy=0;
+ uint8_t patsize = 0;
+ uint8_t max=0x00;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Whatever = (Uchar *) malloc (130);
- BZERO ( Whatever , 130 );
+ Whatever = (uint8_t *) malloc (1085);
+ BZERO ( Whatever , 1085 );
/* title */
- fwrite ( Whatever , 20 , 1 , out );
/* size of header */
patlistaddy = (in_data[Where]*256)+in_data[Where+1]+8;
for ( i=0 ; i<j ; i++ )
{
- /*sample name*/
- fwrite ( Whatever , 22 , 1 , out );
-
+ Whatever[20+30*i+22] = in_data[Where];
+ Whatever[20+30*i+23] = in_data[Where+1];
+ Whatever[20+30*i+24] = in_data[Where+2];
+ Whatever[20+30*i+25] = in_data[Where+3];
+ Whatever[20+30*i+26] = in_data[Where+4];
+ Whatever[20+30*i+27] = in_data[Where+5];
+ Whatever[20+30*i+28] = in_data[Where+6];
+ Whatever[20+30*i+29] = in_data[Where+7];
Total_Sample_Size += (((in_data[Where]*256)+in_data[Where+1])*2);
- fwrite ( &in_data[Where] , 8 , 1 , out );
Where += 8;
}
- Whatever[29] = 0x01;
- while (i++<31)
- fwrite (&Whatever[0],30,1,out);
+ while (i<31)
+ {
+ Whatever[20+30*i+29] = 0x01;
+ i++;
+ }
/*printf ( "Whole sample size : %ld\n" , Total_Sample_Size );*/
/* pattern table lenght & Ntk byte */
patsize = in_data[PW_Start_Address+3];
- fwrite ( &patsize , 1 , 1 , out );
- Whatever[0] = 0x7f;
- fwrite ( &Whatever[0] , 1 , 1 , out );
+ Whatever[950] = patsize;
+ Whatever[951] = 0x7f;
Where = patlistaddy+PW_Start_Address;
- BZERO ( Whatever , 130 );
for ( i=0 ; i<patsize ; i++ )
{
if ( in_data[Where+i] > max )
max = in_data[Where+i];
- Whatever[i] = in_data[Where+i];
+ Whatever[952+i] = in_data[Where+i];
}
- fwrite ( &Whatever[0] , 128 , 1 , out );
Where += patsize;
/*printf ( "Number of pattern : %d\n" , Max+1 );*/
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
- Whatever[3] = '.';
- fwrite ( Whatever , 4 , 1 , out );
+ Whatever[1080] = 'M';
+ Whatever[1081] = '.';
+ Whatever[1082] = 'K';
+ Whatever[1083] = '.';
+ fwrite ( Whatever , 1084 , 1 , out );
/* pattern data */
i = (max+1)*1024;
/* Noise from Heaven Chipdisk (21 oct 2001) by Iris */
-short testNFH ( void )
+int16_t testNFH ( void )
{
/* test 1 */
if ( PW_i < 1080 )
*/
void Depack_NFH ( void )
{
- Uchar *Whatever;
- Uchar poss[37][2];
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where=PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
+ int32_t Where=PW_Start_Address;
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read and write whole header */
Where += 952 /* after size of pattern list .. before pattern list itself */;
/* write ID */
- Whatever = (Uchar *) malloc (4);
+ Whatever = (uint8_t *) malloc (4);
Whatever[0] = 'M';
Whatever[1] = '.';
Whatever[2] = 'K';
#include "extern.h"
-short testNoisepacker1 ( void )
+int16_t testNoisepacker1 ( void )
{
if ( PW_i < 15 )
{
*/
void Depack_Noisepacker1 ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar Nbr_Pos;
- Uchar poss[37][2];
- Uchar Pat_Max=0x00;
- long Max_Add=0;
- long WholeSampleSize=0;
- long TrackDataSize;
- long Track_Addresses[128][4];
- long Unknown1;
- long i=0,j=0,k;
- long Track_Data_Start_Address;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;
+ uint8_t Nbr_Pos;
+ uint8_t poss[37][2];
+ uint8_t Pat_Max=0x00;
+ int32_t Max_Add=0;
+ int32_t WholeSampleSize=0;
+ int32_t TrackDataSize;
+ int32_t Track_Addresses[128][4];
+ int32_t Unknown1;
+ int32_t i=0,j=0,k;
+ int32_t Track_Data_Start_Address;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
BZERO ( Track_Addresses , 128*4*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read number of sample */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
Whatever[128] = ((in_data[Where]<<4)&0xf0) | ((in_data[Where+1]>>4)&0x0f);
Where += 3;
#include "globals.h"
#include "extern.h"
-short testNoisepacker2 ( void )
+int16_t testNoisepacker2 ( void )
{
if ( PW_i < 15 )
{
/* PW_l is now the size of the header 'til the end of sample descriptions */
if ( PW_l+PW_Start_Address > PW_in_size )
{
-/* printf ( "#5,4 Start:%ld\n", PW_Start_Address);*/
+/*printf ( "#5,4 Start:%ld\n", PW_Start_Address);*/
return BAD;
}
/* PW_j is now available for use :) */
if ( PW_l+PW_Start_Address>PW_in_size)
{
-/* printf ( "#6,1 Start:%ld\n", PW_Start_Address);*/
+/*printf ( "#6,1 Start:%ld\n", PW_Start_Address);*/
return BAD;
}
{
if ( PW_Start_Address + PW_l + PW_m > PW_in_size )
{
- /* printf ( "#8,0 Start:%ld\n", PW_Start_Address);*/
+ /*printf ( "#8,0 Start:%ld\n", PW_Start_Address);*/
return BAD;
}
if ( in_data[PW_Start_Address+PW_l+PW_m] > 0x49 )
if ( (((in_data[PW_Start_Address+PW_l+PW_m]<<4)&0x10)|
((in_data[PW_Start_Address+PW_l+PW_m+1]>>4)&0x0f)) > PW_j )
{
-/*printf ( "#8,1 Start:%ld (at %x)(PW_k:%x)(PW_l:%x)(PW_m:%x)(PW_j:%ld)\n" , PW_Start_Address,PW_Start_Address+PW_l+PW_m,PW_k,PW_l,PW_m,PW_j );*/
+/*printf ( "NP2#8,1 Start:%ld (at %x)(PW_k:%x)(PW_l:%x)(PW_m:%x)(PW_j:%ld)\n" , PW_Start_Address,PW_Start_Address+PW_l+PW_m,PW_k,PW_l,PW_m,PW_j );*/
return BAD;
}
PW_n = (in_data[PW_Start_Address+PW_l+PW_m+1]&0x0F);
*/
void Depack_Noisepacker2 ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar Nbr_Pos;
- Uchar Nbr_Smp;
- Uchar poss[37][2];
- Uchar Pat_Max=0x00;
- long Where=PW_Start_Address;
- long Max_Add=0;
- long WholeSampleSize=0;
- long TrackDataSize;
- long Track_Addresses[128][4];
- long Unknown1;
- long i=0,j=0,k;
- long Track_Data_Start_Address;
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;
+ uint8_t Nbr_Pos;
+ uint8_t Nbr_Smp;
+ uint8_t poss[37][2];
+ uint8_t Pat_Max=0x00;
+ int32_t Where=PW_Start_Address;
+ int32_t Max_Add=0;
+ int32_t WholeSampleSize=0;
+ int32_t TrackDataSize;
+ int32_t Track_Addresses[128][4];
+ int32_t Unknown1;
+ int32_t i=0,j=0,k;
+ int32_t Track_Data_Start_Address;
FILE *out;
if ( Save_Status == BAD )
BZERO ( Track_Addresses , 128*4*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read number of sample */
/*printf ( "Number of sample : %d (%x)\n" , Nbr_Smp , Nbr_Smp );*/
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
/* read pattern table */
Pat_Max = 0x00;
+ /* 20100823 - BZERO ... */
+ BZERO (Whatever,1024);
for ( i=0 ; i<Nbr_Pos ; i++ )
{
Whatever[i] = ((in_data[Where+(i*2)]*256)+in_data[Where+(i*2)+1])/8;
#include "extern.h"
-short testNoiserunner ( void )
+int16_t testNoiserunner ( void )
{
/* test 1 */
if ( PW_i < 1080 )
void Depack_Noiserunner ( void )
{
- Uchar poss[37][2];
- Uchar Max=0x00;
- Uchar Note,Smp,Fx,FxVal;
- Uchar *Whatever;
- long Where=PW_Start_Address;
- long i=0,j=0,l=0,k;
- long WholeSampleSize=0;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t *Whatever;
+ int32_t Where=PW_Start_Address;
+ int32_t i=0,j=0,l=0,k;
+ int32_t WholeSampleSize=0;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
/* title */
/* use of htonl() suggested by Xigh !.*/
j/=2;
k = htonl(j);
- Whatever[32] = *((Uchar *)&k+2);
- Whatever[33] = *((Uchar *)&l+3);
+ Whatever[32] = *((uint8_t *)&k+2);
+ Whatever[33] = *((uint8_t *)&l+3);
fwrite ( &Whatever[32] , 2 , 1 , out );
/* write loop size */
-/* (5th of may 2007)
-*/
-/* testNovoTrade() */
-/* Rip_NovoTrade() */
-/* Depack_NovoTrade() */
-
-
-#include "globals.h"
-#include "extern.h"
-
-
-short testNovoTrade ( void )
-{
- /* test #1 */
- PW_Start_Address = PW_i;
- if ((PW_i + 38) > PW_in_size)
- {
- /*printf ("[1] PW_Start_Address : %ld\n", PW_Start_Address);*/
- return BAD;
- }
- PW_j = (in_data[PW_Start_Address+20]*256)+in_data[PW_Start_Address+21] + 4;
- if ((PW_i + PW_j + 4) > PW_in_size)
- {
- /*printf ("[2] PW_Start_Address : %ld\n", PW_Start_Address);*/
- return BAD;
- }
- PW_k = (in_data[PW_Start_Address+28]*256)+in_data[PW_Start_Address+29] + PW_j + 4;
- if ((PW_i + PW_k + 2) > PW_in_size)
- {
- /*printf ("[3] PW_Start_Address : %ld\n", PW_Start_Address);*/
- return BAD;
- }
- /* PW_j is on "BODY" tag */
- /* PW_k is on "SAMP" tag */
-
- /* test #2 let's verify */
- if ( (in_data[PW_Start_Address+PW_j] != 'B') &&
- (in_data[PW_Start_Address+PW_j+1] != 'O') &&
- (in_data[PW_Start_Address+PW_j+2] != 'D') &&
- (in_data[PW_Start_Address+PW_j+3] != 'Y'))
- {
- /*printf ("[4] PW_Start_Address : %ld\n", PW_Start_Address);*/
- return BAD;
- }
- if ( (in_data[PW_Start_Address+PW_k] != 'S') &&
- (in_data[PW_Start_Address+PW_k+1] != 'A') &&
- (in_data[PW_Start_Address+PW_k+2] != 'M') &&
- (in_data[PW_Start_Address+PW_k+3] != 'P'))
- {
- /*printf ("[5] (start)%ld, (BODY)%lx, (at)%lx\n", PW_Start_Address,PW_j,PW_k);*/
- return BAD;
- }
-
- /* no much but should be enough :) */
- return GOOD;
-}
-
-
-void Rip_NovoTrade ( void )
-{
- /* get nbr sample */
- PW_j = (in_data[PW_Start_Address+22]*256)+in_data[PW_Start_Address+23];
- /* get BODY addy */
- PW_m = (in_data[PW_Start_Address+20]*256)+in_data[PW_Start_Address+21] + 4;
- /* get SAMP addy */
- PW_k = (in_data[PW_Start_Address+28]*256)+in_data[PW_Start_Address+29] + PW_m + 4;
- PW_WholeSampleSize = 0;
- for ( PW_l=0 ; PW_l<PW_j ; PW_l++ )
- PW_WholeSampleSize += ((in_data[32+(PW_l*8)]*256)+in_data[33+(PW_l*8)])*2;
-
- OutputSize = PW_WholeSampleSize + PW_k + 4;
-
- CONVERT = GOOD;
- Save_Rip ( "NovoTrade Packed music", NovoTrade );
-
- if ( Save_Status == GOOD )
- PW_i += 1;
-}
-
-
-/*
- * NovoTrade.c 2007 (c) Asle / ReDoX
- *
- * 20070505 : doesn't convert pattern data
-*/
-void Depack_NovoTrade ( void )
-{
- Uchar *Whatever;
- long i=0,k=0;
- Ushort Pattern_Addresses_Table[128];
- short BODYaddy, SAMPaddy, nbr_sample, siz_patlist, nbr_patstored;
- long Total_Sample_Size=0;
- long Where = PW_Start_Address;
- FILE *out;/*,*DEBUG;*/
-
- /*DEBUG = fopen("DEBUG.txt","w+b");*/
-
- if ( Save_Status == BAD )
- return;
-
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
- out = PW_fopen ( Depacked_OutName , "w+b" );
-
- Where += 4;
- /* title */
- Whatever = (Uchar *) malloc (2048);
- BZERO ( Whatever , 2048 );
- fwrite ( &in_data[Where], 16, 1, out );
- fwrite ( Whatever, 4, 1, out);
- Where += 16;
-
- /* get 'BODY' addy */
- BODYaddy = (in_data[Where]*256)+in_data[Where+1] + 4;
- Where += 2;
- /*printf ( "addy of 'BODY' : %ld\n" , k );*/
-
- /* number of sample */
- nbr_sample = (in_data[Where]*256)+in_data[Where+1];
- Where += 2;
-
- /* size of the pattern list */
- siz_patlist = (in_data[Where]*256)+in_data[Where+1];
- Where += 2;
-
- /* number of pattern stored */
- nbr_patstored = (in_data[Where]*256)+in_data[Where+1];
- Where += 2;
-
- /* get 'SAMP' addy */
- SAMPaddy = (in_data[Where]*256)+in_data[Where+1] + BODYaddy + 4;
- Where += 2;
-
- /* sample header */
- BZERO ( Whatever, 2048 );
- for ( i=0 ; i<nbr_sample ; i++ )
- {
- /* in_data[Where] is the sample ref */
- /* volume */
- Whatever[25+(in_data[Where]*30)] = in_data[Where+1];
- /* size */
- Whatever[22+(in_data[Where]*30)] = in_data[Where+2];
- Whatever[23+(in_data[Where]*30)] = in_data[Where+3];
- Total_Sample_Size += ((in_data[Where+2]*256)+in_data[Where+3])*2;
- /* loop start */
- Whatever[26+(in_data[Where]*30)] = in_data[Where+4];
- Whatever[27+(in_data[Where]*30)] = in_data[Where+5];
- /* loop size */
- Whatever[28+(in_data[Where]*30)] = in_data[Where+6];
- Whatever[29+(in_data[Where]*30)] = in_data[Where+7];
- Where += 8;
- }
- fwrite ( Whatever , 930 , 1 , out );
-
- /* pattern list now */
- /* Where is on it */
- BZERO ( Whatever, 2048 );
- for ( i=2; i<siz_patlist+2; i++ )
- {
- Whatever[i] = in_data[Where+1];
- Where += 2;
- }
- Whatever[0] = (Uchar)siz_patlist;
- Whatever[1] = 0x7F;
- fwrite ( Whatever , 130 , 1 , out );
-
- /* pattern addresses now */
- /* Where is on it */
- BZERO ( Pattern_Addresses_Table , 128*2 );
- for ( i=0; i<nbr_patstored; i++ )
- {
- Pattern_Addresses_Table[i] = (in_data[Where]*256)+in_data[Where+1];
- Where += 2;
- }
-
- /* PTK's tag now*/
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
- Whatever[3] = '.';
- fwrite ( Whatever , 4 , 1 , out );
-
-/*fprintf(DEBUG,"BODYaddy : %d\n",BODYaddy);
-fprintf(DEBUG,"SAMPaddy : %d\n",SAMPaddy);
-fprintf(DEBUG,"nbr_sample : %d\n",nbr_sample);
-fprintf(DEBUG,"siz_patlist : %d\n",siz_patlist);
-fprintf(DEBUG,"nbr_patstored : %d\n\n",nbr_patstored);*/
-
- /* pattern data now ... *gee* */
- Where += 4;
- for ( i=0 ; i<nbr_patstored ; i++ )
-/* for ( i=0 ; i<2 ; i++ )*/
- {
-/*fprintf(DEBUG,"\n-------pat %ld----\n",i);*/
- Where = BODYaddy + 4 + Pattern_Addresses_Table[i];
-/*fprintf(DEBUG,"@ in file : %ld\n",Where);*/
- for ( k=0; k<1024; k++ )
- {
- if (in_data[Where+1] == 0x80)
- {
-/*fprintf(DEBUG,"[%-4ld] %2x-%2x <-- end of pattern\n",k,in_data[Where],in_data[Where+1]);/*
- /* pattern ends */
- Where += 2;
- k += 1;
- break;
- }
- if (in_data[Where+1] == 0x01)
- {
-/*fprintf(DEBUG,"[%-4ld] %2x-%2x <-- ?!? unknown case\n",k,in_data[Where],in_data[Where+1]);*/
- /* pattern ends */
- Where += 2;
- k += 1;
- break;
- }
- if ((in_data[Where] == 0x00) && (in_data[Where+1]<=0x70))
- {
-/*fprintf(DEBUG,"[%-4ld] %2x-%2x <-- bypass %ld notes\n",k,in_data[Where],in_data[Where+1],in_data[Where+1]+1);*/
- /* bypass notes .. guess */
- k += (in_data[Where+1]+1)-1;
- Where += 2;
- continue;
- }
-/*fprintf(DEBUG,"[%-4ld] %2x-%2x-%2x-%2x\n",k,in_data[Where],in_data[Where+1],in_data[Where+2],in_data[Where+3]);*/
- Whatever[k*4] = in_data[Where];
- Whatever[k*4+1] = in_data[Where+1];
- Whatever[k*4+2] = in_data[Where+2];
- Whatever[k*4+3] = in_data[Where+3];
- k += 3;
- Where += 4;
- }
-/*fprintf(DEBUG,"\nEND OF LOOP ?!?\n");*/
-/* fwrite ( Whatever , 1024 , 1 , out );*/
- }
- free ( Whatever );
-
-
- Where = PW_Start_Address + SAMPaddy;
- fwrite ( &in_data[Where] , Total_Sample_Size , 1 , out );
-
- Crap ( " NovoTrade Packer " , BAD , BAD , out );
-
-/* fflush ( DEBUG );*/
-/* fclose ( DEBUG );*/
- fflush ( out );
- fclose ( out );
-
- printf ( "done\n" );
- return; /* useless ... but */
-
-}
+/* (5th of may 2007)\r
+ (1st of January 2010 - completed)\r
+*/\r
+/* testNovoTrade() */\r
+/* Rip_NovoTrade() */\r
+/* Depack_NovoTrade() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testNovoTrade ( void )\r
+{\r
+ /* test #1 */\r
+ PW_Start_Address = PW_i;\r
+ if ((PW_i + 38) > PW_in_size)\r
+ {\r
+ /*printf ("[1] PW_Start_Address : %ld\n", PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+ PW_j = (in_data[PW_Start_Address+20]*256)+in_data[PW_Start_Address+21] + 4;\r
+ if ((PW_i + PW_j + 4) > PW_in_size)\r
+ {\r
+ /*printf ("[2] PW_Start_Address : %ld\n", PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+ PW_k = (in_data[PW_Start_Address+28]*256)+in_data[PW_Start_Address+29] + PW_j + 4;\r
+ if ((PW_i + PW_k + 2) > PW_in_size)\r
+ {\r
+ /*printf ("[3] PW_Start_Address : %ld\n", PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+ /* PW_j is on "BODY" tag */\r
+ /* PW_k is on "SAMP" tag */\r
+\r
+ /* test #2 let's verify */\r
+ if ( (in_data[PW_Start_Address+PW_j] != 'B') &&\r
+ (in_data[PW_Start_Address+PW_j+1] != 'O') &&\r
+ (in_data[PW_Start_Address+PW_j+2] != 'D') &&\r
+ (in_data[PW_Start_Address+PW_j+3] != 'Y'))\r
+ {\r
+ /*printf ("[4] PW_Start_Address : %ld\n", PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+ if ( (in_data[PW_Start_Address+PW_k] != 'S') &&\r
+ (in_data[PW_Start_Address+PW_k+1] != 'A') &&\r
+ (in_data[PW_Start_Address+PW_k+2] != 'M') &&\r
+ (in_data[PW_Start_Address+PW_k+3] != 'P'))\r
+ {\r
+ /*printf ("[5] (start)%ld, (BODY)%lx, (at)%lx\n", PW_Start_Address,PW_j,PW_k);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* no much but should be enough :) */\r
+ return GOOD;\r
+}\r
+\r
+\r
+void Rip_NovoTrade ( void )\r
+{\r
+ /* get nbr sample */\r
+ PW_j = (in_data[PW_Start_Address+22]*256)+in_data[PW_Start_Address+23];\r
+ /* get BODY addy */\r
+ PW_m = (in_data[PW_Start_Address+20]*256)+in_data[PW_Start_Address+21] + 4;\r
+ /* get SAMP addy */\r
+ PW_k = (in_data[PW_Start_Address+28]*256)+in_data[PW_Start_Address+29] + PW_m + 4;\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_l=0 ; PW_l<PW_j ; PW_l++ )\r
+ PW_WholeSampleSize += ((in_data[32+(PW_l*8)]*256)+in_data[33+(PW_l*8)])*2;\r
+\r
+ OutputSize = PW_WholeSampleSize + PW_k + 4;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "NovoTrade Packed music", NovoTrade );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
+\r
+/*\r
+ * NovoTrade.c 2007-2010 (c) Sylvain "Asle" Chipaux\r
+ *\r
+ * 20070505 : doesn't convert pattern data\r
+ * 20100101 : Thanks to Claudio of XMP team. It's ok now.\r
+*/\r
+void Depack_NovoTrade ( void )\r
+{\r
+ uint8_t *Whatever, c1;\r
+ int32_t i=0,k=0;\r
+ uint16_t Pattern_Addresses_Table[128];\r
+ int16_t BODYaddy, SAMPaddy, nbr_sample, siz_patlist, nbr_patstored;\r
+ int32_t Total_Sample_Size=0;\r
+ int32_t Where = PW_Start_Address;\r
+ FILE *out;/*,*DEBUG;*/\r
+ \r
+ /*DEBUG = fopen("DEBUG.txt","w+b");*/\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ Where += 4;\r
+ /* title */\r
+ Whatever = (uint8_t *) malloc (2048);\r
+ BZERO ( Whatever , 2048 );\r
+ fwrite ( &in_data[Where], 16, 1, out );\r
+ fwrite ( Whatever, 4, 1, out);\r
+ Where += 16;\r
+\r
+ /* get 'BODY' addy */\r
+ BODYaddy = (in_data[Where]*256)+in_data[Where+1] + 4;\r
+ Where += 2;\r
+ /*printf ( "addy of 'BODY' : %ld\n" , k );*/\r
+\r
+ /* number of sample */\r
+ nbr_sample = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+ \r
+ /* size of the pattern list */\r
+ siz_patlist = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+ \r
+ /* number of pattern stored */\r
+ nbr_patstored = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+\r
+ /* get 'SAMP' addy */\r
+ SAMPaddy = (in_data[Where]*256)+in_data[Where+1] + BODYaddy + 4;\r
+ Where += 2;\r
+\r
+ /* sample header */\r
+ BZERO ( Whatever, 2048 );\r
+ for ( i=0 ; i<nbr_sample ; i++ )\r
+ {\r
+ /* in_data[Where] is the sample ref */\r
+ /* volume */\r
+ Whatever[25+(in_data[Where]*30)] = in_data[Where+1];\r
+ /* size */\r
+ Whatever[22+(in_data[Where]*30)] = in_data[Where+2];\r
+ Whatever[23+(in_data[Where]*30)] = in_data[Where+3];\r
+ Total_Sample_Size += ((in_data[Where+2]*256)+in_data[Where+3])*2;\r
+ /* loop start */\r
+ Whatever[26+(in_data[Where]*30)] = in_data[Where+4];\r
+ Whatever[27+(in_data[Where]*30)] = in_data[Where+5];\r
+ /* loop size */\r
+ Whatever[28+(in_data[Where]*30)] = in_data[Where+6];\r
+ Whatever[29+(in_data[Where]*30)] = in_data[Where+7];\r
+ Where += 8;\r
+ }\r
+ fwrite ( Whatever , 930 , 1 , out );\r
+\r
+ /* pattern list now */\r
+ /* Where is on it */\r
+ BZERO ( Whatever, 2048 );\r
+ for ( i=2; i<siz_patlist+2; i++ )\r
+ {\r
+ Whatever[i] = in_data[Where+1];\r
+ Where += 2;\r
+ }\r
+ Whatever[0] = (uint8_t)siz_patlist;\r
+ Whatever[1] = 0x7F;\r
+ /* PTK's tag now*/\r
+ Whatever[130] = 'M';\r
+ Whatever[131] = '.';\r
+ Whatever[132] = 'K';\r
+ Whatever[133] = '.';\r
+ fwrite ( Whatever , 134 , 1 , out );\r
+ \r
+ /* pattern addresses now */\r
+ /* Where is on it */\r
+ BZERO ( Pattern_Addresses_Table , 128*2 );\r
+ for ( i=0; i<nbr_patstored; i++ )\r
+ {\r
+ Pattern_Addresses_Table[i] = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+ }\r
+ \r
+\r
+/*fprintf(DEBUG,"BODYaddy : %d\n",BODYaddy);\r
+fprintf(DEBUG,"SAMPaddy : %d\n",SAMPaddy);\r
+fprintf(DEBUG,"nbr_sample : %d\n",nbr_sample);\r
+fprintf(DEBUG,"siz_patlist : %d\n",siz_patlist);\r
+fprintf(DEBUG,"nbr_patstored : %d\n\n",nbr_patstored);*/\r
+\r
+ /* pattern data now ... *gee* */\r
+ Where += 4;\r
+ for ( i=0 ; i<nbr_patstored ; i++ )\r
+/* for ( i=0 ; i<2 ; i++ )*/\r
+ {\r
+ BZERO ( Whatever, 2048 );\r
+/*fprintf(DEBUG,"\n-------pat %ld----\n",i);*/\r
+ Where = BODYaddy + 4 + Pattern_Addresses_Table[i];\r
+/*fprintf(DEBUG,"@ in file : %ld\n",Where);*/\r
+ for ( k=0; k<64; k++ )\r
+ {\r
+ c1 = in_data[Where+1];\r
+ if (c1 == 0x80)\r
+ {\r
+/*fprintf(DEBUG,"[%-2ld] %2x-%2x <-- end of pattern\n",k,in_data[Where],in_data[Where+1]);*/\r
+ /* pattern ends */\r
+ Where += 2;\r
+ k += 1;\r
+ break;\r
+ }\r
+ if (c1 == 0x00)\r
+ {\r
+/*fprintf(DEBUG,"[%-2ld] %2x-%2x <-- empty line\n",k,in_data[Where],in_data[Where+1]);*/\r
+ /* empty line */\r
+ Where += 2;\r
+ continue;\r
+ }\r
+ if (c1 >0x0F) \r
+ {\r
+/*fprintf(DEBUG,"[%-2ld] %2x-%2x <-- unknown case\n",k,in_data[Where],in_data[Where+1],in_data[Where+1]+1);*/\r
+ /* bypass notes .. guess */\r
+ Where += 2;\r
+ continue;\r
+ }\r
+/*fprintf(DEBUG,"[%-2ld] %2x-%2x\n",k,in_data[Where],in_data[Where+1]);*/\r
+ \r
+ Where += 2;\r
+ if ((c1 & 0x01) == 0x01)\r
+ {\r
+ Whatever[k*16] = in_data[Where];\r
+ Whatever[k*16+1] = in_data[Where+1];\r
+ Whatever[k*16+2] = in_data[Where+2];\r
+ Whatever[k*16+3] = in_data[Where+3];\r
+ Where += 4;\r
+ }\r
+ if ((c1 & 0x02) == 0x02)\r
+ {\r
+ Whatever[k*16+4] = in_data[Where];\r
+ Whatever[k*16+5] = in_data[Where+1];\r
+ Whatever[k*16+6] = in_data[Where+2];\r
+ Whatever[k*16+7] = in_data[Where+3];\r
+ Where += 4;\r
+ }\r
+ if ((c1 & 0x04) == 0x04)\r
+ {\r
+ Whatever[k*16+8] = in_data[Where];\r
+ Whatever[k*16+9] = in_data[Where+1];\r
+ Whatever[k*16+10] = in_data[Where+2];\r
+ Whatever[k*16+11] = in_data[Where+3];\r
+ Where += 4;\r
+ }\r
+ if ((c1 & 0x08) == 0x08)\r
+ {\r
+ Whatever[k*16+12] = in_data[Where];\r
+ Whatever[k*16+13] = in_data[Where+1];\r
+ Whatever[k*16+14] = in_data[Where+2];\r
+ Whatever[k*16+15] = in_data[Where+3];\r
+ Where += 4;\r
+ }\r
+/*fprintf(DEBUG,"[->] %2x%2x%2x%2x - %2x%2x%2x%2x - %2x%2x%2x%2x - %2x%2x%2x%2x\n"\r
+ ,Whatever[k*16],Whatever[k*16+1],Whatever[k*16+2],Whatever[k*16+3]\r
+ ,Whatever[k*16+4],Whatever[k*16+5],Whatever[k*16+6],Whatever[k*16+7]\r
+ ,Whatever[k*16+8],Whatever[k*16+9],Whatever[k*16+10],Whatever[k*16+11]\r
+ ,Whatever[k*16+12],Whatever[k*16+13],Whatever[k*16+14],Whatever[k*16+15]\r
+ );*/\r
+ }\r
+/*fprintf(DEBUG,"\nEND OF LOOP ?!?\n");*/\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ }\r
+ free ( Whatever );\r
+\r
+\r
+ Where = PW_Start_Address + SAMPaddy + 4;\r
+ fwrite ( &in_data[Where] , Total_Sample_Size , 1 , out );\r
+\r
+ Crap ( " NovoTrade Packer " , BAD , BAD , out );\r
+\r
+ /* fflush ( DEBUG );\r
+ fclose ( DEBUG );*/\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+\r
+}\r
--- /dev/null
+/* testPERFSONG */\r
+/* Rip_PERFSONG */\r
+/* Depack_PERFSONG */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testPERFSONG()\r
+{\r
+ /* test 1 */\r
+ PW_Start_Address = PW_i;\r
+ if ((PW_in_size - PW_Start_Address) < 12)\r
+ {\r
+ return BAD;\r
+ }\r
+ \r
+ /* whole file size */\r
+ PW_j = (in_data[PW_Start_Address+8]*256*256*256)\r
+ +(in_data[PW_Start_Address+9]*256*256)\r
+ +(in_data[PW_Start_Address+10]*256)\r
+ +in_data[PW_Start_Address+11] + 12;\r
+ \r
+ /*test 2*/\r
+ /* too big a file ? or too small ? */\r
+ if (((PW_Start_Address + PW_j) > PW_in_size) || (PW_j<802))\r
+ {\r
+ return BAD;\r
+ }\r
+ /* PW_j is the whole packed file size */\r
+\r
+\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+\r
+void Rip_PERFSONG ( void )\r
+{\r
+ /* PW_j is the whole file size */\r
+\r
+ OutputSize = PW_j;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "Perfect Song module", PerfSong );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
+\r
+\r
+/*\r
+ * PERFSONG.c 20100120 (c) Asle / ReDoX\r
+ *\r
+ * Perfect Song Player to Protracker.\r
+ * format/replayer by Seg/Darkness (~1997)\r
+ *\r
+*/\r
+\r
+void Depack_PERFSONG ( void )\r
+{\r
+ uint8_t c1=0x00,c2=0x00;\r
+ uint8_t poss[37][2];\r
+ uint8_t Max=0x00;\r
+ uint8_t Note,Smp,Fx,FxVal;\r
+ uint8_t *Whatever;\r
+ int32_t i=0,j=0,k=0,l,z;\r
+ int32_t Where=PW_Start_Address;\r
+ int32_t SmpAddresses[31];\r
+ int32_t SmpSizes[31];\r
+ int32_t BNRFullSize=0;\r
+ FILE *out;\r
+\r
+ fillPTKtable(poss);\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ Whatever = (uint8_t *) malloc (1085);\r
+ BZERO ( Whatever , 1085 );\r
+\r
+ /* retrieve full size to fetch sample text at the end */\r
+ BNRFullSize = (in_data[Where+8]*256*256*256)+\r
+ (in_data[Where+1+8]*256*256)+\r
+ (in_data[Where+2+8]*256)+\r
+ in_data[Where+3+8] + 12;\r
+ BNRFullSize -= 702; /* to reach the beginning of the text area */\r
+ printf ( "BNRFullSize at : %d\n",BNRFullSize );\r
+\r
+ /* get title */\r
+ for (l=0; l<20 ; l++)\r
+ Whatever[l] = in_data[Where+BNRFullSize+l];\r
+ BNRFullSize += 0x14;\r
+\r
+ /* 31 samples */\r
+ Where += 12; /* points on first psmp desc */\r
+ for ( i=0 ; i<31 ; i++ )\r
+ {\r
+ /* read sample address */\r
+ SmpAddresses[i]=(in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+\r
+ /* read loop start address */\r
+ j=(in_data[Where+4]*256*256*256)+\r
+ (in_data[Where+5]*256*256)+\r
+ (in_data[Where+6]*256)+\r
+ in_data[Where+7];\r
+ /* get smptext */\r
+ for (l=0; l<21 ; l++)\r
+ Whatever[i*30+20+l] = in_data[PW_Start_Address+BNRFullSize+l];\r
+ BNRFullSize += 0x16;\r
+ /* read & write sample size */\r
+ Whatever[i*30+42] = in_data[Where+8];\r
+ Whatever[i*30+43] = in_data[Where+9];\r
+ SmpSizes[i] = (((Whatever[i*30+42]*256)+Whatever[i*30+43])*2);\r
+ Whatever[i*30+44] = in_data[Where+12]; /* fine ? */\r
+ Whatever[i*30+45] = in_data[Where+13]; /* vol */\r
+ Whatever[i*30+48] = in_data[Where+10]; /*replen*/\r
+ Whatever[i*30+49] = in_data[Where+11];\r
+\r
+ /* calculate loop start value */\r
+ k = (j - SmpAddresses[i])/2;\r
+\r
+ /* write loop start */\r
+ /* use of htonl() suggested by Xigh !.*/\r
+ z = htonl(k);\r
+ Whatever[i*30+46] = *((uint8_t *)&z+2);\r
+ Whatever[i*30+47] = *((uint8_t *)&z+3);\r
+\r
+ Where += 16;\r
+ }\r
+\r
+ /* patternlist size */\r
+ Whatever[950] = in_data[Where+1]+1;\r
+ Whatever[951] = 0x7f;\r
+ Where += 2;\r
+\r
+ /* pattern table */\r
+ Max = 0x00;\r
+ for ( c1=0 ; c1<128 ; c1++ )\r
+ {\r
+ j=(in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ Whatever[952+c1] = (j-0x3fe)/1024;\r
+ if ( Whatever[952+c1] > Max )\r
+ Max = Whatever[952+c1];\r
+ Where += 4;\r
+ }\r
+ Max += 1;\r
+ /*printf ( "number of pattern : %d\n" , Max );*/\r
+\r
+ /* write Protracker's ID */\r
+ Whatever[1080] = 'M';\r
+ Whatever[1081] = '.';\r
+ Whatever[1082] = 'K';\r
+ Whatever[1083] = '.';\r
+\r
+ fwrite ( Whatever , 1084 , 1 , out );\r
+\r
+ /* pattern data */\r
+ /* Where is already pointing on the 1st note of the 1st pattern */\r
+ for ( i=0 ; i<Max ; i++ )\r
+ {\r
+ BZERO ( Whatever , 1085 );\r
+ for ( j=0 ; j<256 ; j++ )\r
+ {\r
+ Smp = in_data[Where+j*4+1];\r
+ Note = in_data[Where+j*4];\r
+ Fx = in_data[Where+j*4+2];\r
+ FxVal = in_data[Where+j*4+3];\r
+ /*printf ("[%lx] %x-%x-%x-%x\n",j*4+Where\r
+ ,in_data[Where+j*4]\r
+ ,in_data[Where+j*4+1]\r
+ ,in_data[Where+j*4+2]\r
+ ,in_data[Where+j*4+3]);*/\r
+ switch ( Fx )\r
+ {\r
+ case 0x00: /* no Fx */\r
+ Fx = 0x00;\r
+ break;\r
+\r
+ case 0x04: /* arpeggio */\r
+ Fx = 0x00;\r
+ break;\r
+\r
+ case 0x08: /* portamento up */\r
+ Fx = 0x01;\r
+ break;\r
+\r
+ case 0x0C: /* portamento down */\r
+ Fx = 0x02;\r
+ break;\r
+\r
+ case 0x10: /* tone portamento with no FxVal */\r
+ Fx = 0x03;\r
+ break;\r
+\r
+ case 0x14: /* tone portamento */\r
+ Fx = 0x03;\r
+ break;\r
+\r
+ case 0x18: /* vibrato with no FxVal */\r
+ Fx = 0x04;\r
+ break;\r
+\r
+ case 0x1C: /* vibrato */\r
+ Fx = 0x04;\r
+ break;\r
+\r
+ case 0x20: /* tone portamento + vol slide DOWN */\r
+ Fx = 0x05;\r
+ break;\r
+\r
+ case 0x24: /* vibrato + volume slide UP */\r
+ Fx = 0x06;\r
+ c1 = (FxVal << 4)&0xf0;\r
+ c2 = (FxVal >> 4)&0x0f;\r
+ FxVal = c1|c2;\r
+ break;\r
+\r
+ case 0x28: /* vibrato + volume slide DOWN */\r
+ Fx = 0x06;\r
+ break;\r
+\r
+ case 0x2c: /* vibrato + volume slide DOWN */\r
+ Fx = 0x06;\r
+ break;\r
+\r
+ case 0x30: /* tremolo */\r
+ Fx = 0x07;\r
+ break;\r
+\r
+ case 0x38: /* sample offset */\r
+ Fx = 0x09;\r
+ break;\r
+\r
+ case 0x3C: /* volume slide up */\r
+ Fx = 0x0A;\r
+ c1 = (FxVal << 4)&0xf0;\r
+ c2 = (FxVal >> 4)&0x0f;\r
+ FxVal = c1|c2;\r
+ break;\r
+\r
+ case 0x40: /* volume slide down */\r
+ Fx = 0x0A;\r
+ break;\r
+\r
+ case 0x44: /* position jump */\r
+ Fx = 0x0B;\r
+ break;\r
+\r
+ case 0x48: /* set volume */\r
+ Fx = 0x0C;\r
+ break;\r
+\r
+ case 0x4C: /* pattern break */\r
+ Fx = 0x0D;\r
+ break;\r
+\r
+ case 0x50: /* set speed */\r
+ Fx = 0x0F;\r
+ break;\r
+\r
+ case 0x58: /* set filter */\r
+ Fx = 0x0E;\r
+ FxVal = 0x01;\r
+ break;\r
+\r
+ case 0x5C: /* fine slide up */\r
+ Fx = 0x0E;\r
+ FxVal |= 0x10;\r
+ break;\r
+\r
+ case 0x60: /* fine slide down */\r
+ Fx = 0x0E;\r
+ FxVal |= 0x20;\r
+ break;\r
+\r
+ case 0x74: /* fine volume slide up */\r
+ Fx = 0x0E;\r
+ FxVal |= 0xa0;\r
+ break;\r
+\r
+ case 0x78: /* fine volume slide down */\r
+ Fx = 0x0E;\r
+ FxVal |= 0xb0;\r
+ break;\r
+\r
+ case 0x7c: /* pattern delay */\r
+ Fx = 0x0E;\r
+ FxVal |= 0xe0;\r
+ break;\r
+\r
+ default:\r
+ printf ( "%x : at %d (out:%ld)\n" , Fx , Where+(j*4),ftell(out) );\r
+ Fx = 0x00;\r
+ break;\r
+ }\r
+ Note /= 2;\r
+ c1 = (Smp>>4) & 0x0f;\r
+ c2 = (Smp<<4) & 0xf0;\r
+ Smp = c1 | c2;\r
+ Whatever[j*4] = (Smp & 0xf0);\r
+ Whatever[j*4] |= poss[(Note)][0];\r
+ Whatever[j*4+1] = poss[(Note)][1];\r
+ Whatever[j*4+2] = ((Smp<<4)&0xf0);\r
+ Whatever[j*4+2] |= Fx;\r
+ Whatever[j*4+3] = FxVal;\r
+ }\r
+ Where += 1024;\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ printf ( "pattern %d written (Where : %d)\n" , i ,Where);\r
+ }\r
+ free ( Whatever );\r
+\r
+ /* sample data */\r
+ for (i=0; i<31; i++)\r
+ {\r
+ if ( SmpSizes[i] == 0 )\r
+ continue;\r
+ fwrite ( &in_data[PW_Start_Address + SmpAddresses[i]] , SmpSizes[i] , 1 , out );\r
+ }\r
+\r
+ /* no crap as it destroys sample text */\r
+ /*Crap ( " PERFSONG Packer " , BAD , BAD , out );*/\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
#include "extern.h"
-short testPHA ( void )
+int16_t testPHA ( void )
{
/* test #1 */
if ( PW_i < 11 )
*/
void Depack_PHA ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar poss[37][2];
- Uchar *Whole_Pattern_Data;
- Uchar *Pattern;
- Uchar *Whatever;
- Uchar Old_Note_Value[4][4];
- Uchar Note,Smp,Fx,FxVal;
- Uchar PatMax=0x00;
- long MyPatList[128];
- long Pats_Address[128];
- long i=0,j=0,k=0;
- long Start_Pat_Address=9999999l;
- long Whole_Pattern_Data_Size;
- long Whole_Sample_Size=0;
- long Sample_Data_Address;
- long Where = PW_Start_Address;
- short Old_cpt[4];
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t poss[37][2];
+ uint8_t *Whole_Pattern_Data;
+ uint8_t *Pattern;
+ uint8_t *Whatever;
+ uint8_t Old_Note_Value[4][4];
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t PatMax=0x00;
+ int32_t MyPatList[128];
+ int32_t Pats_Address[128];
+ int32_t i=0,j=0,k=0;
+ int32_t Start_Pat_Address=9999999l;
+ int32_t Whole_Pattern_Data_Size;
+ int32_t Whole_Sample_Size=0;
+ int32_t Sample_Data_Address;
+ int32_t Where = PW_Start_Address;
+ int16_t Old_cpt[4];
FILE *out;/*,*info;*/
if ( Save_Status == BAD )
BZERO ( Pats_Address , 128*4 );
BZERO ( Old_Note_Value , 4*4 );
BZERO ( Old_cpt , 4*2 );
- BZERO ( MyPatList, 128*sizeof(long));
+ BZERO ( MyPatList, 128*sizeof(int32_t ));
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* info = fopen ( "info", "w+b");*/
for ( i=0 ; i<20 ; i++ ) /* title */
fwrite ( &c1 , 1 , 1 , out );
- Whatever = (Uchar *) malloc (64);
+ Whatever = (uint8_t *) malloc (64);
for ( i=0 ; i<31 ; i++ )
{
BZERO ( Whatever, 64 );
Whole_Sample_Size += (((in_data[Where]*256)+in_data[Where+1])*2);
/* finetune */
- c1 = ( Uchar ) (((in_data[Where+12]*256)+in_data[Where+13])/0x48);
+ c1 = ( uint8_t ) (((in_data[Where+12]*256)+in_data[Where+13])/0x48);
fwrite ( &c1 , 1 , 1 , out );
/* volume */
/* pattern datas */
/* read ALL pattern data */
Whole_Pattern_Data_Size = OutputSize - Start_Pat_Address;
- Whole_Pattern_Data = (Uchar *) malloc ( Whole_Pattern_Data_Size );
+ Whole_Pattern_Data = (uint8_t *) malloc ( Whole_Pattern_Data_Size );
Where = Start_Pat_Address + PW_Start_Address;
for (i=0;i<Whole_Pattern_Data_Size;i++)Whole_Pattern_Data[i] = in_data[Where+i];
/* printf ( "Whole pattern data size : %ld\n" , Whole_Pattern_Data_Size );*/
- Pattern = (Uchar *) malloc ( 65536 );
+ Pattern = (uint8_t *) malloc ( 65536 );
BZERO ( Pattern , 65536 );
#include "extern.h"
-short testPolka ( void )
+int16_t testPolka ( void )
{
/* test #1 */
if ( (PW_i < 0x438) || ((PW_i+0x830)>PW_in_size))
void Depack_Polka ( void )
{
- Uchar poss[37][2];
- Uchar c1=0x00,c2=0x00;
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j;
- long Where = PW_Start_Address;
+ uint8_t poss[37][2];
+ uint8_t c1=0x00,c2=0x00;
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j;
+ int32_t Where = PW_Start_Address;
FILE *out;
unsigned char Whatever[4];
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* takes care of header */
/* Power Music */
-short testPM ( void )
+int16_t testPM ( void )
{
/* test 1 */
if ( PW_i < 1080 )
void Depack_PM ( void )
{
signed char *Smp_Data;
- Uchar c1=0x00,c2=0x00;
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j;
- long Where = PW_Start_Address;
+ uint8_t c1=0x00,c2=0x00;
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* write whole header */
#include "extern.h"
-short testPowerpacker23 ( void )
+int16_t testPowerpacker23 ( void )
{
PW_Start_Address = PW_i;
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
+ uint8_t * Amiga_EXE_Header_Block;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
#include "extern.h"
-short testPowerpacker30 ( void )
+int16_t testPowerpacker30 ( void )
{
PW_Start_Address = PW_i;
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
+ uint8_t * Amiga_EXE_Header_Block;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
#include "extern.h"
-short testPowerpacker4lib ( void )
+int16_t testPowerpacker4lib ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 60;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
#include "extern.h"
-short testPowerpacker40 ( void )
+int16_t testPowerpacker40 ( void )
{
PW_Start_Address = PW_i;
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
+ uint8_t * Amiga_EXE_Header_Block;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
#include "globals.h"
#include "extern.h"
-
-short testPP10 ( void )
+/*
+ * 20100902 : better note test to lower the number of fake found
+ * 20100902 : test if patternlist ends with 0x00 values
+*/
+int16_t testPP10 ( void )
{
/* test #1 */
if ( (PW_i < 3) || ((PW_i+246)>=PW_in_size))
}
/* test #2 */
+ /* various test about sample headers */
PW_WholeSampleSize = 0;
for ( PW_j=0 ; PW_j<31 ; PW_j++ )
{
}
}
+ /* test if sample data is too small */
if ( PW_WholeSampleSize <= 2 )
{
/*printf ( "#2,4 (start:%ld)\n" , PW_Start_Address );*/
/* PW_WholeSampleSize = whole sample size */
/* test #3 about size of pattern list */
- PW_l = in_data[PW_Start_Address+248];
- if ( (PW_l > 127) || (PW_l==0) )
+ PW_m = in_data[PW_Start_Address+248];
+ if ( (PW_m > 127) || (PW_m==0) )
{
/*printf ( "#3 (start:%ld)\n" , PW_Start_Address );*/
return BAD;
}
/* get the highest track value */
+ /* PW_m is the patterlist size */
PW_k=0;
- for ( PW_j=0 ; PW_j<512 ; PW_j++ )
+ for (PW_n=0; PW_n<4; PW_n++)
{
- PW_l = in_data[PW_Start_Address+250+PW_j];
- if ( PW_l>PW_k )
- PW_k = PW_l;
+ for ( PW_j=0 ; PW_j<128 ; PW_j++ )
+ {
+ PW_l = in_data[PW_Start_Address+250+PW_j+(PW_n*128)];
+ if ( PW_l>PW_k )
+ PW_k = PW_l;
+ /* 20100902:test if patternlist ends with 0x00 values */
+ if ( (PW_j>PW_m) && (in_data[PW_Start_Address+250+PW_j+(PW_n*128)]!=0x00))
+ {
+/*printf ( "#3 bis (start:%ld)(unclean patternlist at %ld:%x)(PW_j:%ld)(PW_n:%ld))\n"
+ , PW_Start_Address, 250+PW_j+(PW_n*128), in_data[PW_Start_Address+250+PW_j+(PW_n*128)],PW_j,PW_n);*/
+ return BAD;
+ }
+ }
}
/* PW_k is the highest track number */
PW_k += 1;
PW_k *= 64;
+ /* test if it's not outside the file */
if ( PW_Start_Address + 762 + (PW_k*4) > PW_in_size )
{
/*printf ( "#4 (start:%ld)\n" , PW_Start_Address );*/
/* track data test */
PW_l=0;
for ( PW_j=0 ; PW_j<PW_k ; PW_j++ )
- {
- if ( in_data[PW_Start_Address+762+PW_j*4] > 0x13 )
+ { /*20010902:better note test*/
+ if ( (in_data[PW_Start_Address+762+(PW_j*4)]&0xf0) > 0x10 )
{
-/*printf ( "#3,1 (start:%ld)\n" , PW_Start_Address );*/
+/*printf ( "#3,1 (start:%ld) (note[0]:%x)\n" , PW_Start_Address,in_data[PW_Start_Address+762+PW_j*4] );*/
+ return BAD;
+ }
+ if ( (in_data[PW_Start_Address+762+(PW_j*4)]&0x0f) > 0x03 )
+ { /*20010902:better note test*/
+/*printf ( "#3,1,0 (start:%ld)\n" , PW_Start_Address );*/
return BAD;
}
if ( ((in_data[PW_Start_Address+762+PW_j*4]&0x0f) == 0x00 ) && (in_data[PW_Start_Address+763+PW_j*4] < 0x71) && (in_data[PW_Start_Address+763+PW_j*4] != 0x00))
Save_Rip ( "ProPacker v1.0 Exe-file", PP10 );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */
+ PW_i += 4; /* 3 should do but call it "just to be sure" :) */
}
void Depack_PP10 ( void )
{
- Uchar *Header, *Pattern;
- Ulong ReadTrkPat[128][4], ReadPat[128];
- long Highest_Track = 0;
- long i=0,j=0,k=0,l=0,m=0;
- long WholeSampleSize=0;
- long Where=PW_Start_Address;
+ uint8_t *Header, *Pattern;
+ uint32_t ReadTrkPat[128][4], ReadPat[128];
+ int32_t Highest_Track = 0;
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t WholeSampleSize=0;
+ int32_t Where=PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Header = (Uchar *)malloc(1084);
- Pattern = (Uchar *)malloc(1024);
+ Header = (uint8_t *)malloc(1084);
+ Pattern = (uint8_t *)malloc(1024);
BZERO ( Header , 1084 );
BZERO ( Pattern , 1024 );
j--;
l++;
}
- if ( l != Header[950] )
- l -= 1;
/* write ptk's ID */
}
for (k=0;k<4;k++) /* loop on 4 tracks' refs*/
{
- long d;
+ int32_t d;
/* loop on notes */
for (d=0;d<64;d++)
{
/* read one ref value to be fetch in the reference table */
- long val = Where+(ReadTrkPat[j][k]*256)+(d*4);
+ int32_t val = Where+(ReadTrkPat[j][k]*256)+(d*4);
Pattern[k*4+d*16] = in_data[val];
Pattern[k*4+d*16+1] = in_data[val + 1];
#include "extern.h"
-short testPP21 ( void )
+int16_t testPP21 ( void )
{
/* test #1 */
- if ( (PW_i < 3) || ((PW_i+891)>=PW_in_size))
+ if ( PW_i < 3 )
+ {
+/*printf ( "#1 (PW_i:%ld)\n" , PW_i );*/
+ return BAD;
+ }
+ if ( (PW_i+891) >= PW_in_size)
{
/*printf ( "#1 (PW_i:%ld)\n" , PW_i );*/
return BAD;
Save_Rip ( "ProPacker v2.1 module", Propacker_21 );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */
+ PW_i += 4; /* 3 should do but call it "just to be sure" :) */
}
void Depack_PP21 ( void )
{
- 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;
+ uint8_t *Header, *Pattern;
+ uint32_t ReadTrkPat[128][4], ReadPat[128];
+ int32_t Highest_Track = 0;
+ int32_t whereTableRef;
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t Total_Sample_Size=0;
+ int32_t Where=PW_Start_Address;
FILE *out;
/*FILE *info;*/
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*info = PW_fopen ( "info.txt" , "w+b");*/
- Header = (Uchar *)malloc(1084);
- Pattern = (Uchar *)malloc(1024);
+ Header = (uint8_t *)malloc(1084);
+ Pattern = (uint8_t *)malloc(1024);
BZERO ( Header , 1084 );
BZERO ( Pattern , 1024 );
Where += 1;
/* now, where = 0xFA*/
- for (i=0;i<Header[950];i++)
+ for (i=0;i<128;i++)
{
ReadPat[i] = (in_data[Where+i]*256*256*256) +
(in_data[Where+i+128]*256*256) +
}
for (k=0;k<4;k++) /* loop on 4 tracks' refs*/
{
- long d;
+ int32_t d;
/* loop on notes */
for (d=0;d<64;d++)
{
/* read one ref value to be fetch in the reference table */
- long val = (in_data[Where+(ReadTrkPat[j][k]*128)+(d*2)])*256
+ int32_t val = (in_data[Where+(ReadTrkPat[j][k]*128)+(d*2)])*256
+ in_data[Where+(ReadTrkPat[j][k]*128)+(d*2)+1];
Pattern[k*4+d*16] = in_data[whereTableRef + (val*4)];
#include "extern.h"
-short testPP30 ( void )
+int16_t testPP30 ( void )
{
/* test #1 */
if ( (PW_i < 3) || ((PW_i+891)>=PW_in_size))
Save_Rip ( "ProPacker v3.0 module", Propacker_30 );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */
+ PW_i += 4; /* 3 should do but call it "just to be sure" :) */
}
void Depack_PP30 ( void )
{
- 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;
+ uint8_t *Header, *Pattern;
+ uint32_t ReadTrkPat[128][4], ReadPat[128];
+ int32_t Highest_Track = 0;
+ int32_t whereTableRef;
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t Total_Sample_Size=0;
+ int32_t Where=PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Header = (Uchar *)malloc(1084);
- Pattern = (Uchar *)malloc(1024);
+ Header = (uint8_t *)malloc(1084);
+ Pattern = (uint8_t *)malloc(1024);
BZERO ( Header , 1084 );
BZERO ( Pattern , 1024 );
}
for (k=0;k<4;k++) /* loop on 4 tracks' refs*/
{
- long d;
+ int32_t d;
/* loop on notes */
for (d=0;d<64;d++)
{
/* read one ref value to be fetch in the reference table */
- long val = (in_data[Where+(ReadTrkPat[j][k]*128)+(d*2)])*256
+ int32_t val = (in_data[Where+(ReadTrkPat[j][k]*128)+(d*2)])*256
+ in_data[Where+(ReadTrkPat[j][k]*128)+(d*2)+1];
Pattern[k*4+d*16] = in_data[whereTableRef + val];
#include "extern.h"
-short testPM01 ( void )
+int16_t testPM01 ( void )
{
/* test #1 */
if ( (PW_i < 3) || ((PW_Start_Address + 766)>PW_in_size) )
*/
void Depack_PM01 ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar Pat_Pos;
- Uchar poss[37][2];
- Uchar *Whatever;
- Uchar *PatternData;
- Uchar Smp_Fine_Table[31];
- Uchar Old_Smp_Nbr[4];
- long i=0,j=0,k=0,l=0;
- long WholeSampleSize=0;
- long Pattern_Address[128];
- long Where = PW_Start_Address;
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t Pat_Pos;
+ uint8_t poss[37][2];
+ uint8_t *Whatever;
+ uint8_t *PatternData;
+ uint8_t Smp_Fine_Table[31];
+ uint8_t Old_Smp_Nbr[4];
+ int32_t i=0,j=0,k=0,l=0;
+ int32_t WholeSampleSize=0;
+ int32_t Pattern_Address[128];
+ int32_t Where = PW_Start_Address;
FILE *out;
#include "tuning.h"
BZERO ( Smp_Fine_Table , 31 );
BZERO ( Old_Smp_Nbr , 4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* write title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
/* title */
fwrite ( Whatever , 20 , 1 , out );
/* read and XOR pattern data */
free ( Whatever );
- Whatever = (Uchar *) malloc ( j );
- PatternData = (Uchar *) malloc ( j );
+ Whatever = (uint8_t *) malloc ( j );
+ PatternData = (uint8_t *) malloc ( j );
for ( k=0 ; k<j ; k++ )
{
if ( k%4 == 3 )
-short testPM10c ( void )
+int16_t testPM10c ( void )
{
/* test 1 */
if ( (PW_Start_Address + 4452) > PW_in_size )
*
* update 20 mar 2003 (it's war time again .. brrrr)
* - removed all open() funcs.
- * - optimized more than quite a bit (src is 5kb shorter !)
+ * - optimized more than quite a bit (src is 5kb int16_t er !)
+ *
+ * update 08 jan 2010
+ * - bug fix in patternlist generation
*/
#define ON 0
void Depack_PM10c ( void )
{
- Uchar c1=0x00,c2=0x00;
- short Ref_Max=0;
- long Pats_Address[128];
- long Read_Pats_Address[128];
- Uchar NOP=0x00; /* number of pattern */
- Uchar *ReferenceTable;
- Uchar *Pattern;
- long i=0,j=0,k=0,l=0,m=0;
- long Total_Sample_Size=0;
- long PatDataSize=0l;
- long SDAV=0l;
- Uchar FLAG=OFF;
- Uchar Smp_Fine_Table[31];
- Uchar poss[37][2];
- Uchar OldSmpValue[4];
- Uchar *Whatever;
- Uchar *WholePatternData;
- long Where = PW_Start_Address;
- short Period;
+ uint8_t c1=0x00,c2=0x00;
+ int16_t Ref_Max=0;
+ int32_t Pats_Address[128];
+ int32_t Read_Pats_Address[128];
+ uint8_t NOP=0x00; /* number of pattern */
+ uint8_t *ReferenceTable;
+ uint8_t *Pattern;
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t Total_Sample_Size=0;
+ int32_t PatDataSize=0l;
+ int32_t SDAV=0l;
+ uint8_t FLAG=OFF;
+ uint8_t Smp_Fine_Table[31];
+ uint8_t poss[37][2];
+ uint8_t OldSmpValue[4];
+ uint8_t *Whatever;
+ uint8_t *WholePatternData;
+ int32_t Where = PW_Start_Address;
+ int16_t Period;
FILE *out;/*,*info;*/
#include "tuning.h"
BZERO ( OldSmpValue , 4 );
BZERO ( Pats_Address , 128*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*info = fopen ( "info", "w+b");*/
- Whatever = (Uchar *) malloc (128);
- BZERO (Whatever,128);
-
+ Whatever = (uint8_t *) malloc (1085);
+ BZERO (Whatever, 1085);
/* title */
- fwrite ( &Whatever[32] , 20 , 1 , out );
+ /*fwrite ( &Whatever[32] , 20 , 1 , out );*/
/* bypass replaycode routine */
Where = PW_Start_Address + 4460;
for ( i=0 ; i<31 ; i++ )
{
/*sample name*/
- fwrite ( &Whatever[32] ,22 , 1 , out );
-
- fwrite ( &in_data[Where], 8, 1, out );
+ /*fwrite ( &Whatever[32] ,22 , 1 , out );*/
+ Whatever[42+30*i] = in_data[Where];
+ Whatever[43+30*i] = in_data[Where+1];
+ Whatever[44+30*i] = in_data[Where+2];
+ Whatever[45+30*i] = in_data[Where+3];
+ Whatever[46+30*i] = in_data[Where+4];
+ Whatever[47+30*i] = in_data[Where+5];
+ Whatever[48+30*i] = in_data[Where+6];
+ Whatever[49+30*i] = in_data[Where+7];
+ /*fwrite ( &in_data[Where], 8, 1, out );*/
/* whole sample size */
Total_Sample_Size += (((in_data[Where]*256)+in_data[Where+1])*2);
/* finetune */
Where = PW_Start_Address + PATTERN_DATA_ADDY;
/* now, reading all pattern data to get the max value of note */
- WholePatternData = (Uchar *) malloc (PatDataSize+1);
+ WholePatternData = (uint8_t *) malloc (PatDataSize+1);
BZERO (WholePatternData, PatDataSize+1);
for ( j=0 ; j<PatDataSize ; j+=2 )
{
/* read "reference Table" */
Ref_Max += 1; /* coz 1st value is 0 ! */
- i = Ref_Max * 4; /* coz each block is 4 bytes long */
- ReferenceTable = (Uchar *) malloc ( i+1 );
+ i = Ref_Max * 4; /* coz each block is 4 bytes int32_t */
+ ReferenceTable = (uint8_t *) malloc ( i+1 );
BZERO ( ReferenceTable, i+1 );
for ( j=0 ; j<i ; j++) ReferenceTable[j] = in_data[Where+j];
c1=0; /* will count patterns */
k=0; /* current note number */
- Pattern = (Uchar *) malloc (65536);
+ Pattern = (uint8_t *) malloc (65536);
BZERO (Pattern, 65536);
i=0;
for ( j=0 ; j<PatDataSize ; j+=2 )
/* pattern table lenght */
Where = PW_Start_Address + 4708;
NOP = ((in_data[Where]*256)+in_data[Where+1])/4;
- fwrite ( &NOP , 1 , 1 , out );
+ Whatever[950] = NOP;
+ /*fwrite ( &NOP , 1 , 1 , out );*/
- Whatever[0] = 0x7f;
- fwrite ( &Whatever[0], 1, 1, out );
+ Whatever[951] = 0x7f;
+ /*Whatever[0] = 0x7f;*/
+ /*fwrite ( &Whatever[0], 1, 1, out );*/
/* write pattern table */
- BZERO ( Whatever, 128 );
+ /*BZERO ( Whatever, 128 );*/
for ( c2=0; c2<128 ; c2+=0x01 )
- for ( i=0 ; i<NOP ; i++ )
+ for ( i=0 ; i<c1 ; i++ )
if ( Pats_Address[c2] == Read_Pats_Address[i])
- Whatever[c2] = (Uchar) i;
- while ( i<128 )
- Whatever[i++] = 0x00;
- fwrite ( &Whatever[0], 128, 1, out );
+ Whatever[952+c2] = (uint8_t) i;
+ /*Whatever[c2] = (uint8_t) i;*/
+ while ( NOP<128 )
+ {
+ Whatever[952+NOP] = 0x00;
+ NOP++;
+ }
+ /*fwrite ( &Whatever[0], 128, 1, out );*/
/* write tag */
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
+ Whatever[1080] = 'M';
+ Whatever[1081] = '.';
+ Whatever[1082] = 'K';
+ Whatever[1083] = '.';
- fwrite ( &Whatever[0] , 1 , 1 , out );
+ /*fwrite ( &Whatever[0] , 1 , 1 , out );
fwrite ( &Whatever[1] , 1 , 1 , out );
fwrite ( &Whatever[2] , 1 , 1 , out );
- fwrite ( &Whatever[1] , 1 , 1 , out );
+ fwrite ( &Whatever[1] , 1 , 1 , out );*/
+ fwrite (Whatever, 1, 1084, out);
free ( Whatever );
#include "extern.h"
-short testPMZ ( void )
+int16_t testPMZ ( void )
{
PW_Start_Address = PW_i;
}
/* test 2 */
- if ( in_data[PW_Start_Address + 21] != 0xd2 )
+/* if ( in_data[PW_Start_Address + 21] != 0xd2 )
{
return BAD;
- }
+ }*/
/* test 3 */
PW_j = (in_data[PW_Start_Address+4456]*256*256*256)+(in_data[PW_Start_Address+4457]*256*256)+(in_data[PW_Start_Address+4458]*256)+in_data[PW_Start_Address+4459];
*
* update 20 mar 2003 (it's war time again .. brrrr)
* - removed all open() funcs.
- * - optimized more than quite a bit (src is 5kb shorter !)
+ * - optimized more than quite a bit (src is 5kb int16_t er !)
*
* update 07 jan 2010
* - bug fix in patternlist generation
void Depack_PM18a ( void )
{
- Uchar c1=0x00,c2=0x00;
- short Ref_Max=0;
- long Pats_Address[128];
- long Read_Pats_Address[128];
- Uchar NOP=0x00; /* number of pattern */
- Uchar *ReferenceTable;
- Uchar *Pattern;
- long i=0,j=0,k=0,l=0,m=0;
- long Total_Sample_Size=0;
- long PatDataSize=0l;
- long SDAV=0l;
- Uchar FLAG=OFF;
- Uchar Smp_Fine_Table[31];
- Uchar poss[37][2];
- Uchar OldSmpValue[4];
- short Period;
- Uchar *Whatever;
- long Where = PW_Start_Address;
- Uchar *WholePatternData;
+ uint8_t c1=0x00,c2=0x00;
+ int16_t Ref_Max=0;
+ int32_t Pats_Address[128];
+ int32_t Read_Pats_Address[128];
+ uint8_t NOP=0x00; /* number of pattern */
+ uint8_t *ReferenceTable;
+ uint8_t *Pattern;
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t Total_Sample_Size=0;
+ int32_t PatDataSize=0l;
+ int32_t SDAV=0l;
+ uint8_t FLAG=OFF;
+ uint8_t Smp_Fine_Table[31];
+ uint8_t poss[37][2];
+ uint8_t OldSmpValue[4];
+ int16_t Period;
+ uint8_t *Whatever;
+ int32_t Where = PW_Start_Address;
+ uint8_t *WholePatternData;
FILE *out;
- /*FILE *info;*/
- /*info = fopen ("info.txt","w+b");*/
+ /*FILE *info;
+ info = fopen ("info.txt","w+b");*/
#include "tuning.h"
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
BZERO ( Smp_Fine_Table , 31 );
BZERO ( OldSmpValue , 4 );
BZERO ( Pats_Address , 128*4 );
- Whatever = (Uchar *) malloc (1085);
+ Whatever = (uint8_t *) malloc (1085);
BZERO (Whatever, 1085);
/* title */
/*fwrite ( &Whatever[0] , 20 , 1 , out );*/
Whatever[950] = NOP;
Where += 2;
- /*printf ( "Number of patterns : %d\n" , NOP );*/
+ /*printf ( "\nNumber of patterns : %d\n" , NOP );*/
/* NoiseTracker restart byte */
/*Whatever[0] = 0x7f;*/
Where += 4;
}
-
/* a little pre-calc code ... no other way to deal with these unknown pattern data sizes ! :( */
Where = PW_Start_Address + 4460;
PatDataSize = (in_data[Where]*256*256*256)+
(in_data[Where+1]*256*256)+
(in_data[Where+2]*256)+
in_data[Where+3];
+
/* go back to pattern data starting address */
Where = PW_Start_Address + 5226;
/* now, reading all pattern data to get the max value of note */
- WholePatternData = (Uchar *) malloc (PatDataSize+1);
+ if (!(WholePatternData = (uint8_t *) malloc (PatDataSize+1)))
+ {
+ /*printf ("can't allocate %ld bytes\n",PatDataSize+1);*/
+ return;
+ }
+/*printf ("Where : %ld (PatDataSize:%ld)\n",Where,PatDataSize);*/
BZERO (WholePatternData, PatDataSize+1);
for ( j=0 ; j<PatDataSize ; j+=2 )
{
Ref_Max = ((WholePatternData[j]*256)+WholePatternData[j+1]);
}
Where += PatDataSize;
+/*printf ("Where : %ld (Ref_Max:%ld)\n",Where,Ref_Max);*/
/* read "reference Table" */
Ref_Max += 1; /* coz 1st value is 0 ! */
- i = Ref_Max * 4; /* coz each block is 4 bytes long */
- ReferenceTable = (Uchar *) malloc ( i );
+ i = Ref_Max * 4; /* coz each block is 4 bytes int32_t */
+ if (!(ReferenceTable = (uint8_t *) malloc ( i+1 )))
+ {
+ /*printf ("can't allocate %ld bytes\n",i+1);*/
+ return;
+ }
+
BZERO ( ReferenceTable, i+1 );
for ( j=0 ; j<i ; j++) ReferenceTable[j] = in_data[Where+j];
c1=0; /* will count patterns */
k=0; /* current note number */
- Pattern = (Uchar *) malloc (65536);
- BZERO (Pattern, 65536);
+ if (!(Pattern = (uint8_t *) malloc (64*1024)))
+ {
+ /*printf ("can't allocate 65536 bytes\n");*/
+ return;
+ }
+ /*BZERO (Pattern, 65536);*/
+ for (i=0;i<65536;i++) Pattern[i] = 0x00;
i=0;
for ( j=0 ; j<PatDataSize ; j+=2 )
{
{
Read_Pats_Address[c1] = j;
/*fprintf ( info, " -> new pattern %2d (addy :%ld)\n", c1, j+5226 );*/
+ fflush (stdout);
c1 += 0x01;
}
Pattern[i+2] = ReferenceTable[m+2];
Pattern[i+3] = ReferenceTable[m+3];
- /*fprintf ( info, "[%4x][%3ld][%ld]: %2x %2x %2x %2x", j,i,k%4,Pattern[i],Pattern[i+1],Pattern[i+2],Pattern[i+3]);*/
+ /*printf ( "[%4x][%3ld][%ld]: %2x %2x %2x %2x", j,i,k%4,Pattern[i],Pattern[i+1],Pattern[i+2],Pattern[i+3]);*/
c2 = ((Pattern[i+2]>>4)&0x0f) | (Pattern[i]&0xf0);
if ( c2 != 0x00 )
for ( c2=0; c2<128 ; c2+=0x01 )
for ( i=0 ; i<c1 ; i++ )
if ( Pats_Address[c2] == Read_Pats_Address[i])
- Whatever[952+c2] = (Uchar) i;
+ Whatever[952+c2] = (uint8_t) i;
while ( NOP<128 )
{
Whatever[952+NOP] = 0x00;
-
/* testPM2() */
/* Rip_PM20() */
/* Depack_PM20() */
#include "extern.h"
-short testPM2 ( void )
+int16_t testPM2 ( void )
{
PW_Start_Address = PW_i;
/* test 1 */
void Depack_PM20 ( void )
{
- //Uchar c1=0x00;
- short Ref_Max=0;
- long Pats_Address[128],Pats_Address_infile[128];
- Uchar NOP=0x00; /* number of pattern */
- Uchar *ReferenceTable;
- Uchar *Pattern;
- long i=0,j;
- long Total_Sample_Size=0;
- long PatDataSize=0l;
- //long SDAV=0l;
- Uchar FLAG=OFF;
- Uchar poss[37][2];
- Uchar Note,Smp;
- Uchar *Whatever;
- Uchar *WholePatternData;
- long Where = PW_Start_Address;
+ /*uint8_t c1=0x00;*/
+ int16_t Ref_Max=0;
+ int32_t Pats_Address[128],Pats_Address_infile[128];
+ uint8_t NOP=0x00; /* number of pattern */
+ uint8_t *ReferenceTable;
+ uint8_t *Pattern;
+ int32_t i=0,j;
+ int32_t Total_Sample_Size=0;
+ int32_t PatDataSize=0l;
+ /*int32_t SDAV=0l;*/
+ uint8_t FLAG=OFF;
+ uint8_t poss[37][2];
+ uint8_t Note,Smp;
+ uint8_t *Whatever;
+ uint8_t *WholePatternData;
+ int32_t Where = PW_Start_Address;
FILE *out;/*,*info;*/
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*info = fopen ( "info", "w+b");*/
BZERO ( Pats_Address , 128*4 );
BZERO ( Pats_Address_infile , 128*4 );
- Whatever = (Uchar *) malloc (1085);
+ Whatever = (uint8_t *) malloc (1085);
BZERO (Whatever, 1085);
/* bypass replaycode routine */
{
Pats_Address[i] = (in_data[Where]*256)+in_data[Where+1];
Where += 2;
- //printf ( "[%3ld] : %ld\n", i, Pats_Address[i] );
+ /*printf ( "[%3ld] : %ld\n", i, Pats_Address[i] );*/
}
/* write pattern table */
Where = PW_Start_Address + PATTERN_DATA;
/* now, reading all pattern data to get the max value of note */
- WholePatternData = (Uchar *) malloc (PatDataSize+1);
+ WholePatternData = (uint8_t *) malloc (PatDataSize+1);
BZERO (WholePatternData, PatDataSize+1);
for ( PW_j=0 ; PW_j<PatDataSize ; PW_j+=2 )
{
Where = PW_Start_Address + AFTER_REPLAY_CODE + PW_j;
Ref_Max += 1; /* coz 1st value is 0 ! */
- i = Ref_Max * 4; /* coz each block is 4 bytes long */
- ReferenceTable = (Uchar *) malloc ( i );
+ i = Ref_Max * 4; /* coz each block is 4 bytes int32_t */
+ ReferenceTable = (uint8_t *) malloc ( i );
BZERO ( ReferenceTable, i );
for ( PW_j=0 ; PW_j<i ; PW_j++) ReferenceTable[PW_j] = in_data[Where+PW_j];
PW_k=0; /* current note number */
- Pattern = (Uchar *) malloc (65536);
+ Pattern = (uint8_t *) malloc (65536);
BZERO (Pattern, 65536);
i=0;
PW_l = 1; /* nbr of patterns stored */
#include "extern.h"
-short testPM40 ( void )
+int16_t testPM40 ( void )
{
PW_Start_Address = PW_i;
Save_Rip ( "Promizer 4.0 module", PM40 );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 2); /* 1 should do but call it "just to be sure" :) */
+ PW_i += 2; /* 1 should do but call it "just to be sure" :) */
}
*
* Converts PM40 packed MODs back to PTK MODs
*
+ * 20100112 - complete rewrite
+ *
*/
#define ON 0
void Depack_PM40 ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar PatPos=0x00;
- short Pat_Max=0;
- long tmp_ptr,tmp1,tmp2;
- short Ref_Max=0;
- Uchar Pats_Numbers[128];
- Uchar Pats_Numbers_tmp[128];
- long Pats_Address[128];
- long Pats_Address_tmp[128];
- long Pats_Address_tmp2[128];
- short Pats_PrePointers[64][256];
- Uchar *ReferenceTable;
- Uchar *SampleData;
- Uchar Pattern[128][1024];
- long i=0,j=0,k=0;
- long Total_Sample_Size=0;
- long PatDataSize=0l;
- long SDAV=0l;
- Uchar FLAG=OFF;
- Uchar poss[37][2];
- Uchar Note,Smp;
- /*long Where = PW_Start_Address;*/
- FILE *in,*out;
+ int32_t Pats_Address[128];
+ int32_t Read_Pats_Address[128];
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00;
+ int32_t Where;
+ uint8_t *Pattern;
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t Total_Sample_Size=0;
+ int32_t PatDataSize=0l;
+ int32_t SmpAddy;
+ uint8_t FLAG=OFF;
+ uint8_t poss[37][2];
+ FILE *out;
+ /*FILE *info;
+ info = fopen("info.txt","w+b");*/
if ( Save_Status == BAD )
return;
fillPTKtable(poss);
- in = fopen ( (char *)OutName_final , "r+b" ); /* +b is safe bcoz OutName's just been saved */
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- BZERO ( Pats_Numbers , 128 );
- BZERO ( Pats_Numbers_tmp , 128 );
- BZERO ( Pats_PrePointers , 64*256 );
- BZERO ( Pattern , 128*1024 );
+ Pattern = (uint8_t *) malloc (65536);
+ BZERO ( Pattern , 65536 );
BZERO ( Pats_Address , 128*4 );
- BZERO ( Pats_Address_tmp , 128*4 );
- for ( i=0 ; i<128 ; i++ )
- Pats_Address_tmp2[i] = 9999l;
- /* write title */
- for ( i=0 ; i<20 ; i++ ) /* title */
- fwrite ( &c1 , 1 , 1 , out );
+ /* title (empty) */
+ Whatever = (uint8_t *)malloc(1085);
+ BZERO (Whatever,1085);
/* read and write sample headers */
/*printf ( "Converting sample headers ... " );*/
- fseek ( in , SAMPLE_DESC , 0 );
+ Where = PW_Start_Address + SAMPLE_DESC;
for ( i=0 ; i<31 ; i++ )
{
- c1 = 0x00;
- for ( j=0 ; j<22 ; j++ ) /*sample name*/
- fwrite ( &c1 , 1 , 1 , out );
-
- fread ( &c1 , 1 , 1 , in ); /* size */
- fread ( &c2 , 1 , 1 , in );
- Total_Sample_Size += (((c1*256)+c2)*2);
- fwrite ( &c1 , 1 , 1 , out );
- fwrite ( &c2 , 1 , 1 , out );
- fread ( &c1 , 1 , 1 , in ); /* finetune */
- fwrite ( &c1 , 1 , 1 , out );
- fread ( &c1 , 1 , 1 , in ); /* volume */
- fwrite ( &c1 , 1 , 1 , out );
- fread ( &c1 , 1 , 1 , in ); /* loop start */
- fread ( &c2 , 1 , 1 , in );
- fwrite ( &c1 , 1 , 1 , out );
- fwrite ( &c2 , 1 , 1 , out );
- fread ( &c1 , 1 , 1 , in ); /* loop size */
- fread ( &c2 , 1 , 1 , in );
- fwrite ( &c1 , 1 , 1 , out );
- fwrite ( &c2 , 1 , 1 , out );
+ Whatever[42+30*i] = in_data[Where];
+ Whatever[43+30*i] = in_data[Where+1];
+ Whatever[44+30*i] = in_data[Where+2];
+ Whatever[45+30*i] = in_data[Where+3];
+ Whatever[46+30*i] = in_data[Where+4];
+ Whatever[47+30*i] = in_data[Where+5];
+ Whatever[48+30*i] = in_data[Where+6];
+ Whatever[49+30*i] = in_data[Where+7];
+ Total_Sample_Size += (((Whatever[42+30*i]*256)+Whatever[43+30*i])*2);
+ Where += 8;
}
/*printf ( "ok\n" );*/
- /* read and write the size of the pattern list */
- fseek ( in , 7 , 0 ); /* SEEK_SET */
- fread ( &PatPos , 1 , 1 , in );
- fwrite ( &PatPos , 1 , 1 , out );
+ /* size of the pattern list */
+ Whatever[950] = in_data[PW_Start_Address+7];
/* NoiseTracker restart byte */
- c1 = 0x7f;
- fwrite ( &c1 , 1 , 1 , out );
+ Whatever[951] = 0x7f;
/* pattern addresses */
- fseek ( in , 8 , 0 ); /* SEEK_SET */
- for ( i=0 ; i<128 ; i++ )
+ Where = PW_Start_Address + 8;
+ for ( i=0 ; i<Whatever[950] ; i++ )
{
- fread ( &c1 , 1 , 1 , in );
- fread ( &c2 , 1 , 1 , in );
- Pats_Address[i] = (c1*256)+c2;
+ Pats_Address[i] = (in_data[Where+i*2]*256)+in_data[Where+i*2+1];
+ /*printf ("%ld + ",Pats_Address[i]);*/
}
- /* ordering of patterns addresses */
- /* PatPos contains the size of the pattern list .. */
- /*printf ( "Creating pattern list ... " );*/
- tmp_ptr = 0;
- for ( i=0 ; i<PatPos ; i++ )
+ Where = PW_Start_Address + ADDRESS_SAMPLE_DATA;
+ SmpAddy = (in_data[Where]*256*256*256 +
+ in_data[Where+1]*256*256 +
+ in_data[Where+2]*256 +
+ in_data[Where+3]) + 4;
+
+ Where += 4;
+ l = (in_data[Where]*256*256*256 +
+ in_data[Where+1]*256*256 +
+ in_data[Where+2]*256 +
+ in_data[Where+3]) + 8;
+
+ Where += 4;
+ PatDataSize = l - PATTERN_DATA;
+ /*printf ("PatDataSize : %ld\n",PatDataSize);*/
+
+ /* convert pattern data here */
+ i=0; k=0;
+ c1 = 0x00;
+ for (j=0; j<PatDataSize; j+=2)
{
- if ( i==0 )
+ if ( ((i%1024) == 0 ) || (i == 0))
{
- Pats_Numbers[0] = 0x00;
- tmp_ptr++;
- continue;
+ Read_Pats_Address[c1] = j;
+ /*fprintf ( info, " -> new pattern %2d (addy :%ld)\n", c1, j );*/
+ /*printf ("%lx(%d) - ",j,c1);*/
+ fflush (stdout);
+ c1 += 0x01;
}
- for ( j=0 ; j<i ; j++ )
+ m = (in_data[PW_Start_Address+j+PATTERN_DATA]*256)+in_data[PW_Start_Address+j+PATTERN_DATA+1];
+ if (m == 0) /* no note */
{
- if ( Pats_Address[i] == Pats_Address[j] )
- {
- Pats_Numbers[i] = Pats_Numbers[j];
- break;
- }
+ /*fprintf (info,"[%4x][%3ld][%ld]: no note", j,i,k%4);*/
}
- if ( j == i )
- Pats_Numbers[i] = tmp_ptr++;
- }
-
- Pat_Max = tmp_ptr-1;
-
- /* correct re-order */
- /********************/
- for ( i=0 ; i<c4 ; i++ )
- Pats_Address_tmp[i] = Pats_Address[i];
-
-restart:
- for ( i=0 ; i<c4 ; i++ )
- {
- for ( j=0 ; j<i ; j++ )
+ else
{
- if ( Pats_Address_tmp[i] < Pats_Address_tmp[j] )
+ m -= 1;
+ m *= 4;
+ m += PW_Start_Address;
+ Pattern[i] = (in_data[l+m] & 0xf0) | poss[in_data[l+m+1]][0];
+ Pattern[i+1] = poss[in_data[l+m+1]][1];
+ Pattern[i+2] = in_data[l+m+2] | ((in_data[l+m]<<4)&0xf0);
+ Pattern[i+3] = in_data[l+m+3];
+
+ /*fprintf ( info, "[%4x][%3ld][%ld]: %2x %2x %2x %2x", j,i,k%4,Pattern[i],Pattern[i+1],Pattern[i+2],Pattern[i+3]);*/
+
+ if ( ( (Pattern[i+2] & 0x0f) == 0x0d ) ||
+ ( (Pattern[i+2] & 0x0f) == 0x0b ) )
{
- tmp2 = Pats_Numbers[j];
- Pats_Numbers[j] = Pats_Numbers[i];
- Pats_Numbers[i] = tmp2;
- tmp1 = Pats_Address_tmp[j];
- Pats_Address_tmp[j] = Pats_Address_tmp[i];
- Pats_Address_tmp[i] = tmp1;
- goto restart;
+ /*fprintf ( info, " <-- B or D detected" );*/
+ FLAG = ON;
}
}
- }
-
- j=0;
- for ( i=0 ; i<c4 ; i++ )
- {
- if ( i==0 )
+ if ( (FLAG == ON) && ((k%4) == 3) )
{
- Pats_Address_tmp2[j] = Pats_Address_tmp[i];
- continue;
+ /*fprintf ( info, "\n -> bypassing end of pattern" );*/
+ FLAG=OFF;
+ while ( (i%1024) != 0)
+ i ++;
+ i -= 4;
}
-
- if ( Pats_Address_tmp[i] == Pats_Address_tmp2[j] )
- continue;
- Pats_Address_tmp2[++j] = Pats_Address_tmp[i];
- }
-
- for ( c1=0x00 ; c1<c4 ; c1++ )
- {
- for ( c2=0x00 ; c2<c4 ; c2++ )
- if ( Pats_Address[c1] == Pats_Address_tmp2[c2] )
- {
- Pats_Numbers_tmp[c1] = c2;
- }
+ k += 1;
+ i += 4;
+ /*fprintf ( info, "\n" );*/
}
- for ( i=0 ; i<c4 ; i++ )
- Pats_Numbers[i] = Pats_Numbers_tmp[i];
- /* write pattern table */
- for ( c1=0x00 ; c1<128 ; c1++ )
+ /* pattern table */
+ for ( c2=0; c2<128 ; c2+=0x01 )
+ for ( i=0 ; i<c1 ; i++ )
+ if ( Pats_Address[c2] == Read_Pats_Address[i])
+ Whatever[952+c2] = (uint8_t) i;
+ c2 = Whatever[950];
+ while ( c2<128 )
{
- fwrite ( &Pats_Numbers[c1] , 1 , 1 , out );
+ Whatever[952+c2] = 0x00;
+ c2+=0x01;
}
/*printf ( "ok\n" );*/
- c1 = 'M';
- c2 = '.';
- c3 = 'K';
-
- fwrite ( &c1 , 1 , 1 , out );
- fwrite ( &c2 , 1 , 1 , out );
- fwrite ( &c3 , 1 , 1 , out );
- fwrite ( &c2 , 1 , 1 , out );
-
-
- /* a little pre-calc code ... no other way to deal with these unknown
- pattern data sizes ! :( */
- /* so, first, we get the pattern data size .. */
- fseek ( in , ADDRESS_REF_TABLE , 0 ); /* SEEK_SET */
- fread ( &c1 , 1 , 1 , in );
- fread ( &c2 , 1 , 1 , in );
- fread ( &c3 , 1 , 1 , in );
- fread ( &c4 , 1 , 1 , in );
- j = (c1*256*256*256)+(c2*256*256)+(c3*256)+c4;
- PatDataSize = (8 + j) - PATTERN_DATA;
-/* printf ( "Pattern data size : %ld\n" , PatDataSize );*/
-
- /* go back to pattern data starting address */
- fseek ( in , PATTERN_DATA , 0 ); /* SEEK_SET */
- /* now, reading all pattern data to get the max value of note */
- for ( j=0 ; j<PatDataSize ; j+=2 )
- {
- fread ( &c1 , 1 , 1 , in );
- fread ( &c2 , 1 , 1 , in );
- if ( ((c1*256)+c2) > Ref_Max )
- Ref_Max = (c1*256)+c2;
- }
-/*
- printf ( "* Ref_Max = %d\n" , Ref_Max );
- printf ( "* where : %ld\n" , ftell ( in ) );
-*/
- /* read "reference Table" */
- fseek ( in , ADDRESS_REF_TABLE , 0 ); /* SEEK_SET */
- fread ( &c1 , 1 , 1 , in );
- fread ( &c2 , 1 , 1 , in );
- fread ( &c3 , 1 , 1 , in );
- fread ( &c4 , 1 , 1 , in );
- j = (c1*256*256*256)+(c2*256*256)+(c3*256)+c4;
- fseek ( in , 8+j , 0 ); /* SEEK_SET */
-/* printf ( "address of 'reference table' : %ld\n" , ftell (in ) );*/
- Ref_Max += 1; /* coz 1st value is 0 and will be empty in this table */
- i = Ref_Max * 4; /* coz each block is 4 bytes long */
- ReferenceTable = (Uchar *) malloc ( i );
- BZERO ( ReferenceTable , i );
- fread ( &ReferenceTable[4] , i , 1 , in );
-
- /* go back to pattern data starting address */
- fseek ( in , PATTERN_DATA , 0 ); /* SEEK_SET */
-/* printf ( "Highest pattern number : %d\n" , Pat_Max );*/
-
- /*printf ( "Computing the pattern datas " );*/
- k=0;
- for ( j=0 ; j<=Pat_Max ; j++ )
- {
- for ( i=0 ; i<64 ; i++ )
- {
- /* VOICE #1 */
-
- fread ( &c1 , 1 , 1 , in );
- k += 1;
- fread ( &c2 , 1 , 1 , in );
- k += 1;
- Smp = ReferenceTable[((c1*256)+c2)*4];
- Note = ReferenceTable[((c1*256)+c2)*4+1];
-
- Pattern[j][i*16] = (Smp&0xf0);
- Pattern[j][i*16] |= poss[Note][0];
- Pattern[j][i*16+1] = poss[Note][1];
- Pattern[j][i*16+2] = ReferenceTable[((c1*256)+c2)*4+2];
- Pattern[j][i*16+2] |= ((Smp<<4)&0xf0);
- Pattern[j][i*16+3] = ReferenceTable[((c1*256)+c2)*4+3];
-
- if ( ( (Pattern[j][i*16+2] & 0x0f) == 0x0d ) ||
- ( (Pattern[j][i*16+2] & 0x0f) == 0x0b ) )
- {
- FLAG = ON;
- }
-
- /* VOICE #2 */
-
- fread ( &c1 , 1 , 1 , in );
- k += 1;
- fread ( &c2 , 1 , 1 , in );
- k += 1;
- Smp = ReferenceTable[((c1*256)+c2)*4];
- Note = ReferenceTable[((c1*256)+c2)*4+1];
-
- Pattern[j][i*16+4] = (Smp&0xf0);
- Pattern[j][i*16+4] |= poss[Note][0];
- Pattern[j][i*16+5] = poss[Note][1];
- Pattern[j][i*16+6] = ReferenceTable[((c1*256)+c2)*4+2];
- Pattern[j][i*16+6] |= ((Smp<<4)&0xf0);
- Pattern[j][i*16+7] = ReferenceTable[((c1*256)+c2)*4+3];
-
- if ( ( ( Pattern[j][i*16+6] & 0x0f) == 0x0d ) ||
- ( (Pattern[j][i*16+6] & 0x0f) == 0x0b ) )
- {
- FLAG = ON;
- }
-
- /* VOICE #3 */
-
- fread ( &c1 , 1 , 1 , in );
- k += 1;
- fread ( &c2 , 1 , 1 , in );
- k += 1;
- Smp = ReferenceTable[((c1*256)+c2)*4];
- Note = ReferenceTable[((c1*256)+c2)*4+1];
-
- Pattern[j][i*16+8] = (Smp&0xf0);
- Pattern[j][i*16+8] |= poss[Note][0];
- Pattern[j][i*16+9] = poss[Note][1];
- Pattern[j][i*16+10] = ReferenceTable[((c1*256)+c2)*4+2];
- Pattern[j][i*16+10] |= ((Smp<<4)&0xf0);
- Pattern[j][i*16+11]= ReferenceTable[((c1*256)+c2)*4+3];
-
- if ( ( (Pattern[j][i*16+10] & 0x0f) == 0x0d ) ||
- ( (Pattern[j][i*16+10] & 0x0f) == 0x0b ) )
- {
- FLAG = ON;
- }
-
- /* VOICE #4 */
-
- fread ( &c1 , 1 , 1 , in );
- k += 1;
- fread ( &c2 , 1 , 1 , in );
- k += 1;
- Smp = ReferenceTable[((c1*256)+c2)*4];
- Note = ReferenceTable[((c1*256)+c2)*4+1];
-
- Pattern[j][i*16+12] = (Smp&0xf0);
- Pattern[j][i*16+12] |= poss[Note][0];
- Pattern[j][i*16+13] = poss[Note][1];
- Pattern[j][i*16+14] = ReferenceTable[((c1*256)+c2)*4+2];
- Pattern[j][i*16+14] |= ((Smp<<4)&0xf0);
- Pattern[j][i*16+15]= ReferenceTable[((c1*256)+c2)*4+3];
-
- if ( ( (Pattern[j][i*16+14] & 0x0f) == 0x0d ) ||
- ( (Pattern[j][i*16+14] & 0x0f) == 0x0b ) )
- {
- FLAG = ON;
- }
+ Whatever[1080] = 'M';
+ Whatever[1081] = '.';
+ Whatever[1082] = 'K';
+ Whatever[1083] = '.';
+
+ fwrite (Whatever,1084,1,out);
+ free ( Whatever );
- if ( FLAG == ON )
- {
- FLAG=OFF;
- break;
- }
- }
- fwrite ( Pattern[j] , 1024 , 1 , out );
- /*printf ( "." );*/
- }
- free ( ReferenceTable );
- /*printf ( " ok\n" );*/
+ /* c1 (+1) is still the number of patterns stored */
+ fwrite ( Pattern, (c1-1)*1024, 1, out );
+ free (Pattern);
- /* get address of sample data .. and go there */
/*printf ( "Saving sample datas ... " );*/
- fseek ( in , ADDRESS_SAMPLE_DATA , 0 ); /* SEEK_SET */
- fread ( &c1 , 1 , 1 , in );
- fread ( &c2 , 1 , 1 , in );
- fread ( &c3 , 1 , 1 , in );
- fread ( &c4 , 1 , 1 , in );
- SDAV = (c1*256*256*256)+(c2*256*256)+(c3*256)+c4;
- fseek ( in , 4 + SDAV , 0 ); /* SEEK_SET */
-
-
- /* read and save sample data */
-/* printf ( "out: where before saving sample data : %ld\n" , ftell ( out ) );*/
-/* printf ( "Whole sample size : %ld\n" , Total_Sample_Size );*/
- SampleData = (Uchar *) malloc ( Total_Sample_Size );
- fread ( SampleData , Total_Sample_Size , 1 , in );
- fwrite ( SampleData , Total_Sample_Size , 1 , out );
- free ( SampleData );
+ Where = PW_Start_Address + SmpAddy;
+ fwrite ( &in_data[Where] , Total_Sample_Size , 1 , out );
/*printf ( " ok\n" );*/
Crap ( " Promizer 4.0 " , BAD , BAD , out );
- fflush ( in );
fflush ( out );
- fclose ( in );
fclose ( out );
+/* fclose (info);*/
printf ( "done\n" );
return; /* useless ... but */
#include "extern.h"
-short testPRUN1 ( void )
+int16_t testPRUN1 ( void )
{
/* test 1 */
if ( PW_i < 1080 )
{
return BAD;
}
+
+ /* test 4 */
+ for ( PW_k=0 ; PW_k<31 ; PW_k++ )
+ {
+ /* size */
+ PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);
+ /* loop start */
+ PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2);
+ /* loop size */
+ PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);
+
+ if ( test_smps(PW_j*2, PW_m, PW_n, in_data[PW_Start_Address+45+30*PW_k], in_data[PW_Start_Address+44+30*PW_k] ) == BAD )
+ {
+ /*printf ( "start : %ld\n", PW_Start_Address );*/
+ return BAD;
+ }
+
+ PW_WholeSampleSize += PW_j;
+ }
+
return GOOD;
}
void Rip_PRUN1 ( void )
{
- PW_WholeSampleSize = 0;
- for ( PW_k=0 ; PW_k<31 ; PW_k++ )
- PW_WholeSampleSize += (((in_data[PW_Start_Address+42+30*PW_k]*256)+in_data[PW_Start_Address+43+30*PW_k])*2);
PW_l=0;
for ( PW_k=0 ; PW_k<128 ; PW_k++ )
if ( in_data[PW_Start_Address+952+PW_k] > PW_l )
Save_Rip ( "Prorunner 1 module", ProRunner_v1 );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 1083); /* 1080 could be enough */
+ PW_i += 1; /* 1080 could be enough */
}
*/
void Depack_PRUN1 ( void )
{
- Uchar *Whatever;
- Uchar poss[37][2];
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where=PW_Start_Address;
+ uint8_t *Whatever;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
+ int32_t Where=PW_Start_Address;
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read and write whole header */
Where += 952;
/* write ID */
- Whatever = (Uchar *) malloc (4);
+ Whatever = (uint8_t *) malloc (4);
Whatever[0] = 'M';
Whatever[1] = '.';
Whatever[2] = 'K';
#include "globals.h"
#include "extern.h"
-short testPRUN2 ( void )
+int16_t testPRUN2 ( void )
{
PW_Start_Address = PW_i;
PW_j = (in_data[PW_i+4]*256*256*256)+(in_data[PW_i+5]*256*256)+(in_data[PW_i+6]*256)+in_data[PW_i+7];
Save_Rip ( "Prorunner 2 module", ProRunner_v2 );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 2); /* -1 should do but call it "just to be sure" :) */
+ PW_i += 2; /* -1 should do but call it "just to be sure" :) */
}
*
* 28 Nov 1999 : Update
* - optimized code for size and speed (again :)
- * Heh, 1/5 shorter now !.
+ * Heh, 1/5 int16_t er now !.
*
* 23 aug 2001 : debug
* - "repeat last note used bug" pointed out by Markus Jaegermeister !.
void Depack_PRUN2 ( void )
{
- Uchar poss[37][2];
- Uchar Voices[4][4];
- Uchar *Whatever;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t poss[37][2];
+ uint8_t Voices[4][4];
+ uint8_t *Whatever;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO (Whatever , 1024);
/* title */
fwrite ( Whatever , 20 , 1 , out );
#include "extern.h"
-short testQuadraComposer ( void )
+int16_t testQuadraComposer ( void )
{
/* test #1 */
if ( PW_i < 8 )
*/
void Depack_QuadraComposer ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
- Uchar Pat_Pos;
- Uchar Pat_Max=0x00;
- Uchar Real_Pat_Max=0x00;
- Uchar *Whatever;
- /*Uchar Row[16];*/
- Uchar Pattern[1024];
- Uchar NbrSample=0x00;
- Uchar RealNbrSample=0x00;
- Uchar NbrRow[128];
- Uchar poss[37][2]; /* <------ Ptk's pitch table */
- long SmpAddresses[32];
- long SmpSizes[32];
- long PatAddresses[128];
- long i=0,j=0,k=0;
- long Where = PW_Start_Address;
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
+ uint8_t Pat_Pos;
+ uint8_t Pat_Max=0x00;
+ uint8_t Real_Pat_Max=0x00;
+ uint8_t *Whatever;
+ /*uint8_t Row[16];*/
+ uint8_t Pattern[1024];
+ uint8_t NbrSample=0x00;
+ uint8_t RealNbrSample=0x00;
+ uint8_t NbrRow[128];
+ uint8_t poss[37][2]; /* <------ Ptk's pitch table */
+ int32_t SmpAddresses[32];
+ int32_t SmpSizes[32];
+ int32_t PatAddresses[128];
+ int32_t i=0,j=0,k=0;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*fread ( &NbrSample , 1 , 1 , in );*/
/* write empty 930 sample header */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
Whatever[29] = 0x01;
for ( i=0 ; i<31 ; i++ )
#include "extern.h"
-short testRelokIt10 ( void )
+int16_t testRelokIt10 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 204;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
--- /dev/null
+/* testS3M() */\r
+/* Rip_S3M() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testS3M ( void )\r
+{\r
+ /* test #1 */\r
+ PW_Start_Address = PW_i-44;\r
+ if ( (PW_Start_Address + 0x60) > PW_in_size)\r
+ {\r
+ /*printf ( "#1 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ /* must be 0x1a10 */\r
+ if ( (in_data[PW_Start_Address + 28] != 0x1A) || (in_data[PW_Start_Address + 29] != 0x10) )\r
+ {\r
+ /*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ /* must be 0x0100 or 0x0200 */\r
+ if ( ((in_data[PW_Start_Address + 42] != 0x01) && (in_data[PW_Start_Address + 42] != 0x02)) || (in_data[PW_Start_Address + 43] != 0x00) )\r
+ {\r
+ /*printf ( "#3 Start:%ld\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ /* get patternlist size */\r
+ PW_j = ( (in_data[PW_Start_Address+33]*256)+\r
+ in_data[PW_Start_Address+32] );\r
+ if ( ((PW_j/2)*2) != PW_j )\r
+ {\r
+ /*printf ( "#4 Start:%ld\n" , PW_Start_Address );*/\r
+ /* unreal musics with uneven patterlist size ?!? */\r
+ /*return BAD;*/\r
+ }\r
+\r
+ /* get number of instruments */\r
+ PW_k = ( (in_data[PW_Start_Address+35]*256)+\r
+ in_data[PW_Start_Address+34] );\r
+ /* get number of pattern stored */\r
+ PW_l = ( (in_data[PW_Start_Address+37]*256)+\r
+ in_data[PW_Start_Address+36] );\r
+\r
+ /* PW_j is the patternlist size */\r
+ /* PW_k is the number of instruments */\r
+ /* PW_l is the number of pattern stored */\r
+ return GOOD;\r
+}\r
+\r
+\r
+/*\r
+ * S3M ripper\r
+ * 20100207 - Sylvain "Asle" Chipaux\r
+ *\r
+ * pfiew - finaly completed. some "features" not documented :(\r
+*/\r
+void Rip_S3M ( void )\r
+{\r
+ int32_t currentptr;\r
+ int32_t max = 0;\r
+ /*int32_t lastnonzerosize = 0;*/\r
+ /*int32_t gap;*/\r
+ /*int32_t whole_inst_size=0;*/\r
+ int32_t whole_head_size=0;\r
+\r
+ /* read the pattern adresses and get sizes */\r
+ currentptr = PW_Start_Address + 0x60 + PW_j + (PW_k*2);\r
+ max = 0;\r
+ for ( PW_o=0 ; PW_o<PW_l ; PW_o++ )\r
+ {\r
+ int32_t tmp_addy=0;\r
+ tmp_addy = ((in_data[currentptr+(PW_o*2)+1]*256) + in_data[currentptr+(PW_o*2)])*16;\r
+ /* + PW_Start_Address;*/\r
+ if (tmp_addy == 0)\r
+ continue;\r
+ if ( tmp_addy > max )\r
+ {\r
+ max = tmp_addy;\r
+ whole_head_size = max + ((in_data[tmp_addy+1+ PW_Start_Address]*256)+in_data[tmp_addy+ PW_Start_Address]);\r
+ }\r
+ /*printf ("[%ld] tmp_addy : %lx,(%lx)\n",PW_o,tmp_addy,(in_data[tmp_addy+1]*256)+in_data[tmp_addy]);*/\r
+ }\r
+ while (((whole_head_size/16)*16) != whole_head_size)\r
+ {\r
+ whole_head_size += 1;\r
+ }\r
+\r
+\r
+ /* read the instruments adresses and get sizes */\r
+ /* they should be _before_ the pattern data, handled above */\r
+ currentptr = PW_Start_Address + 0x60 + PW_j;\r
+ for ( PW_o=0 ; PW_o<PW_k ; PW_o++ )\r
+ {\r
+ int32_t tmp_addy=0, tmp_addy2=0;\r
+/* int32_t tmp = 0;*/\r
+ tmp_addy = ((in_data[currentptr+(PW_o*2)+1]*256) + in_data[currentptr+(PW_o*2)])*16;\r
+ /* + PW_Start_Address;*/\r
+ if (tmp_addy == 0)\r
+ continue;\r
+ if (in_data[tmp_addy+ PW_Start_Address] == 1)\r
+ {\r
+ tmp_addy2 = ((in_data[tmp_addy+15+ PW_Start_Address]*256)+in_data[tmp_addy+14+ PW_Start_Address])*16;\r
+ if (tmp_addy2 > max)\r
+ {\r
+ int32_t t = ((in_data[tmp_addy+18+ PW_Start_Address]*256*256)+(in_data[tmp_addy+17+ PW_Start_Address]*256)+in_data[tmp_addy+16+ PW_Start_Address]);\r
+ if ((in_data[tmp_addy+31]&0x04) == 0x04)\r
+ t *= 2;\r
+ max = tmp_addy2;\r
+ whole_head_size = max + t;\r
+ }\r
+ }\r
+ }\r
+\r
+ OutputSize = whole_head_size;\r
+ printf ("\nwhole_head_size : %d\n"\r
+ "PW_j : %x\n"\r
+ "PW_k*2 : %x\n"\r
+ "PW_l*2 : %x\n"\r
+ ,whole_head_size, PW_j, (PW_k*2), (PW_l*2));\r
+\r
+ CONVERT = BAD;\r
+ Save_Rip ( "ScreamTracker III module", S3M );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
--- /dev/null
+/*\r
+ Sonic Arranger ("shot in the dark" try)\r
+ 20160313- Asle\r
+20160314: no hunk version\r
+*/\r
+/* testSAhunk() */\r
+/* Rip_SAhunk() */\r
+\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testSAhunk ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+\r
+ if ( (in_data[PW_Start_Address+8] != 'S' ) ||\r
+ (in_data[PW_Start_Address+9] != 'T' ) ||\r
+ (in_data[PW_Start_Address+10] != 'B' ) ||\r
+ (in_data[PW_Start_Address+11] != 'L' ) )\r
+ {\r
+ printf ( "#1 Start:%d - expecting STBL hunk\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address) < 36 )\r
+ {\r
+ /*printf ( "#1,1 (start:%ld) (size:%ld)\n" , PW_Start_Address , PW_in_size-PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* get nbr patterns */\r
+ /*PW_m = (( in_data[PW_Start_Address+18]*256)+\r
+ in_data[PW_Start_Address+19] );*/\r
+\r
+/************* OVTB ****************/\r
+ if ( (in_data[PW_Start_Address+28] != 'O' ) ||\r
+ (in_data[PW_Start_Address+29] != 'V' ) ||\r
+ (in_data[PW_Start_Address+30] != 'T' ) ||\r
+ (in_data[PW_Start_Address+31] != 'B' ) )\r
+ {\r
+ printf ( "#1,2 Start:%d - expecting OVTB hunk\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr of Overtable */\r
+ PW_n = (( in_data[PW_Start_Address+34]*256)+\r
+ in_data[PW_Start_Address+35] )*16;\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - 32) < (PW_n + 8) )\r
+ {\r
+ /*printf ( "#1,3 (start:%ld) (size:%ld)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-32);*/\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += 36; /* should now be on NTBL hunk */\r
+\r
+/************* NTBL ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'N' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'T' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != 'B' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'L' ) )\r
+ {\r
+ printf ( "#2 Start:%d - expecting NTBL hunk\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr of notes */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+6]*256)+\r
+ in_data[PW_Start_Address+PW_n+7] )*4;\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - PW_n) < (PW_m + 16) )\r
+ {\r
+ printf ( "#2,1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-PW_n);\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += (PW_m+8); /* should now be on INST hunk */\r
+\r
+/************* INST ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'I' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'N' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != 'S' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'T' ) )\r
+ {\r
+ printf ( "#3 Start:%d - expecting INST hunk\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr of instruments */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+6]*256)+\r
+ in_data[PW_Start_Address+PW_n+7] )*152;\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - PW_n) < (PW_m + 16) )\r
+ {\r
+ printf ( "#3,1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-PW_n);\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += (PW_m+8); /* should now be on SD8B hunk */\r
+\r
+/************* SD8B ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'S' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'D' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != '8' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'B' ) )\r
+ {\r
+ printf ( "#4 Start:%d - expecting SD8B hunk\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr 8b samples */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+6]*256)+\r
+ in_data[PW_Start_Address+PW_n+7] );\r
+\r
+ /* sample data size, if any */\r
+ if (PW_m>0)\r
+ {\r
+ PW_k = 0;\r
+ PW_l = (PW_m * 4) + (PW_m * 4) + (PW_m * 30);\r
+ for (PW_o=0; PW_o<PW_m; PW_o++)\r
+ {\r
+ PW_j = (in_data[PW_Start_Address+PW_n+PW_l+(PW_o*4)+10]*256 + in_data[PW_Start_Address+PW_n+PW_l+(PW_o*4)+11]);\r
+ PW_k += PW_j;\r
+ /*printf ("(at:%d)(PW_j=%d)\n",PW_Start_Address+PW_n+PW_l+(PW_o*4)+10,PW_j);*/\r
+ }\r
+ PW_l += (PW_m * 4);\r
+ PW_m = PW_l + PW_k;\r
+ }\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - PW_n) < (PW_m + 16) )\r
+ {\r
+ printf ( "#4,1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-PW_n);\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += (PW_m+8); /* should now be on SYWT hunk */\r
+\r
+\r
+/************* SYWT ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'S' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'Y' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != 'W' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'T' ) )\r
+ {\r
+ printf ( "#5 Start:%d (at %d) (PW_l:%d) - expecting SYWT hunk\n" , PW_Start_Address, PW_Start_Address + PW_n,PW_l );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr synth wave tables */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+6]*256)+\r
+ in_data[PW_Start_Address+PW_n+7] )*128;\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - PW_n) < (PW_m + 16) )\r
+ {\r
+ printf ( "#5,1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-PW_n);\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += (PW_m+8); /* should now be on SYAR hunk */\r
+\r
+/************* SYAR ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'S' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'Y' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != 'A' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'R' ) )\r
+ {\r
+ printf ( "#6 Start:%d (at %d) - expecting SYAR hunk\n" , PW_Start_Address, PW_Start_Address + PW_n );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr synth wave tables */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+6]*256)+\r
+ in_data[PW_Start_Address+PW_n+7] )*128;\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - PW_n) < (PW_m + 16) )\r
+ {\r
+ printf ( "#6,1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-PW_n);\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += (PW_m+8); /* should now be on SYAF hunk */\r
+\r
+/************* SYAF ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'S' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'Y' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != 'A' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'F' ) )\r
+ {\r
+ printf ( "#7 Start:%d (at %d) - expecting SYAF hunk\n" , PW_Start_Address, PW_Start_Address + PW_n );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr synth wave tables */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+6]*256)+\r
+ in_data[PW_Start_Address+PW_n+7] ); /* no known case, so size of block is unknown */\r
+ if (PW_m > 0)printf ("testSA() - case of SYAF that is not 0 - send this file to Asle\n");\r
+\r
+ /* file size */\r
+ if ( (PW_in_size - PW_Start_Address - PW_n) < (PW_m + 16) )\r
+ {\r
+ printf ( "#7,1 (start:%d) (size:%d)\n" , PW_Start_Address , PW_in_size-PW_Start_Address-PW_n);\r
+ return BAD;\r
+ }\r
+\r
+ PW_n += (PW_m+8); /* should now be on EDATV1.1 hunk */\r
+\r
+/************* EDATV1.1 ****************/\r
+ if ( (in_data[PW_Start_Address+PW_n] != 'E' ) ||\r
+ (in_data[PW_Start_Address+PW_n+1] != 'D' ) ||\r
+ (in_data[PW_Start_Address+PW_n+2] != 'A' ) ||\r
+ (in_data[PW_Start_Address+PW_n+3] != 'T' ) )\r
+ {\r
+ printf ( "#8 Start:%d - expecting EDATV1.1 hunk\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr synth wave tables */\r
+ PW_m = 16; /* always 16 bytes, it seems */\r
+\r
+ PW_n += (PW_m+8); /* should now be at the end */\r
+\r
+ return GOOD; \r
+}\r
+\r
+\r
+\r
+/*****************************************************************************/\r
+/*\r
+Sonic Arranger - no humk\r
+*/\r
+int16_t testSA ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+\r
+ PW_n = 3;\r
+ if ( in_data[PW_Start_Address+PW_n] >0x7f )\r
+ {\r
+ /*printf ( "#1 Start:%d - jump too far\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ /* file size */\r
+ if ( (PW_Start_Address + in_data[PW_Start_Address+PW_n]) > PW_in_size )\r
+ {\r
+ /*printf ( "#1,1 (start:%d) (jump:%d)\n" , PW_Start_Address , in_data[PW_Start_Address+PW_n]);*/\r
+ return BAD;\r
+ }\r
+\r
+\r
+/************* point after replay ****************/\r
+ PW_n = (( in_data[PW_Start_Address+22]*256)+\r
+ in_data[PW_Start_Address+23] );\r
+ PW_n += 22;\r
+\r
+ /* file size */\r
+ if ( (PW_Start_Address + PW_n) > PW_in_size )\r
+ {\r
+ printf ( "#1,3 (start:%d) (jump:%d)\n" , PW_Start_Address , PW_Start_Address + PW_n);\r
+ return BAD;\r
+ }\r
+printf ("testSA(%x) - jump to %x\n",PW_Start_Address,PW_n);\r
+\r
+/************* try to detect the next 'Nu' ni the next 100h bytes ****************/\r
+ for (PW_j=0; PW_j<0x100; PW_j++)\r
+ {\r
+ if ((in_data[PW_Start_Address + PW_n + PW_j] == 'N') &&\r
+ (in_data[PW_Start_Address + PW_n + PW_j + 1] == 'u'))\r
+ break;\r
+ }\r
+ if (PW_j == 0x100)\r
+ {\r
+ printf ( "#2 Start:%d - no 'Nu' found\n" , PW_Start_Address );\r
+ return BAD;\r
+ }\r
+printf ("testSA(%x) - 'Nu' at %x\n",PW_Start_Address,PW_j);\r
+\r
+/************* try to detect the next usable dword ****************/\r
+ PW_n += (PW_j + 2);\r
+ if ((in_data[PW_Start_Address + PW_n+3] == 0x00) &&\r
+ (in_data[PW_Start_Address + PW_n+5] == 0x00) )\r
+ {\r
+ printf ( "#3 Start:%d (at %x) - consecutive 0x00 found\n" , PW_Start_Address, PW_n+PW_Start_Address );\r
+ return BAD;\r
+ }\r
+ if (in_data[PW_Start_Address + PW_n+5] != 0x00)\r
+ PW_n += 2;\r
+printf ("testSA(%x) - first dword at %x\n",PW_Start_Address,PW_n);\r
+ \r
+/************* real music data start here ****************/\r
+\r
+ /* file size */\r
+ if ( (PW_Start_Address + PW_n + 32) > PW_in_size )\r
+ {\r
+ printf ( "#4 (start:%d) (size:%d)\n" , PW_Start_Address , PW_Start_Address + PW_n + 32);\r
+ return BAD;\r
+ }\r
+\r
+/************* pseudo SD8B hunk ****************/\r
+\r
+ PW_j = (( in_data[PW_Start_Address+PW_n+30]*256)+\r
+ in_data[PW_Start_Address+PW_n+31] );\r
+ PW_n += PW_j; /* this includes the 32 bytes of addresses */\r
+printf ("testSA(%x) - S8BD hunk at %x\n",PW_Start_Address,PW_n);\r
+\r
+ /* nbr 8b samples */\r
+ PW_m = (( in_data[PW_Start_Address+PW_n+2]*256)+\r
+ in_data[PW_Start_Address+PW_n+3] );\r
+printf ("testSA(%x) - nbr 8b data %x\n",PW_Start_Address,PW_m);\r
+ PW_n += 4;\r
+/*printf ("at %x (PW_m:%x)\n",PW_n+PW_Start_Address,PW_m);fflush (stdout);*/\r
+\r
+ /* sample data size, if any */\r
+ if (PW_m>0)\r
+ {\r
+ PW_k = 0;\r
+ for (PW_o=0; PW_o<PW_m; PW_o++)\r
+ {\r
+ PW_j = (in_data[PW_Start_Address+PW_n+(PW_o*4)+2]*256 + in_data[PW_Start_Address+PW_n+(PW_o*4)+3]);\r
+printf ("testSA(%x) - 8b data sizes %x\n",PW_Start_Address,PW_j);\r
+ PW_k += PW_j;\r
+ }\r
+ }\r
+\r
+ PW_n += (PW_k+(PW_m*4)); /* should now be on 'deadbeef' tag */\r
+/*printf ("at %x\n",PW_n+PW_Start_Address);fflush (stdout);*/\r
+\r
+/* OK, detect 0xF500 after the 'deadbeef' hunk size */\r
+ for (PW_j=12;PW_j<0x100;PW_j++)\r
+ {\r
+ if ((in_data[PW_Start_Address+PW_n+PW_j] == 0xF5)&&\r
+ (in_data[PW_Start_Address+PW_n+PW_j+1] == 0x00))\r
+ {\r
+ PW_n += (PW_j+2);\r
+ printf ("0xF500 found at %x (%x)\n",PW_j,PW_n);\r
+ break;\r
+ }\r
+ if ((in_data[PW_Start_Address+PW_n+PW_j])>PW_in_size)\r
+ {\r
+ printf ("no 0xF500 found. size will be at PW_n (%x)\n",PW_n);\r
+ break;\r
+ }\r
+ }\r
+\r
+\r
+ return GOOD; \r
+}\r
+\r
+void Rip_SA ( void )\r
+{\r
+\r
+ OutputSize = PW_n;\r
+\r
+ CONVERT = BAD;\r
+ Save_Rip ( "Sonic Arranger module", SA );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
#include "extern.h"
/* rudimentary tests .. shall add others */
-short testSGT ( void )
+int16_t testSGT ( void )
{
/* test 1 */
if ( (PW_i<43) || ((PW_Start_Address+43)>PW_in_size) )
void Depack_SGT ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00;
- Uchar poss[37][2];
- Uchar Max=0x00;
- Uchar Note,Smp,Fx,FxVal;
- Uchar PatternTableSize=0x00;
- Uchar NbrPat;
- long i=0,j=0,l=0,z;
- long WholeSampleSize;
- long SmpAddy,PatlistAddy,PatdataAddy;
- long SmpAddies[31], SmpSizes[31];
- long NbrSmp;
- long Where = PW_Start_Address;
+ uint8_t *Whatever;
+/* uint8_t c1=0x00,c2=0x00;*/
+ uint8_t poss[37][2];
+/* uint8_t Max=0x00;*/
+/* uint8_t Note,Smp,Fx,FxVal;*/
+ uint8_t PatternTableSize=0x00;
+ uint8_t NbrPat;
+ int32_t i=0,j=0,l=0,z;
+ int32_t WholeSampleSize;
+ int32_t SmpAddy,PatlistAddy,PatdataAddy;
+ int32_t SmpAddies[31], SmpSizes[31];
+ int32_t NbrSmp;
+ int32_t Where = PW_Start_Address;
FILE *out; /*,*debug;*/
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
fillPTKtable(poss);
/* debug = fopen ( "debug" , "w+b" );*/
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO (Whatever , 1024);
/* title */
fwrite ( &Whatever[0] , 20 , 1 , out );
Whatever[22] = in_data[Where+12];
Whatever[23] = in_data[Where+13];
SmpSizes[i] = ((Whatever[22]*256)+Whatever[23])*2;
- //fwrite ( &in_data[Where+12] , 2 , 1 , out );
/* calculate loop start value */
j = j-l;
/* write fine & vol */
Whatever[24] = in_data[Where+10];
Whatever[25] = in_data[Where+11];
- //fwrite ( &in_data[Where] , 2 , 1 , out );
/* write loop start */
/* use of htonl() suggested by Xigh !.*/
j/=2;
z = htonl(j);
- Whatever[26] = *((Uchar *)&z+2);
- Whatever[27] = *((Uchar *)&z+3);
- //fwrite ( Whatever , 2 , 1 , out );
+ Whatever[26] = *((uint8_t *)&z+2);
+ Whatever[27] = *((uint8_t *)&z+3);
/* write loop size */
Whatever[28] = in_data[Where+8];
Whatever[29] = in_data[Where+9];
- //fwrite ( &in_data[Where+6] , 2 , 1 , out );
fwrite ( &Whatever[0] , 30 , 1 , out );
BZERO (Whatever , 1024);
{
/* get addy of first pointer of each pattern */
/* and convert it to char for storage in patternlist */
- Whatever[i] = (Uchar)(((in_data[Where+(i*256)]*256*256*256)+
+ Whatever[i] = (uint8_t)(((in_data[Where+(i*256)]*256*256*256)+
(in_data[Where+(i*256)+1]*256*256)+
(in_data[Where+(i*256)+2]*256)+
in_data[Where+(i*256)+3])/256);
#include "extern.h"
-short testSKYT ( void )
+int16_t testSKYT ( void )
{
/* test 1 */
if ( PW_i < 256 )
void Depack_SKYT ( void )
{
- Uchar *Header, *Pattern;
- Uchar poss[37][2];
- long i=0,j=0,k=0,l=0,m=0;
- long Total_Sample_Size=0;
- unsigned long ReadTrkPat[128][4], ReadPat[128];
- long Where=PW_Start_Address;
- long Highest_Track = 0;
+ uint8_t *Header, *Pattern;
+ uint8_t poss[37][2];
+ int32_t i=0,j=0,k=0,l=0,m=0;
+ int32_t Total_Sample_Size=0;
+ uint32_t ReadTrkPat[128][4], ReadPat[128];
+ int32_t Where=PW_Start_Address;
+ int32_t Highest_Track = 0;
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Header = (Uchar *)malloc(1084);
- Pattern = (Uchar *)malloc(1024);
+ Header = (uint8_t *)malloc(1084);
+ Pattern = (uint8_t *)malloc(1024);
BZERO ( Header , 1084 );
BZERO ( Pattern , 1024 );
/* rebuild pattern data now */
for (i=0;i<l-1;i++)
{
- long min=50,max=0;
BZERO(Pattern,1024);
/* which pattern is it now ? */
for (j=0;j<Header[950];j++)
}
for (k=0;k<4;k++) /* loop on 4 tracks' refs*/
{
- long d;
+ int32_t d;
/* empty track */
if (ReadTrkPat[j][k] == 0xffffffff)
--- /dev/null
+/* testSLAM() */\r
+/* Rip_SLAM() */\r
+/* Depack_SLAM() */\r
+\r
+\r
+/* First shot : 20070831 */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testSLAM ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+\r
+ /* address of sample sizes */\r
+ PW_j = ((in_data[PW_Start_Address+40]*256*256*256)+\r
+ (in_data[PW_Start_Address+41]*256*256)+\r
+ (in_data[PW_Start_Address+42]*256)+\r
+ in_data[PW_Start_Address+43]);\r
+ if ( PW_j < 406 )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* size of file */\r
+ PW_n = ((in_data[PW_Start_Address+20]*256*256*256)+\r
+ (in_data[PW_Start_Address+21]*256*256)+\r
+ (in_data[PW_Start_Address+22]*256)+\r
+ in_data[PW_Start_Address+23]) + 0x20;\r
+ if ( PW_j < 406 )\r
+ {\r
+ return BAD;\r
+ }\r
+/************ PAS FAIT APRES ! */\r
+ /* size of the pattern list */\r
+ PW_k = ((in_data[PW_Start_Address+18]*256)+\r
+ in_data[PW_Start_Address+19]);\r
+ if ( PW_k > 128 )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* nbr of pattern saved */\r
+ PW_k = ((in_data[PW_Start_Address+20]*256)+\r
+ in_data[PW_Start_Address+21]);\r
+ if ( (PW_k > 64) || (PW_k == 0) )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* pattern list */\r
+ for ( PW_l=0 ; PW_l<128 ; PW_l++ )\r
+ {\r
+ if ( in_data[PW_Start_Address+22+PW_l] > PW_k )\r
+ {\r
+ return BAD;\r
+ }\r
+ }\r
+\r
+ /* test sample sizes */\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_l=0 ; PW_l<31 ; PW_l++ )\r
+ {\r
+ /* addresse de la table */\r
+ PW_o = PW_Start_Address+PW_j+PW_l*4;\r
+\r
+ /* address du sample */\r
+ PW_k = ((in_data[PW_o]*256*256*256)+\r
+ (in_data[PW_o+1]*256*256)+\r
+ (in_data[PW_o+2]*256)+\r
+ in_data[PW_o+3]);\r
+\r
+ /* taille du smp */\r
+ PW_m = ((in_data[PW_o+PW_k-PW_l*4]*256)+\r
+ in_data[PW_o+PW_k+1-PW_l*4])*2;\r
+\r
+ PW_WholeSampleSize += PW_m;\r
+ }\r
+\r
+ if ( PW_WholeSampleSize <= 4 )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* PW_WholeSampleSize is the size of the sample data */\r
+ /* PW_j is the address of the sample desc */\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_SLAM ( void )\r
+{\r
+ OutputSize = PW_WholeSampleSize + PW_j + 31*4 + 31*8;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "SLAM (Slamtilt) module", SLAM );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += (OutputSize - 1); /* 0 should do but call it "just to be sure" :) */\r
+}\r
+\r
+\r
+/*\r
+ * SLAM_Packer.c 1998 (c) Sylvain "Asle" Chipaux\r
+ *\r
+ * SLAM Packer to Protracker.\r
+ ********************************************************\r
+ * 13 april 1999 : Update\r
+ * - no more open() of input file ... so no more fread() !.\r
+ * It speeds-up the process quite a bit :).\r
+ * 28 Nov 1999 : Update\r
+ * - Speed & Size optimizings\r
+*/\r
+\r
+void Depack_SLAM ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;\r
+ uint8_t poss[36][2];\r
+ uint8_t Max=0x00;\r
+ uint8_t Note,Smp,Fx,FxVal;\r
+ int16_t TracksAdd[4];\r
+ int32_t i=0,j=0,k=0;\r
+ int32_t WholeSampleSize=0;\r
+ int32_t SmpDescAdd=0;\r
+ int32_t PatAdds[64];\r
+ int32_t SmpDataAdds[31];\r
+ int32_t SmpSizes[31];\r
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */\r
+ FILE *out;\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ fillPTKtable(poss);\r
+\r
+ BZERO ( PatAdds , 64*4 );\r
+ BZERO ( SmpDataAdds , 31*4 );\r
+ BZERO ( SmpSizes , 31*4 );\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ /* write title */\r
+ Whatever = (uint8_t *) malloc (1024);\r
+ BZERO ( Whatever , 1024 );\r
+ fwrite ( Whatever , 20 , 1 , out );\r
+\r
+ /* bypass ID */\r
+ Where += 4;\r
+\r
+ /* read $ of sample description */\r
+ SmpDescAdd = (in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ /* "Where" isn't "+=4" coz it's assigned below */\r
+ /*printf ( "SmpDescAdd : %ld\n" , SmpDescAdd );*/\r
+\r
+ /* convert and write header */\r
+ for ( i=0 ; i<31 ; i++ )\r
+ {\r
+ Where = PW_Start_Address + SmpDescAdd + i*4;\r
+ SmpDataAdds[i]=(in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ SmpDataAdds[i] += SmpDescAdd;\r
+ Where = PW_Start_Address + SmpDataAdds[i];\r
+ SmpDataAdds[i] += 8;\r
+\r
+ /* write sample name */\r
+ fwrite ( Whatever , 22 , 1 , out );\r
+\r
+ /* sample size */\r
+ SmpSizes[i] = (((in_data[Where]*256)+in_data[Where+1])*2);\r
+ WholeSampleSize += (((in_data[Where]*256)+in_data[Where+1])*2);\r
+ /* size,fine,vol,loops */\r
+ fwrite ( &in_data[Where] , 8 , 1 , out );\r
+\r
+ /* no "Where += 8" coz it's reassigned inside and after loop */\r
+ }\r
+\r
+ /* size of the pattern list */\r
+ Where = PW_Start_Address + 19;\r
+ fwrite ( &in_data[Where++] , 1 , 1 , out );\r
+ Whatever[0] = 0x7f;\r
+ fwrite ( Whatever , 1 , 1 , out );\r
+\r
+ /* pattern table */\r
+ Where += 1;\r
+ Max = in_data[Where++];\r
+ fwrite ( &in_data[Where] , 128 , 1 , out );\r
+ Where += 128;\r
+\r
+ /*printf ( "number of pattern : %d\n" , Max );*/\r
+\r
+ /* write Protracker's ID */\r
+ Whatever[0] = 'M';\r
+ Whatever[1] = '.';\r
+ Whatever[2] = 'K';\r
+ Whatever[3] = '.';\r
+ fwrite ( Whatever , 4 , 1 , out );\r
+\r
+ /* read pattern addresses */\r
+ for ( i=0 ; i<64 ; i++ )\r
+ {\r
+ PatAdds[i] = (in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ PatAdds[i] += 0x0c;\r
+ Where += 4;\r
+ }\r
+\r
+ /* pattern data */\r
+ for ( i=0 ; i<Max ; i++ )\r
+ {\r
+ Where = PW_Start_Address + PatAdds[i];\r
+ for ( k=0 ; k<4 ; k++ )\r
+ {\r
+ TracksAdd[k] = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+ }\r
+\r
+ BZERO ( Whatever , 1024 );\r
+ for ( k=0 ; k<4 ; k++ )\r
+ {\r
+ Where = PW_Start_Address + PatAdds[i]+TracksAdd[k];\r
+ for ( j=0 ; j<64 ; j++ )\r
+ {\r
+ c1 = in_data[Where++];\r
+ if ( (c1&0x80) == 0x80 )\r
+ {\r
+ j += (c1&0x7F);\r
+ continue;\r
+ }\r
+ c2 = in_data[Where++];\r
+ c3 = in_data[Where++];\r
+\r
+ Smp = c1&0x1F;\r
+ Note = c2&0x3F;\r
+ Fx = ((c1>>5)&0x03);\r
+ c4 = ((c2>>4)&0x0C);\r
+ Fx |= c4;\r
+ FxVal = c3;\r
+\r
+ Whatever[j*16+k*4] = (Smp & 0xf0);\r
+\r
+ if ( Note != 0 )\r
+ {\r
+ Whatever[j*16+k*4] |= poss[Note-1][0];\r
+ Whatever[j*16+k*4+1] = poss[Note-1][1];\r
+ }\r
+\r
+ Whatever[j*16+k*4+2] = ((Smp<<4)&0xf0);\r
+ Whatever[j*16+k*4+2] |= Fx;\r
+ Whatever[j*16+k*4+3] = FxVal;\r
+ }\r
+ }\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+/* printf ( "pattern %ld written\n" , i );*/\r
+ }\r
+ free ( Whatever );\r
+\r
+ /* sample data */\r
+ for ( i=0 ; i<31 ; i++ )\r
+ {\r
+ Where = PW_Start_Address + SmpDataAdds[i];\r
+ fwrite ( &in_data[Where] , SmpSizes[i] , 1 , out );\r
+ }\r
+\r
+\r
+ Crap ( " SLAM (Slamtilt) " , BAD , BAD , out );\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
#include "globals.h"
#include "extern.h"
-short testSoundFX13 ( void )
+int16_t testSoundFX13 ( void )
{
/* test 1 */
if ( PW_i < 0x3C )
void Depack_SoundFX13 ( void )
{
- Uchar *Whatever;
- Uchar c0=0x00,c1=0x00,c2=0x00,c3=0x00;
- Uchar Max=0x00;
- Uchar PatPos;
- long WholeSampleSize=0;
- long i=0,j=0;
+ uint8_t *Whatever;
+ uint8_t c0=0x00,c1=0x00,c2=0x00,c3=0x00;
+ uint8_t Max=0x00;
+ uint8_t PatPos;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
FILE *in,*out;
if ( Save_Status == BAD )
return;
in = fopen ( (char *)OutName_final , "r+b" ); /* +b is safe bcoz OutName's just been saved */
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc ( 20 );
+ Whatever = (uint8_t *) malloc ( 20 );
BZERO ( Whatever , 20 );
fwrite ( Whatever , 20 , 1 , out );
free ( Whatever );
fwrite ( &c2 , 1 , 1 , out );
}
free ( Whatever );
- Whatever = (Uchar *) malloc ( 30 );
+ Whatever = (uint8_t *) malloc ( 30 );
BZERO ( Whatever , 30 );
Whatever[29] = 0x01;
for ( i=0 ; i<16 ; i++ )
/* pattern data */
fseek ( in , 0x294 , 0 );
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
for ( i=0 ; i<=Max ; i++ )
{
BZERO ( Whatever , 1024 );
/* sample data */
- Whatever = (Uchar *) malloc ( WholeSampleSize );
+ Whatever = (uint8_t *) malloc ( WholeSampleSize );
BZERO ( Whatever , WholeSampleSize );
fread ( Whatever , WholeSampleSize , 1 , in );
fwrite ( Whatever , WholeSampleSize , 1 , out );
#include "globals.h"
#include "extern.h"
-short testSoundTracker ( void )
+/*
+ * 20100902: removed *2 for loop size and loop start. was too restrictive in some case.
+*/
+int16_t testSoundTracker ( void )
{
/* test 1 */
/* start of stk before start of file ? */
/* size */
PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);
/* loop start */
- PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2);
+ PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30]));
/* loop size */
- PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);
+ PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30]));
/* all sample sizes */
PW_WholeSampleSize += PW_j;
return BAD;
}
/* loop start > size ? */
- if ( PW_m > PW_j )
+ if ( (PW_m >= PW_j) && (PW_j > 0) )
{
/*printf ( "#2,0 (Start:%ld) (smp:%ld) (size:%ld) (lstart:%ld)\n"
, PW_Start_Address , PW_k+1 , PW_j , PW_m );*/
return BAD;
}
/* PW_l holds the size of the pattern list */
+ /* but let's ignore it as some STK have some pattern after the official size */
PW_k=0;
- for ( PW_j=0 ; PW_j<PW_l ; PW_j++ )
+ for ( PW_j=0 ; PW_j<128 ; PW_j++ )
{
if ( in_data[PW_Start_Address+472+PW_j] > PW_k )
PW_k = in_data[PW_Start_Address+472+PW_j];
}
}
/* PW_k holds the highest pattern number */
- /* test last patterns of the pattern list = 0 ? */
- PW_j += 2; /* found some obscure stk :( */
- while ( PW_j != 128 )
- {
- if ( in_data[PW_Start_Address+472+PW_j] != 0 )
- {
-/*printf ( "#4,2 (Start:%ld) (PW_j:%ld) (at:%ld)\n" , PW_Start_Address,PW_j ,PW_Start_Address+472+PW_j );*/
- return BAD;
- }
- PW_j += 1;
- }
/* PW_k is the number of pattern in the file (-1) */
PW_k += 1;
}
for ( PW_j=0 ; PW_j<(PW_k*256) ; PW_j++ )
{
- /* sample > 1f or pitch > 358 ? */
- if ( in_data[PW_Start_Address+600+PW_j*4] > 0x13 )
+ /* sample > 1f ? */
+ if ( (in_data[PW_Start_Address+600+PW_j*4]&0xf0) > 0x10 )
{
/*printf ( "#5.1 (Start:%ld)\n" , PW_Start_Address );*/
return BAD;
}
+ if ( (in_data[PW_Start_Address+600+PW_j*4]&0x0f) > 0x03 )
+ {
+/*printf ( "#5.1,0 (Start:%ld)\n" , PW_Start_Address );*/
+ return BAD;
+ }
PW_l = ((in_data[PW_Start_Address+600+PW_j*4]&0x0f)*256)+in_data[PW_Start_Address+601+PW_j*4];
if ( (PW_l>0) && (PW_l<0x71) )
{
/*printf ( "#5,2 (Start:%ld)\n" , PW_Start_Address );*/
return BAD;
}
+ /*20120930 - additional test - there's a note but no sample ref */
+ if ( ((in_data[PW_Start_Address+600+PW_j*4]>0) || (in_data[PW_Start_Address+601+PW_j*4]>0)) && ((in_data[PW_Start_Address+602+PW_j*4]&0xf0)==0) )
+ {
+/*printf ( "#5.5 (Start:%ld)\n" , PW_Start_Address );*/
+ return BAD;
+ }
}
return GOOD;
/* Soundtracker 2.6 & IceTracker 1.0 */
-short testSTK26 ( void )
+int16_t testSTK26 ( void )
{
/* test 1 */
if ( PW_i < 1464 )
*/
void Depack_STK26 ( void )
{
- Uchar *Whatever;
- long WholeSampleSize=0;
- long Where=PW_Start_Address;
- long i=0,j,k;
+ uint8_t *Whatever;
+ int32_t WholeSampleSize=0;
+ int32_t Where=PW_Start_Address;
+ int32_t i=0,j,k;
FILE *out;
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* printf ( "Whole sanple size : %ld\n" , WholeSampleSize );*/
/* generate patlist */
- Whatever = (Uchar *) malloc (1536);
+ Whatever = (uint8_t *) malloc (1536);
BZERO ( Whatever , 1536 );
Whatever[1024] = in_data[Where+950];
for ( i=0 ; i<Whatever[1024] ; i++,Whatever[256] += 0x01 )
#include "extern.h"
-short testSpikeCruncher ( void )
+int16_t testSpikeCruncher ( void )
{
PW_Start_Address = PW_i;
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
+ uint8_t * Amiga_EXE_Header_Block;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
#include "extern.h"
-short testSTARPACK ( void )
+int16_t testSTARPACK ( void )
{
/* test 1 */
if ( (PW_i < 23) || ((PW_i+269-23)>=PW_in_size) )
/*printf ( "#2,0 (Start:%ld)\n" , PW_Start_Address );*/
return BAD;
}
- if ( PW_k>127 )
+ if ( PW_k>128 )
{
/*printf ( "#2,1 (Start:%ld)\n" , PW_Start_Address );*/
return BAD;
*/
void Depack_STARPACK ( void )
{
- Uchar c1=0x00,c2=0x00;
- Uchar Pat_Pos;
- Uchar *Whatever;
- Uchar *Pattern;
- long i=0,j=0,k=0;
- long Total_Sample_Size=0;
- long Pats_Address[128];
- long Read_Pats_Address[128];
- long SampleDataAddress=0;
- long Where = PW_Start_Address;
- long MaxPatAddy=0;
+ uint8_t c1=0x00,c2=0x00;
+ uint8_t Pat_Pos;
+ uint8_t *Whatever;
+ uint8_t *Pattern;
+ int32_t i=0,j=0,k=0;
+ int32_t Total_Sample_Size=0;
+ int32_t Pats_Address[128];
+ int32_t Read_Pats_Address[128];
+ int32_t SampleDataAddress=0;
+ int32_t Where = PW_Start_Address;
+ int32_t MaxPatAddy=0;
FILE /**in,*/*out;
if ( Save_Status == BAD )
BZERO ( Pats_Address , 128*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO (Whatever, 1024);
/* read and write title */
c1=0; /* will count patterns */
k=0; /* current note number */
- Pattern = (Uchar *) malloc (65536);
+ Pattern = (uint8_t *) malloc (65536);
BZERO (Pattern, 65536);
i=0;
for ( j=0 ; j<(MaxPatAddy+0x400) ; j+=4 )
for ( i=0 ; i<128 ; i++ )
if ( Pats_Address[c2] == Read_Pats_Address[i])
{
- Whatever[c2] = (Uchar) i;
+ Whatever[c2] = (uint8_t) i;
break;
}
fwrite ( &Whatever[0], 128, 1, out );
/* update on the 3rd of april 2000 */
-/* bug pointes out by Thomas Neumann ... thx */
+/* bug pointed out by Thomas Neumann ... thx */
#include "globals.h"
#include "extern.h"
-short testSTIM ( void )
+int16_t testSTIM ( void )
{
PW_Start_Address = PW_i;
void Depack_STIM ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar poss[36][2];
- Uchar Max=0x00;
- Uchar Note,Smp,Fx,FxVal;
- short TracksAdd[4];
- long i=0,j=0,k=0;
- long WholeSampleSize=0;
- long SmpDescAdd=0;
- long PatAdds[64];
- long SmpDataAdds[31];
- long SmpSizes[31];
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t *Whatever;
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;
+ uint8_t poss[36][2];
+ uint8_t Max=0x00;
+ uint8_t Note,Smp,Fx,FxVal;
+ int16_t TracksAdd[4];
+ int32_t i=0,j=0,k=0;
+ int32_t WholeSampleSize=0;
+ int32_t SmpDescAdd=0;
+ int32_t PatAdds[64];
+ int32_t SmpDataAdds[31];
+ int32_t SmpSizes[31];
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
if ( Save_Status == BAD )
BZERO ( SmpDataAdds , 31*4 );
BZERO ( SmpSizes , 31*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* write title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
-/* testStoneArtsPlayer() */
-/* Rip_StoneArtsPlayer() */
-/* Depack_StoneArtsPlayer() */
-
-
-#include "globals.h"
-#include "extern.h"
-
-
-short testStoneArtsPlayer ( void )
-{
- /* test 1 */
- if ( PW_i < 1080 )
- {
- return BAD;
- }
-
- /* test 2 - ntk byte */
- PW_Start_Address = PW_i-1080;
- if ( (in_data[PW_Start_Address+951] != 0x7f) && (in_data[PW_Start_Address+951] != 0x00) )
- {
- return BAD;
- }
-
- /* test 3 - patternlist size */
- if ( in_data[PW_Start_Address+950] > 0x7f )
- {
- return BAD;
- }
-
- for ( PW_k=0 ; PW_k<31 ; PW_k++ )
- {
- /* size */
- PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);
- /* loop start */
- PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2);
- /* loop size */
- PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);
-
- if ( test_smps(PW_j*2, PW_m, PW_n, in_data[PW_Start_Address+45+30*PW_k], in_data[PW_Start_Address+44+30*PW_k] ) == BAD )
- {
- /*printf ( "start : %ld\n", PW_Start_Address );*/
- return BAD;
- }
-
- PW_WholeSampleSize += PW_j;
- }
-
- return GOOD;
-}
-
-
-
-void Rip_StoneArtsPlayer ( void )
-{
- /* PW_WholeSampleSize is already the whole sample size */
- PW_l=0;
- for ( PW_k=0 ; PW_k<128 ; PW_k++ )
- if ( in_data[PW_Start_Address+952+PW_k] > PW_l )
- PW_l = in_data[PW_Start_Address+952+PW_k];
- PW_l += 1;
- OutputSize = (PW_l*1024) + 1084 + PW_WholeSampleSize;
-
- CONVERT = GOOD;
- Save_Rip ( "Stone Arts Player module", StoneArtsPlayer );
-
- if ( Save_Status == GOOD )
- PW_i += 1082; /* 1080 could be enough */
-}
-
-
-
-/*
- * StoneArtsPlayer.c 2007 (c) Asle
- *
- * Converts MODs converted with Stone Arts Player
- *
- * example module provided by Muerto ;)
-*/
-void Depack_StoneArtsPlayer ( void )
-{
- Uchar *Whatever;
- Uchar poss[37][2];
- Uchar Max=0x00;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where=PW_Start_Address;
- FILE *out;
-
- fillPTKtable(poss);
-
- if ( Save_Status == BAD )
- return;
-
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
- out = PW_fopen ( Depacked_OutName , "w+b" );
-
- /* read and write whole header */
- fwrite ( &in_data[Where] , 950 , 1 , out );
-
- /* get whole sample size */
- for ( i=0 ; i<31 ; i++ )
- {
- WholeSampleSize += (((in_data[Where+42+i*30]*256)+in_data[Where+43+i*30])*2);
- }
- /*printf ( "Whole sanple size : %ld\n" , WholeSampleSize );*/
-
- /* read and write size of pattern list */
- /* read and write ntk byte and pattern list */
- fwrite ( &in_data[Where+950] , 130 , 1 , out );
- Where += 952;
-
- /* write ID */
- Whatever = (Uchar *) malloc (4);
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
- Whatever[3] = '.';
- fwrite ( Whatever , 4 , 1 , out );
-
- /* get number of pattern */
- Max = 0x00;
- for ( i=0 ; i<128 ; i++ )
- {
- if ( in_data[Where+i] > Max )
- Max = in_data[Where+i];
- }
- /*printf ( "Number of pattern : %d\n" , Max );*/
-
- /* pattern data */
- Where = PW_Start_Address + 1084;
- for ( i=0 ; i<=Max ; i++ )
- {
- for ( j=0 ; j<256 ; j++ )
- {
- Whatever[0] = in_data[Where];
- Whatever[2] = in_data[Where+2];
- Whatever[3] = in_data[Where+3];
- Whatever[0] |= poss[in_data[Where+1]/2][0];
- Whatever[1] = poss[in_data[Where+1]/2][1];
- fwrite ( Whatever , 4 , 1 , out );
- Where += 4;
- }
- }
- free ( Whatever );
-
-
- /* sample data */
- fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );
-
-
- /* crap */
- Crap ( "Stone Arts Player " , BAD , BAD , out );
-
- fflush ( out );
- fclose ( out );
-
- printf ( "done\n" );
- return; /* useless ... but */
-}
-
+/* testStoneArtsPlayer() */\r
+/* Rip_StoneArtsPlayer() */\r
+/* Depack_StoneArtsPlayer() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testStoneArtsPlayer ( void )\r
+{\r
+ /* test 1 */\r
+ if ( PW_i < 1080 )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* test 2 - ntk byte */\r
+ PW_Start_Address = PW_i-1080;\r
+ if ( (in_data[PW_Start_Address+951] != 0x7f) && (in_data[PW_Start_Address+951] != 0x00) )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ /* test 3 - patternlist size */\r
+ if ( in_data[PW_Start_Address+950] > 0x7f )\r
+ {\r
+ return BAD;\r
+ }\r
+ \r
+ for ( PW_k=0 ; PW_k<31 ; PW_k++ )\r
+ {\r
+ /* size */\r
+ PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);\r
+ /* loop start */\r
+ PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2);\r
+ /* loop size */\r
+ PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);\r
+\r
+ if ( test_smps(PW_j*2, PW_m, PW_n, in_data[PW_Start_Address+45+30*PW_k], in_data[PW_Start_Address+44+30*PW_k] ) == BAD )\r
+ {\r
+ /*printf ( "start : %ld\n", PW_Start_Address );*/\r
+ return BAD; \r
+ }\r
+\r
+ PW_WholeSampleSize += PW_j;\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_StoneArtsPlayer ( void )\r
+{\r
+ /* PW_WholeSampleSize is already the whole sample size */\r
+ PW_l=0;\r
+ for ( PW_k=0 ; PW_k<128 ; PW_k++ )\r
+ if ( in_data[PW_Start_Address+952+PW_k] > PW_l )\r
+ PW_l = in_data[PW_Start_Address+952+PW_k];\r
+ PW_l += 1;\r
+ OutputSize = (PW_l*1024) + 1084 + PW_WholeSampleSize;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "Stone Arts Player module", StoneArtsPlayer );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1082; /* 1080 could be enough */\r
+}\r
+\r
+\r
+\r
+/*\r
+ * StoneArtsPlayer.c 2007 (c) Asle\r
+ *\r
+ * Converts MODs converted with Stone Arts Player\r
+ *\r
+ * example module provided by Muerto ;)\r
+*/\r
+void Depack_StoneArtsPlayer ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ uint8_t poss[37][2];\r
+ uint8_t Max=0x00;\r
+ int32_t WholeSampleSize=0;\r
+ int32_t i=0,j=0;\r
+ int32_t Where=PW_Start_Address;\r
+ FILE *out;\r
+\r
+ fillPTKtable(poss);\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ /* read and write whole header */\r
+ fwrite ( &in_data[Where] , 950 , 1 , out );\r
+\r
+ /* get whole sample size */\r
+ for ( i=0 ; i<31 ; i++ )\r
+ {\r
+ WholeSampleSize += (((in_data[Where+42+i*30]*256)+in_data[Where+43+i*30])*2);\r
+ }\r
+ /*printf ( "Whole sanple size : %ld\n" , WholeSampleSize );*/\r
+\r
+ /* read and write size of pattern list */\r
+ /* read and write ntk byte and pattern list */\r
+ fwrite ( &in_data[Where+950] , 130 , 1 , out );\r
+ Where += 952;\r
+\r
+ /* write ID */\r
+ Whatever = (uint8_t *) malloc (4);\r
+ Whatever[0] = 'M';\r
+ Whatever[1] = '.';\r
+ Whatever[2] = 'K';\r
+ Whatever[3] = '.';\r
+ fwrite ( Whatever , 4 , 1 , out );\r
+\r
+ /* get number of pattern */\r
+ Max = 0x00;\r
+ for ( i=0 ; i<128 ; i++ )\r
+ {\r
+ if ( in_data[Where+i] > Max )\r
+ Max = in_data[Where+i];\r
+ }\r
+ /*printf ( "Number of pattern : %d\n" , Max );*/\r
+\r
+ /* pattern data */\r
+ Where = PW_Start_Address + 1084;\r
+ for ( i=0 ; i<=Max ; i++ )\r
+ {\r
+ for ( j=0 ; j<256 ; j++ )\r
+ {\r
+ Whatever[0] = in_data[Where];\r
+ Whatever[2] = in_data[Where+2];\r
+ Whatever[3] = in_data[Where+3];\r
+ Whatever[0] |= poss[in_data[Where+1]/2][0];\r
+ Whatever[1] = poss[in_data[Where+1]/2][1];\r
+ fwrite ( Whatever , 4 , 1 , out );\r
+ Where += 4;\r
+ }\r
+ }\r
+ free ( Whatever );\r
+\r
+\r
+ /* sample data */\r
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );\r
+\r
+\r
+ /* crap */\r
+ Crap ( "Stone Arts Player " , BAD , BAD , out );\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
+\r
#include "extern.h"
-short testStoneCracker270 ( void )
+int16_t testStoneCracker270 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testSTC299 ( void )
+int16_t testSTC299 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testSTC299b ( void )
+int16_t testSTC299b ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testSTC299d ( void )
+int16_t testSTC299d ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testSTC300 ( void )
+int16_t testSTC300 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testSTC310 ( void )
+int16_t testSTC310 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testSuperCruncher27 ( void )
+int16_t testSuperCruncher27 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
+ uint8_t * Amiga_EXE_Header_Block;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
#include "extern.h"
-short testSyncroPacker ( void )
+int16_t testSyncroPacker ( void )
{
PW_Start_Address = PW_i;
if ( ((PW_l - 32)+PW_Start_Address) > PW_in_size )
{
-/*printf ( "#3 Start:%ld\n" , PW_Start_Address );*/
+/*printf ( "#3 Start:%ld (PW_l:%ld)\n" , PW_Start_Address,PW_l );*/
return BAD;
}
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
--- /dev/null
+/*
+ * THX - AHX ripper
+ * 20130413 - slightly adapted to HVL ripping
+*/
+/* testTHX() */
+/* Rip_THX() */
+
+
+
+#include "globals.h"
+#include "extern.h"
+
+
+int16_t testTHX ( void )
+{
+ PW_Start_Address = PW_i;
+
+ /* file size < 113 */
+ if ( (PW_in_size - PW_Start_Address) < 30 )
+ {
+ /*printf ( "#1 (start:%ld) (size:%ld)\n" , PW_Start_Address , PW_in_size-PW_Start_Address);*/
+ return BAD;
+ }
+
+ /* get nbr byte to bypass to reach txts */
+ PW_m = ( ( in_data[PW_Start_Address+4]*256) + in_data[PW_Start_Address+5] );
+
+ /* test in-size again */
+ if ( PW_Start_Address+PW_m > PW_in_size )
+ {
+/* printf ( "#2 (start:%d) (1st smp addy:%d)\n" , PW_Start_Address , PW_m);*/
+ return BAD;
+ }
+
+ /* test patternlist size */
+ PW_j = (in_data[PW_Start_Address+6] & 0x0f)*256 + in_data[PW_Start_Address+7];
+ /* only 999 position are possible - but I've seen 1024 ... */
+ if ( PW_j > 1024 )
+ {
+/* printf ( "#3 (start:%d) (1st smp addy:%d)\n" , PW_Start_Address , PW_m);*/
+ return BAD;
+ }
+
+ /* test patternlist restart - AHX only */
+ if (in_data[PW_Start_Address] == 'T')
+ {
+ PW_k = (in_data[PW_Start_Address+8] & 0x0f)*256 + in_data[PW_Start_Address+9];
+ /* only 999 position are possible - but I've seen 1024 ... */
+ if ( PW_k >= PW_j )
+ {
+ /*printf ( "#4 (start:%d) (1st smp addy:%d)\n" , PW_Start_Address , PW_m);*/
+ return BAD;
+ }
+ }
+
+ PW_k = in_data[PW_Start_Address+10];
+ /* track size */
+ if ( PW_k > 64 )
+ {
+ /*printf ( "#5 (start:%d) (track size:%d)\n" , PW_Start_Address , PW_k);*/
+ return BAD;
+ }
+
+ return GOOD;
+}
+
+
+
+void Rip_THX ( void )
+{
+ /* PW_m is the address of txt */
+
+ uint32_t Where = PW_Start_Address+PW_m;
+ uint8_t SMP = 0x00,a = 0x00;
+ SMP = in_data[PW_Start_Address+12];
+
+ OutputSize = PW_m;
+
+ /* title */
+ if (in_data[Where] == 0x00)
+ OutputSize += 1;
+ else
+ while (in_data[Where] != 0x00)
+ Where += 1;
+
+ Where += 1;
+ if (SMP != 0x00)
+ {
+ while (a<SMP)
+ {
+ if ( Where > PW_in_size )
+ break;
+ if (in_data[Where] == 0x00)
+ a+=0x01;
+ Where += 1;
+ }
+ }
+
+ OutputSize = Where - PW_Start_Address;
+
+ CONVERT = BAD;
+
+ if (in_data[PW_Start_Address] == 'T')
+ Save_Rip ( "AHX v1/v2 module", AHX );
+ if (in_data[PW_Start_Address] == 'H')
+ Save_Rip ( "Hively Tracker module", HVL );
+
+
+ if ( Save_Status == GOOD )
+ PW_i += 1; /* after THX/HVL tag */
+}
+
-short testTMK ( void )
+int16_t testTMK ( void )
{
/* test 1 */
PW_Start_Address = PW_i;
void Depack_TMK ( void )
{
- Uchar *Pattern;
- long i=0,j=0,k=0,l=0;
- long Total_Sample_Size=0;
- Uchar poss[37][2];
+ uint8_t *Pattern;
+ int32_t i=0,j=0,k=0,l=0;
+ int32_t Total_Sample_Size=0;
+ uint8_t poss[37][2];
int patdataaddy;
int reftableaddy;
int maxlineaddy;
int sizlastline;
- long *samplesizes;
- Uchar patternlist[128];
- Uchar maxpat = 0x00;
- Uchar NOP=0x00; /* number of pattern */
- Uchar NOS=0x00; /* number of sample */
- Uchar *Whatever;
- Uchar GLOBAL_DELTA = OFF;
- long Where = PW_Start_Address;
+ int32_t *samplesizes;
+ uint8_t patternlist[128];
+ uint8_t maxpat = 0x00;
+ uint8_t NOP=0x00; /* number of pattern */
+ uint8_t NOS=0x00; /* number of sample */
+ uint8_t *Whatever;
+ uint8_t GLOBAL_DELTA = OFF;
+ int32_t Where = PW_Start_Address;
FILE *out;/*,*info;*/
fillPTKtable(poss);
BZERO ( patternlist , 128 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*info = fopen ( "info", "w+b");*/
- Whatever = (Uchar *) malloc (128);
+ Whatever = (uint8_t *) malloc (128);
BZERO (Whatever,128);
/* title */
if ( (in_data[Where+1]&0x80) == 0x80 )
GLOBAL_DELTA = ON;
Where += 2;
- samplesizes = (long *) malloc (NOS*sizeof(long));
+ samplesizes = (int32_t *) malloc (NOS*sizeof(int32_t ));
/*fprintf ( info,"NOP:%d NOS %d (Where = %ld)\n",NOP,NOS,Where);*/
for ( i=0 ; i<NOS ; i++ )
if ( (NOP/2)*2 != NOP )
Where += 1;
reftableaddy = Where;
- patdataaddy = maxpat*128 + reftableaddy; /* one ref is a short:64*2 */
+ patdataaddy = maxpat*128 + reftableaddy; /* one ref is a int16_t :64*2 */
/*fprintf ( info,"reftableaddy:%x\n"
"patdataaddy:%x\n",reftableaddy,patdataaddy);*/
/*fprintf (info,"sizlastline : %d\n",sizlastline);*/
/* pat data */
- Pattern = (Uchar *) malloc (1024);
+ Pattern = (uint8_t *) malloc (1024);
for ( i=0 ; i<maxpat ; i+=1 )
{
BZERO (Pattern, 1024);
if ( GLOBAL_DELTA == ON )
{
- Uchar c1,c2,c3;
+ uint8_t c1,c2,c3;
signed char *SmpDataWork;
k = maxlineaddy+sizlastline;
for ( i=0; i<NOS; i++ )
/*fclose ( info );*/
printf ( "done\n" );
- free( samplesizes );
return; /* useless ... but */
}
#include "extern.h"
-short testTNMCruncher11 ( void )
+int16_t testTNMCruncher11 ( void )
{
PW_Start_Address = PW_i;
/* PW_l is still the whole size */
/* PW_m is the decrunched size (necessary to rebuild header) */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 40;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 40 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 40 );
BZERO ( Amiga_EXE_Header_Block , 40 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[34] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 680;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[24] = *(Whatever+3);
Amiga_EXE_Header_Block[25] = *(Whatever+2);
Amiga_EXE_Header_Block[26] = *(Whatever+1);
Amiga_EXE_Header_Block[27] = *Whatever;
PW_j = PW_m / 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testTetrapack102 ( void )
+int16_t testTetrapack102 ( void )
{
PW_Start_Address = PW_i;
}
+int16_t testTetrapack101 ( void )
+{
+ PW_Start_Address = PW_i;
+
+ if ( (in_data[PW_Start_Address+20] != 0x20 ) ||
+ (in_data[PW_Start_Address+21] != 0x20 ) ||
+ (in_data[PW_Start_Address+22] != 0xE2 ) ||
+ (in_data[PW_Start_Address+23] != 0x88 ) ||
+ (in_data[PW_Start_Address+24] != 0x66 ) ||
+ (in_data[PW_Start_Address+25] != 0x02 ) ||
+ (in_data[PW_Start_Address+26] != 0x61 ) ||
+ (in_data[PW_Start_Address+27] != 0x34 ) ||
+ (in_data[PW_Start_Address+28] != 0x65 ) ||
+ (in_data[PW_Start_Address+29] != 0x6C ) ||
+ (in_data[PW_Start_Address+30] != 0x72 ) ||
+ (in_data[PW_Start_Address+32] != 0x76 ) )
+ {
+ /* should be enough :))) */
+/*printf ( "#2 Start:%ld\n" , PW_Start_Address );*/
+ return BAD;
+
+ }
+
+
+ /* packed size */
+ PW_l = ( (in_data[PW_Start_Address+6]*256*256*256) +
+ (in_data[PW_Start_Address+7]*256*256) +
+ (in_data[PW_Start_Address+8]*256) +
+ in_data[PW_Start_Address+9] );
+
+ PW_l += 260;
+
+
+ if ( PW_i >= 32 )
+ {
+ if ( (in_data[PW_Start_Address-32] != 0x00 ) ||
+ (in_data[PW_Start_Address-31] != 0x00 ) ||
+ (in_data[PW_Start_Address-30] != 0x03 ) ||
+ (in_data[PW_Start_Address-29] != 0xF3 ) ||
+ (in_data[PW_Start_Address-28] != 0x00 ) ||
+ (in_data[PW_Start_Address-27] != 0x00 ) ||
+ (in_data[PW_Start_Address-26] != 0x00 ) ||
+ (in_data[PW_Start_Address-25] != 0x00 ) ||
+ (in_data[PW_Start_Address-24] != 0x00 ) ||
+ (in_data[PW_Start_Address-23] != 0x00 ) ||
+ (in_data[PW_Start_Address-22] != 0x00 ) ||
+ (in_data[PW_Start_Address-21] != 0x01 ) ||
+ (in_data[PW_Start_Address-20] != 0x00 ) ||
+ (in_data[PW_Start_Address-19] != 0x00 ) ||
+ (in_data[PW_Start_Address-18] != 0x00 ) ||
+ (in_data[PW_Start_Address-17] != 0x00 ) )
+ {
+ Amiga_EXE_Header = BAD;
+ }
+ else
+ Amiga_EXE_Header = GOOD;
+ }
+ else
+ Amiga_EXE_Header = BAD;
+
+ return GOOD;
+ /* PW_l is the size of the pack */
+}
void Rip_Tetrapack102 ( void )
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
if ( Save_Status == GOOD )
PW_i += (OutputSize - 36); /* 32 should do but call it "just to be sure" :) */
}
+
+void Rip_Tetrapack101 ( void )
+{
+ /* PW_l is still the whole size */
+
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
+
+ OutputSize = PW_l;
+
+ CONVERT = BAD;
+
+ if ( Amiga_EXE_Header == BAD )
+ {
+ OutputSize -= 32;
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
+ BZERO ( Amiga_EXE_Header_Block , 32 );
+ Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
+ Amiga_EXE_Header_Block[3] = 0xF3;
+ Amiga_EXE_Header_Block[11] = 0x01;
+ Amiga_EXE_Header_Block[27] = 0xE9;
+
+ /* WARNING !!! WORKS ONLY ON PC !!! */
+ /* 68k machines code : c1 = *(Whatever+2); */
+ /* 68k machines code : c2 = *(Whatever+3); */
+ PW_j = PW_l - 36;
+ PW_j /= 4;
+ Whatever = (uint8_t *) &PW_j;
+ Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
+ Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
+ Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
+ Amiga_EXE_Header_Block[23] = Amiga_EXE_Header_Block[31] = *Whatever;
+ Save_Rip_Special ( "Tetrapack 1.01 Exe-file", TPACK101, Amiga_EXE_Header_Block , 32 );
+ free ( Amiga_EXE_Header_Block );
+ }
+ else
+ {
+ PW_Start_Address -= 32;
+ Save_Rip ( "Tetrapack 1.01 Exe-file", TPACK101 );
+ }
+
+ if ( Save_Status == GOOD )
+ PW_i += 1;
+}
#include "extern.h"
-short testTetrapack_2_1 ( void )
+int16_t testTetrapack_2_1 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
}
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 36); /* 32 should do but call it "just to be sure" :) */
+ PW_i += 1; /* bypass only triggering byte */
}
#include "extern.h"
-short testTetrapack_2_2 ( void )
+int16_t testTetrapack_2_2 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
}
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 36); /* 32 should do but call it "just to be sure" :) */
+ PW_i += 1; /* 32 should do but call it "just to be sure" :) */
}
#include "extern.h"
-short testTheDarkDemon ( void )
+int16_t testTheDarkDemon ( void )
{
/* test #1 */
if ( PW_i < 137 )
/* loop size (replen) */
PW_n = (((in_data[PW_Start_Address+PW_j*14+142]*256)+in_data[PW_Start_Address+PW_j*14+143])*2);
+ /* volume > 40h ? */
+ if ( in_data[PW_Start_Address+PW_j*14+136] > 0x0F )
+ {
+/*printf ( "#2,finetune (start:%ld)\n" , PW_Start_Address );*/
+ return BAD;
+ }
+
/* volume > 40h ? */
if ( in_data[PW_Start_Address+PW_j*14+137] > 0x40 )
{
void Depack_TheDarkDemon ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar poss[37][2];
- Uchar *Whatever;
- Uchar Pattern[1024];
- Uchar PatMax=0x00;
- long i=0,j=0,k=0,z;
- long Whole_Sample_Size=0;
- long SampleAddresses[31];
- long SampleSizes[31];
- long Where = PW_Start_Address;
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t poss[37][2];
+ uint8_t *Whatever;
+ uint8_t Pattern[1024];
+ uint8_t PatMax=0x00;
+ int32_t i=0,j=0,k=0,z;
+ int32_t Whole_Sample_Size=0;
+ int32_t SampleAddresses[31];
+ int32_t SampleSizes[31];
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
BZERO ( SampleAddresses , 31*4 );
BZERO ( SampleSizes , 31*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* write ptk header */
- Whatever = (Uchar *) malloc ( 1080 );
+ Whatever = (uint8_t *) malloc ( 1080 );
BZERO (Whatever , 1080);
fwrite ( Whatever , 1080 , 1 , out );
j /= 2;
/* use of htonl() suggested by Xigh !.*/
z = htonl(j);
- c1 = *((Uchar *)&z+2);
- c2 = *((Uchar *)&z+3);
+ c1 = *((uint8_t *)&z+2);
+ c2 = *((uint8_t *)&z+3);
/* write loop start */
fwrite ( &c1 , 1 , 1 , out );
void Depack_P22 ( void )
{
- Uchar c1,c2,c3,c4;
- Uchar *Whatever;
- Uchar PatPos = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar sample,note,Note[2];
- Uchar Pattern_Data[128][1024];
- short Pattern_Addresses[128];
- long Track_Data_Address = 0;
- long Track_Table_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long SampleAddress[31];
- long SampleSize[31];
- long i=0,j,k,l;
- long voice[4];
- long Where = PW_Start_Address;
+ uint8_t c1,c2,c3,c4;
+ uint8_t *Whatever;
+ uint8_t PatPos = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t sample,note,Note[2];
+ uint8_t Pattern_Data[128][1024];
+ int16_t Pattern_Addresses[128];
+ int32_t Track_Data_Address = 0;
+ int32_t Track_Table_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t SampleAddress[31];
+ int32_t SampleSize[31];
+ int32_t i=0,j,k,l;
+ int32_t voice[4];
+ int32_t Where = PW_Start_Address;
FILE *out;/*,*debug;*/
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*debug = fopen ( "debug", "w+b" );*/
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
k /= 2;
/* use of htonl() suggested by Xigh !.*/
l = htonl(k);
- c1 = *((Uchar *)&l+2);
- c2 = *((Uchar *)&l+3);
+ c1 = *((uint8_t *)&l+2);
+ c2 = *((uint8_t *)&l+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
fwrite ( &in_data[Where+10] , 2 , 1 , out );
*/
void Depack_P30 ( void )
{
- Uchar c1,c2,c3,c4,c5;
- Uchar *Whatever;
- Uchar PatPos = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar sample,note,Note[2];
- Uchar Pattern_Data[128][1024];
- short Pattern_Addresses[128];
- long Track_Data_Address = 0;
- long Track_Table_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long SampleAddress[31];
- long SampleSize[31];
- long i=0,j,k,a,c,z;/*l*/
- long voice[4];
- long Where = PW_Start_Address;
+ uint8_t c1,c2,c3,c4,c5;
+ uint8_t *Whatever;
+ uint8_t PatPos = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t sample,note,Note[2];
+ uint8_t Pattern_Data[128][1024];
+ int16_t Pattern_Addresses[128];
+ int32_t Track_Data_Address = 0;
+ int32_t Track_Table_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t SampleAddress[31];
+ int32_t SampleSize[31];
+ int32_t i=0,j,k,a,c,z;/*l*/
+ int32_t voice[4];
+ int32_t Where = PW_Start_Address;
FILE *out;/*,*debug;*/
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
if ( out == NULL)
/* debug = fopen ( "debug", "w+b" );*/
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
k /= 2;
/* use of htonl() suggested by Xigh !.*/
z = htonl(k);
- c1 = *((Uchar *)&z+2);
- c2 = *((Uchar *)&z+3);
+ c1 = *((uint8_t *)&z+2);
+ c2 = *((uint8_t *)&z+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
fwrite ( &in_data[Where+10] , 2 , 1 , out );
#include "extern.h"
-short testP40A ( void )
+int16_t testP40A ( void )
{
PW_Start_Address = PW_i;
*/
void Depack_P40 ( void )
{
- Uchar c1,c2,c3,c4,c5;
- Uchar *Whatever;
- Uchar PatPos = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar sample,note,Note[2];
- Uchar Track_Data[512][256];
- short Track_Addresses[128][4];
- long Track_Data_Address = 0;
- long Track_Table_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long SampleAddress[31];
- long SampleSize[31];
- long i=0,j,k,l,a,c,z;
- long Where = PW_Start_Address;
+ uint8_t c1,c2,c3,c4,c5;
+ uint8_t *Whatever;
+ uint8_t PatPos = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t sample,note,Note[2];
+ uint8_t Track_Data[512][256];
+ int16_t Track_Addresses[128][4];
+ int32_t Track_Data_Address = 0;
+ int32_t Track_Table_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t SampleAddress[31];
+ int32_t SampleSize[31];
+ int32_t i=0,j,k,l,a,c,z;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read check ID */
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
k /= 2;
/* use of htonl() suggested by Xigh !.*/
z = htonl(k);
- c1 = *((Uchar *)&z+2);
- c2 = *((Uchar *)&z+3);
+ c1 = *((uint8_t *)&z+2);
+ c2 = *((uint8_t *)&z+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
fwrite ( &in_data[Where+10] , 2 , 1 , out );
case 0x06:
case 0x0A:
c3 = (c3 > 0x7f) ? ((0x100-c3)<<4) : c3;
-// if ( c3 >= 0x80 )
-// c3 = (c3<<4)&0xf0;
+/* if ( c3 >= 0x80 )*/
+/* c3 = (c3<<4)&0xf0;*/
break;
default:
break;
if ( (c4 > 0x00) && (c4 <0x80) )
k += c4;
- if ( (c4 > 0x7f) && (c4 <=0xff) )
+ if ( c4 > 0x7f )/* && (c4 <=0xff) )*/
{
k+=1;
for ( l=256 ; l>c4 ; l-- )
case 0x06:
case 0x0A:
c3 = (c3 > 0x7f) ? ((0x100-c3)<<4) : c3;
-// if ( c3 >= 0x80 )
-// c3 = (c3<<4)&0xf0;
+/* if ( c3 >= 0x80 )*/
+/* c3 = (c3<<4)&0xf0;*/
break;
default:
break;
if ( (c4 > 0x00) && (c4 <0x80) )
k += c4;
- if ( (c4 > 0x7f) && (c4 <=0xff) )
+ if ( c4 > 0x7f ) /*&& (c4 <=0xff) )*/
{
k+=1;
for ( l=256 ; l>c4 ; l-- )
#include "extern.h"
-short testP41A ( void )
+int16_t testP41A ( void )
{
PW_Start_Address = PW_i;
void Rip_P41A ( void )
{
+ int32_t seed=0;
+ /* potential fake address if rip from memory - thus, start address*/
PW_l = ( (in_data[PW_Start_Address+16]*256*256*256) +
(in_data[PW_Start_Address+17]*256*256) +
(in_data[PW_Start_Address+18]*256) +
in_data[PW_Start_Address+19] );
+ PW_m = ( (in_data[PW_Start_Address+12]*256*256*256) +
+ (in_data[PW_Start_Address+13]*256*256) +
+ (in_data[PW_Start_Address+14]*256) +
+ in_data[PW_Start_Address+15] );
+ /* check here for memory addresses, which are screwed up */
+ PW_j = (in_data[PW_Start_Address+6]*16)+4+12;
+ if ( PW_j != PW_m )
+ {
+ /* it's memory addresses then */
+ seed = (PW_m - PW_j);
+ PW_l -= seed;
+ }
/* get whole sample size */
+ /* PW_k is the number of samples */
PW_o = 0;
for ( PW_j=0 ; PW_j<PW_k ; PW_j++ )
{
PW_m = ( (in_data[PW_Start_Address+20+PW_j*16]*256*256*256) +
(in_data[PW_Start_Address+21+PW_j*16]*256*256) +
(in_data[PW_Start_Address+22+PW_j*16]*256) +
- in_data[PW_Start_Address+23+PW_j*16] );
+ in_data[PW_Start_Address+23+PW_j*16] ) - seed;
if ( PW_m > PW_o )
{
PW_o = PW_m;
*/
void Depack_P41A ( void )
{
- Uchar c1,c2,c3,c4,c5;
- Uchar *Whatever;
- Uchar PatPos = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar sample,note,Note[2];
- Uchar Track_Data[512][256];
- short Track_Addresses[128][4];
- long Track_Data_Address = 0;
- long Track_Table_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long SampleAddress[31];
- long SampleSize[31];
- long i=0,j,k,l,a,c,z;
- long Where = PW_Start_Address;
+ uint8_t c1,c2,c3,c4,c5;
+ uint8_t *Whatever;
+ uint8_t PatPos = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t sample,note,Note[2];
+ uint8_t Track_Data[512][256];
+ int16_t Track_Addresses[128][4];
+ int32_t Track_Data_Address = 0;
+ int32_t Track_Table_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t SampleAddress[31];
+ int32_t SampleSize[31];
+ int32_t i=0,j,k,l,a,c,z;
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read check ID */
in_data[Where+3];
Where += 4;
+ /* check here for memory addresses, which are screwed up */
+ i = (Nbr_Sample*16)+4+12;
+ if ( i != Track_Table_Address )
+ {
+ /* it's memory addresses then */
+ int32_t seed = (Track_Table_Address - i);
+ Track_Data_Address -= seed;
+ Track_Table_Address -= seed;
+ Sample_Data_Address -= seed;
+ }
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
(in_data[Where+1]*256*256)+
(in_data[Where+2]*256)+
in_data[Where+3];
- SampleAddress[i] = j;
+ SampleAddress[i] = j - Sample_Data_Address; /* just a try with -*/
/* write sample name */
fwrite ( Whatever , 22 , 1 , out );
k = (in_data[Where+6]*256*256*256)+
(in_data[Where+7]*256*256)+
(in_data[Where+8]*256)+
- in_data[Where+9];
+ in_data[Where+9] - Sample_Data_Address; /* just a try with -*/
/* writing now */
fwrite ( &in_data[Where+4] , 2 , 1 , out );
k /= 2;
/* use of htonl() suggested by Xigh !.*/
z = htonl(k);
- c1 = *((Uchar *)&z+2);
- c2 = *((Uchar *)&z+3);
+ c1 = *((uint8_t *)&z+2);
+ c2 = *((uint8_t *)&z+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
fwrite ( &in_data[Where+10] , 2 , 1 , out );
case 0x06:
case 0x0A:
c3 = (c3 > 0x7f) ? ((0x100-c3)<<4) : c3;
-// if ( c3 >= 0x80 )
-// c3 = (c3<<4)&0xf0;
+/* if ( c3 >= 0x80 )*/
+/* c3 = (c3<<4)&0xf0;*/
break;
default:
break;
if ( (c4 > 0x00) && (c4 <0x80) )
k += c4;
- if ( (c4 > 0x7f) && (c4 <=0xff) )
+ if ( c4 > 0x7f ) /* && (c4 <=0xff) )*/
{
k+=1;
for ( l=256 ; l>c4 ; l-- )
case 0x06:
case 0x0A:
c3 = (c3 > 0x7f) ? ((0x100-c3)<<4) : c3;
-// if ( c3 >= 0x80 )
-// c3 = (c3<<4)&0xf0;
+/* if ( c3 >= 0x80 )*/
+/* c3 = (c3<<4)&0xf0;*/
break;
default:
break;
if ( (c4 > 0x00) && (c4 <0x80) )
k += c4;
- if ( (c4 > 0x7f) && (c4 <=0xff) )
+ if ( c4 > 0x7f ) /* && (c4 <=0xff) )*/
{
k+=1;
for ( l=256 ; l>c4 ; l-- )
#include "extern.h"
-short testP50A ( void )
+int16_t testP50A ( void )
{
int nbr_notes=0;
if ( PW_i < 7 )
/*printf ( "#2\n" );*/
return BAD;
}
+
+ /* 0 or more than 31 samples ? */
if ( ((PW_k&0x3f) > 0x1F) || ((PW_k&0x3F) == 0) )
{
/*printf ( "#2,1 Start:%ld\n" , PW_Start_Address );*/
}
}
}
+
+ /* test whole size */
+ if (PW_WholeSampleSize <= 4)
+ {
+ /*printf ( "#5,3 Start $ld, whole sample size : %ld\n",PW_Start_Address,PW_WholeSampleSize );*/
+ return BAD;
+ }
/* test sample data address */
PW_j = (in_data[PW_Start_Address]*256)+in_data[PW_Start_Address+1];
void Depack_P50A ( void )
{
- Uchar c1,c2,c3,c4,c5,c6;
- long Max;
- Uchar *Whatever;
+ uint8_t c1,c2,c3,c4,c5,c6;
+ int32_t Max;
+ uint8_t *Whatever;
signed char *SmpDataWork;
- Uchar PatPos = 0x00;
- Uchar PatMax = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar Track_Data[512][256];
- Uchar SmpSizes[31][2];
- Uchar GLOBAL_DELTA=OFF;
- long Track_Address[128][4];
- long Track_Data_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long i=0,j,k,l,a,b,z;
- long SampleSizes[31];
- long SampleAddresses[32];
- long Where = PW_Start_Address;
+ uint8_t PatPos = 0x00;
+ uint8_t PatMax = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t Track_Data[512][256];
+ uint8_t SmpSizes[31][2];
+ uint8_t GLOBAL_DELTA=OFF;
+ int32_t Track_Address[128][4];
+ int32_t Track_Data_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t i=0,j,k,l,a,b,z;
+ int32_t SampleSizes[31];
+ int32_t SampleAddresses[32];
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read sample data address */
Nbr_Sample &= 0x3F;
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
/* use of htonl() suggested by Xigh !.*/
z = htonl(l);
- c1 = *((Uchar *)&z+2);
- c2 = *((Uchar *)&z+3);
+ c1 = *((uint8_t *)&z+2);
+ c2 = *((uint8_t *)&z+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
#include "extern.h"
-short testP60A_nopack ( void )
+int16_t testP60A_nopack ( void )
{
int nbr_notes=0;
if ( PW_i < 7 )
/******************/
/* packed samples */
/******************/
-short testP60A_pack ( void )
+int16_t testP60A_pack ( void )
{
if ( PW_i < 11 )
{
Save_Rip ( "The Player 6.0A module", P60A );
if ( Save_Status == GOOD )
- PW_i += (OutputSize - 12); /* 7 should do but call it "just to be sure" :) */
+ PW_i += 8; /* 7 should do but call it "just to be sure" :) */
}
void Depack_P60A ( void )
{
- Uchar c1,c2,c3,c4,c5,c6;
- long Max;
- Uchar *Whatever;
+ uint8_t c1,c2,c3,c4,c5,c6;
+ int32_t Max;
+ uint8_t *Whatever;
signed char *SmpDataWork;
- Uchar PatPos = 0x00;
- Uchar PatMax = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar Track_Data[512][256];
- Uchar SmpSizes[31][2];
- Uchar PACK[31];
-/* Uchar DELTA[31];*/
- Uchar GLOBAL_DELTA=OFF;
- Uchar GLOBAL_PACK=OFF;
- long Track_Address[128][4];
- long Track_Data_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long i=0,j,k,l,a,b,z;
- long SampleSizes[31];
- long SampleAddresses[32];
- long Where = PW_Start_Address;
+ uint8_t PatPos = 0x00;
+ uint8_t PatMax = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t Track_Data[512][256];
+ uint8_t SmpSizes[31][2];
+ uint8_t PACK[31];
+/* uint8_t DELTA[31];*/
+ uint8_t GLOBAL_DELTA=OFF;
+ uint8_t GLOBAL_PACK=OFF;
+ int32_t Track_Address[128][4];
+ int32_t Track_Data_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t i=0,j,k,l,a,b,z;
+ int32_t SampleSizes[31];
+ int32_t SampleAddresses[32];
+ int32_t Where = PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read sample data address */
Nbr_Sample &= 0x3F;
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
SmpSizes[i][0] = in_data[Where];
SmpSizes[i][1] = in_data[Where+1];
j = (SmpSizes[i][0]*256)+SmpSizes[i][1];
+/*printf ("sample [%2ld] ",i);*/
if ( j > 0xFF00 )
{
SampleSizes[i] = SampleSizes[0xFFFF-j];
SampleSizes[i] = j*2;
WholeSampleSize += SampleSizes[i];
}
+/*printf ("%ld\n",SampleAddresses[i+1]);*/
j = SampleSizes[i]/2;
fwrite ( &SmpSizes[i][0] , 1 , 1 , out );
fwrite ( &SmpSizes[i][1] , 1 , 1 , out );
/* use of htonl() suggested by Xigh !.*/
z = htonl (l);
- c1 = *((Uchar *)&z+2);
- c2 = *((Uchar *)&z+3);
+ c1 = *((uint8_t *)&z+2);
+ c2 = *((uint8_t *)&z+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
#include "extern.h"
-short testP61A_nopack ( void )
+int16_t testP61A_nopack ( void )
{
if ( PW_i < 7 )
{
/******************/
/* packed samples */
/******************/
-short testP61A_pack ( void )
+int16_t testP61A_pack ( void )
{
if ( PW_i < 11 )
{
void Depack_P61A ( void )
{
- Uchar c1,c2,c3,c4,c5,c6;
- long Max;
- Uchar *Whatever;
+ uint8_t c1,c2,c3,c4,c5,c6;
+ int32_t Max;
+ uint8_t *Whatever;
signed char *SmpDataWork;
- Uchar PatPos = 0x00;
- Uchar PatMax = 0x00;
- Uchar Nbr_Sample = 0x00;
- Uchar poss[37][2];
- Uchar Track_Data[512][256];
- Uchar SmpSizes[31][2];
- Uchar PACK[31];
-/* Uchar DELTA[31];*/
- Uchar GLOBAL_DELTA=OFF;
- Uchar GLOBAL_PACK=OFF;
- long Track_Address[128][4];
- long Track_Data_Address = 0;
- long Sample_Data_Address = 0;
- long WholeSampleSize = 0;
- long i=0,j,k,l,a,b,z,w;
- long SampleSizes[31];
- long SampleAddresses[32];
- long Unpacked_Sample_Data_Size;
- long Where=PW_Start_Address;
+ uint8_t PatPos = 0x00;
+ uint8_t PatMax = 0x00;
+ uint8_t Nbr_Sample = 0x00;
+ uint8_t poss[37][2];
+ uint8_t Track_Data[512][256];
+ uint8_t SmpSizes[31][2];
+ uint8_t PACK[31];
+/* uint8_t DELTA[31];*/
+ uint8_t GLOBAL_DELTA=OFF;
+ uint8_t GLOBAL_PACK=OFF;
+ int32_t Track_Address[128][4];
+ int32_t Track_Data_Address = 0;
+ int32_t Sample_Data_Address = 0;
+ int32_t WholeSampleSize = 0;
+ int32_t i=0,j,k,l,a,b,z,w;
+ int32_t SampleSizes[31];
+ int32_t SampleAddresses[32];
+ int32_t Unpacked_Sample_Data_Size;
+ int32_t Where=PW_Start_Address;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read sample data address */
}
/* write title */
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
/* use of htonl() suggested by Xigh !.*/
w = htonl(l);
- c1 = *((Uchar *)&w+2);
- c2 = *((Uchar *)&w+3);
+ c1 = *((uint8_t *)&w+2);
+ c2 = *((uint8_t *)&w+3);
fwrite ( &c1 , 1 , 1 , out );
fwrite ( &c2 , 1 , 1 , out );
#include "extern.h"
-short testTimeCruncher17 ( void )
+int16_t testTimeCruncher17 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 36;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 36 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 36 );
BZERO ( Amiga_EXE_Header_Block , 36 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[30] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 60;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[32] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[33] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[34] = *(Whatever+1);
#include "extern.h"
-short testTitanicsPlayer ( void )
+int16_t testTitanicsPlayer ( void )
{
if ( PW_i < 7 )
return BAD;
/*printf ("#4 : (start : %ld)\n",PW_Start_Address);*/
return BAD;
}
+ if ( (PW_j != 0) && (PW_j == PW_l))
+ {
+ /*printf ("#4.1 : (start : %ld)\n",PW_Start_Address);*/
+ return BAD;
+ }
PW_WholeSampleSize += PW_j;
}
if (PW_WholeSampleSize < 2)
/* With the help of Xigh :) .. thx */
-int _cdecl cmplong(const void * a, const void * b)
+int cmpint32_t (const void * a, const void * b)
{
- long * aa = (long *) a;
- long * bb = (long *) b;
+ int32_t * aa = (int32_t *) a;
+ int32_t * bb = (int32_t *) b;
if (*aa == *bb)
return 0;
if(*aa > *bb)
return -1;
}
+/* 20100101 : little fix in a test of the nbr of row being too big
+ * pb pointed out by Claudio of XMP team. Thanks !
+*/
void Rip_TitanicsPlayer ( void )
{
void Depack_TitanicsPlayer ( void )
{
- Uchar *Whatever;
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- long Pat_Addresses[128];
- long Pat_Addresses_ord[128];
- long Pat_Addresses_final[128];
- long Max=0l;
- Uchar poss[37][2];
- Uchar PatPos;
- long Where=PW_Start_Address;
- long SmpAddresses[15];
- long SampleSizes[15];
- unsigned long i=0,j=0,k=0,l;
+ uint8_t *Whatever;
+ uint8_t c1=0x00;
+ int32_t Pat_Addresses[128];
+ int32_t Pat_Addresses_ord[128];
+ int32_t Pat_Addresses_final[128];
+ int32_t Max=0l;
+ uint8_t poss[37][2];
+ uint8_t PatPos;
+ int32_t Where=PW_Start_Address;
+ int32_t SmpAddresses[15];
+ int32_t SampleSizes[15];
+ uint32_t i=0,j=0,k=0;
FILE *out;
if ( Save_Status == BAD )
fillPTKtable(poss);
- sprintf ( Depacked_OutName , "%ld.stk" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.stk" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc ( 2048 );
+ Whatever = (uint8_t *) malloc ( 2048 );
BZERO ( Whatever , 2048 );
fwrite ( &Whatever[0] , 20 , 1 , out );
fwrite ( &PatPos , 1 , 1 , out );
/* restart byte */
- c1 = 0x00;
+ c1 = 0x78; /* 20130420 fix submitted by Warren Willmey */
fwrite ( &c1 , 1 , 1 , out );
/* With the help of Xigh :) .. thx */
- qsort (Pat_Addresses_ord,PatPos,sizeof(long),cmplong);
+ qsort (Pat_Addresses_ord,PatPos,sizeof(int32_t ),cmpint32_t );
j=0;
for (i=0;i<PatPos;i++)
{
if ((in_data[Where]&0x7f) != 0x00)
k += (in_data[Where]&0x7f);
- if (k > 1024)
+ if (k > 64)
{
/*printf ("pat %ld too big\n",i);*/
break;
#include "globals.h"
#include "extern.h"
-short testTP1 ( void )
+int16_t testTP1 ( void )
{
PW_Start_Address = PW_i;
void Depack_TP1 ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar poss[37][2];
- Uchar *Whatever;
- Uchar Note,Smp,Fx,FxVal;
- Uchar Patternlist[128];
- Uchar PatPos;
- long Pats_Address[128];
- long i=0,j=0,k;
- long Pats_Address_read[128];
- long Start_Pat_Address;
- long Whole_Sample_Size=0;
- long Sample_Data_Address;
- long Where=PW_Start_Address;
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t poss[37][2];
+ uint8_t *Whatever;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t Patternlist[128];
+ uint8_t PatPos;
+ int32_t Pats_Address[128];
+ int32_t i=0,j=0,k;
+ int32_t Pats_Address_read[128];
+ int32_t Start_Pat_Address;
+ int32_t Whole_Sample_Size=0;
+ int32_t Sample_Data_Address;
+ int32_t Where=PW_Start_Address;
FILE *out;
fillPTKtable(poss);
BZERO ( Pats_Address , 128*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc (65536);
+ Whatever = (uint8_t *) malloc (65536);
BZERO ( Whatever , 65536 );
fwrite ( &in_data[Where+8] , 20 , 1 , out );
for ( j=0 ; j<k ; j++ )
if ( Pats_Address[i] == Pats_Address_read[j] )
{
- Patternlist[i] = (Uchar)j;
+ Patternlist[i] = (uint8_t)j;
}
/* write pattern list */
#include "extern.h"
-short testTP2 ( void )
+int16_t testTP2 ( void )
{
if ( (in_data[PW_i+4] != '_') ||
(in_data[PW_i+5] != 'T') ||
void Depack_TP2 ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar poss[37][2];
- Uchar Pats_Numbers[128];
- Uchar *Whatever;
- Uchar Note,Smp,Fx,FxVal;
- Uchar PatMax=0x00;
- Uchar PatPos;
- long Track_Address[128][4];
- long i=0,j=0,k;
- long Start_Pat_Address=999999l;
- long Whole_Sample_Size=0;
- long Max_Track_Address=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t poss[37][2];
+ uint8_t Pats_Numbers[128];
+ uint8_t *Whatever;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t PatMax=0x00;
+ uint8_t PatPos;
+ int32_t Track_Address[128][4];
+ int32_t i=0,j=0,k;
+ int32_t Start_Pat_Address=999999l;
+ int32_t Whole_Sample_Size=0;
+ int32_t Max_Track_Address=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;/*,*info;*/
fillPTKtable(poss);
BZERO ( Track_Address , 128*4*4 );
BZERO ( Pats_Numbers , 128 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/*info = fopen ( "info", "w+b");*/
Where += 2;
/*printf ( "number of sample : %ld\n" , j );*/
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
for ( i=0 ; i<j ; i++ )
{
#include "extern.h"
-short testTP3 ( void )
+int16_t testTP3 ( void )
{
PW_Start_Address = PW_i;
{
if ( in_data[PW_Start_Address+30+PW_k*8] > 0x0f )
{
-/*printf ( "#3 Start: %ld\n" , PW_Start_Address );*/
+/*printf ( "#3 Start: %ld (PW_l:%ld) (Where:%ld)\n" , PW_Start_Address,PW_l,PW_Start_Address+30+PW_k*8 );*/
return BAD;
}
}
void Depack_TP3 ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar poss[37][2];
- Uchar *Whatever;
- Uchar Note,Smp,Fx,FxVal;
- Uchar PatMax=0x00;
- long Track_Address[128][4];
- long i=0,j=0,k;
- long Start_Pat_Address=999999l;
- long Whole_Sample_Size=0;
- long Max_Track_Address=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t poss[37][2];
+ uint8_t *Whatever;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t PatMax=0x00;
+ int32_t Track_Address[128][4];
+ int32_t i=0,j=0,k;
+ int32_t Start_Pat_Address=999999l;
+ int32_t Whole_Sample_Size=0;
+ int32_t Max_Track_Address=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
BZERO ( Track_Address , 128*4*4 );
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
j /= 8;
/*printf ( "number of sample : %ld\n" , j );*/
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
for ( i=0 ; i<j ; i++ )
{
#include "extern.h"
-short testTreasure ( void )
+int16_t testTreasure ( void )
{
PW_Start_Address = PW_i;
void Depack_TP3 ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00;
- Uchar poss[37][2];
- Uchar *Whatever;
- Uchar Note,Smp,Fx,FxVal;
- Uchar PatMax=0x00;
- long Track_Address[128][4];
- long i=0,j=0,k;
- long Start_Pat_Address=999999l;
- long Whole_Sample_Size=0;
- long Max_Track_Address=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t c1=0x00,c2=0x00,c3=0x00;
+ uint8_t poss[37][2];
+ uint8_t *Whatever;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t PatMax=0x00;
+ int32_t Track_Address[128][4];
+ int32_t i=0,j=0,k;
+ int32_t Start_Pat_Address=999999l;
+ int32_t Whole_Sample_Size=0;
+ int32_t Max_Track_Address=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
j /= 8;
/*printf ( "number of sample : %ld\n" , j );*/
- Whatever = (Uchar *) malloc ( 1024 );
+ Whatever = (uint8_t *) malloc ( 1024 );
BZERO ( Whatever , 1024 );
for ( i=0 ; i<j ; i++ )
{
#include "extern.h"
-short testTryIt101 ( void )
+int16_t testTryIt101 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- Uchar * Amiga_EXE_Header_Block;
- Uchar * Whatever;
+ uint8_t * Amiga_EXE_Header_Block;
+ uint8_t * Whatever;
OutputSize = PW_l;
{
PW_Start_Address -= 32;
OutputSize -= 32;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 32 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 32 );
BZERO ( Amiga_EXE_Header_Block , 32 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[26] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
PW_j = PW_l - 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[20] = Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[21] = Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[22] = Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "globals.h"
#include "extern.h"
-short testTurboSqueezer61 ( void )
+int16_t testTurboSqueezer61 ( void )
{
PW_Start_Address = PW_i;
{
/* PW_l is still the whole size */
- /*Uchar * Amiga_EXE_Header_Block;*/
- /*Uchar * Whatever;*/
+ /*uint8_t * Amiga_EXE_Header_Block;*/
+ /*uint8_t * Whatever;*/
OutputSize = PW_l;
if ( Amiga_EXE_Header == BAD )
{
OutputSize -= 40;
- Amiga_EXE_Header_Block = (Uchar *) malloc ( 40 );
+ Amiga_EXE_Header_Block = (uint8_t *) malloc ( 40 );
BZERO ( Amiga_EXE_Header_Block , 40 );
Amiga_EXE_Header_Block[2] = Amiga_EXE_Header_Block[11] = Amiga_EXE_Header_Block[34] = 0x03;
Amiga_EXE_Header_Block[3] = 0xF3;
/* 68k machines code : c2 = *(Whatever+3); */
/* PW_j = PW_l - 568;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[24] = *(Whatever+3);
Amiga_EXE_Header_Block[25] = *(Whatever+2);
Amiga_EXE_Header_Block[26] = *(Whatever+1);
in_data[PW_Start_Address+483]) + 36;
PW_j /= 4;
- Whatever = (Uchar *) &PW_j;
+ Whatever = (uint8_t *) &PW_j;
Amiga_EXE_Header_Block[28] = *(Whatever+3);
Amiga_EXE_Header_Block[29] = *(Whatever+2);
Amiga_EXE_Header_Block[30] = *(Whatever+1);
#include "extern.h"
-short testUNIC_withID ( void )
+int16_t testUNIC_withID ( void )
{
/* test 1 */
if ( PW_i < 1080 )
}
-short testUNIC_withemptyID ( void )
+int16_t testUNIC_withemptyID ( void )
{
/* test 1 */
if ( (PW_i < 45) || ((PW_i-45+1084)>=PW_in_size) )
-short testUNIC_noID ( void )
+int16_t testUNIC_noID ( void )
{
/* test 1 */
if ( (PW_i < 45) || ((PW_i-45+1083)>=PW_in_size) )
void Depack_UNIC ( void )
{
- Uchar c1=0x00,c2=0x00,c3=0x00,c4=0x00;
- Uchar NumberOfPattern=0x00;
- Uchar poss[37][2];
- Uchar Max=0x00;
- Uchar Smp,Note,Fx,FxVal;
- Uchar fine=0x00;
- Uchar Pattern[1025];
- Uchar LOOP_START_STATUS=OFF; /* standard /2 */
- long i=0,j=0,k=0,l=0;
- long WholeSampleSize=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t c1=0x00,c2=0x00,c3=0x00,c4=0x00;
+ uint8_t NumberOfPattern=0x00;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ uint8_t Smp,Note,Fx,FxVal;
+ uint8_t fine=0x00;
+ uint8_t Pattern[1025];
+ uint8_t LOOP_START_STATUS=OFF; /* standard /2 */
+ uint32_t i=0,j=0,k=0,l=0;
+ uint32_t WholeSampleSize=0;
+ uint32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
fwrite ( &c1 , 1 , 1 , out );
Where += 20;
- /* fine on ? */
+ /* fine */
c1 = in_data[Where++];
c2 = in_data[Where++];
j = (c1*256)+c2;
if ( j != 0 )
{
if ( j < 256 )
- fine = 0x10-c2;
+ fine = 0x10-(c2%7);
else
- fine = 0x100-c2;
+ {
+ /* fine = 0x100-(c2%7);*/
+ /* 20130827 - fix for case that are *7 ... weird */
+ j = 0x10000 - j;
+ if (j > 8)
+ fine = j / 7;
+ else
+ fine = j;
+ }
}
else
fine = 0x00;
+
/* smp size */
c1 = in_data[Where++];
#include "extern.h"
-short testUNIC2 ( void )
+int16_t testUNIC2 ( void )
{
/* test 1 */
if ( (PW_i < 25) || ((PW_i+1828)>=PW_in_size) ) /* 1828=Head+1 pat */
void Depack_UNIC2 ( void )
{
- Uchar poss[37][2];
- Uchar Smp,Note,Fx,FxVal;
- Uchar *Whatever;
-/* Uchar LOOP_START_STATUS=OFF;*/ /* standard /2 */
- long i=0,j=0,k=0,l=0;
- long WholeSampleSize=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t poss[37][2];
+ uint8_t Smp,Note,Fx,FxVal;
+ uint8_t *Whatever;
+/* uint8_t LOOP_START_STATUS=OFF;*/ /* standard /2 */
+ int32_t i=0,j=0,k=0,l=0;
+ int32_t WholeSampleSize=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc (1028);
+ Whatever = (uint8_t *) malloc (1028);
BZERO ( Whatever , 1028 );
fwrite ( Whatever , 20 , 1 , out );
-/* Viruz2 - made by kb_ Farbrausch */
-/* 06-05-2007 - test version by Muerto - mostly asle :D*/
-/* 08-05-2007 - Saved the first V2m mod!! - BUT phoemes not incluted.. yet!*/
-/* testV2 */
-
-/* This is an ongoing dev version made by Muerto - not part of PW4PC package */
-
-#include "globals.h"
-#include "extern.h"
-
-/* void testViruz2_60 (void)*/
-short testViruz2_60 ()
-{
- PW_Start_Address = PW_i; /* bypass the 20 bytes already tested */
-
- for (PW_j = PW_Start_Address+20; PW_j<(PW_in_size-12); PW_j++)
- {
- /* PW_in_size if the size of the input file */
-
- if ((in_data[PW_j+1] == 0x00) &&
- (in_data[PW_j+2] == 0x00) &&
- (in_data[PW_j+3] == 0x00) &&
- ((in_data[PW_j+4] == 0x01) || (in_data[PW_j+4] == 0x1F)) &&
- (in_data[PW_j+5] == 0x00) &&
- (in_data[PW_j+6] == 0x00) &&
- (in_data[PW_j+7] == 0x00) &&
- ((in_data[PW_j+8] == 0x08) || (in_data[PW_j+8] == 0x26)) &&
- (in_data[PW_j+9] == 0x00) &&
- (in_data[PW_j+10] == 0x00) &&
- (in_data[PW_j+11] == 0x00) )
- {
- /* printf ( "\n found end tag for 6000 at %ld (%lx)\n",PW_j, PW_j ); */
- /*OutputSize is the global PW var to store the output size, used by Save_Rip*/
- OutputSize = (PW_j+12)-PW_Start_Address;
- CONVERT = BAD; /* tells PW not to consider converting to PTK */
- Save_Rip ( "Viruz 2", Viruz2 );
- if ( Save_Status == GOOD )
- PW_i += 1; /* to bypass the case test */
- }
- }
- return GOOD;
-}
-
-short testViruz2_80 ()
-{
- Uchar MYTEST = BAD;
- PW_Start_Address = PW_i; /* bypass the 20 bytes already tested */
-
- /* test 1 */
- for (PW_j = PW_Start_Address+20; PW_j<(PW_in_size-12); PW_j++)
- {
- /* PW_in_size if the size of the input file */
- /* Test before @@@ */
- if ((in_data[PW_j] == 0x16) &&
- (in_data[PW_j+1] == 0x00) &&
- (in_data[PW_j+2] == 0x00) &&
- (in_data[PW_j+3] == 0x00) &&
- ((in_data[PW_j+8] == 0x64) || (in_data[PW_j+8] == 0x6B) || (in_data[PW_j+8] == 0x6E) || (in_data[PW_j+8] == 0x7F) || (in_data[PW_j+8] == 0x5B) || (in_data[PW_j+8] == 0x60) || (in_data[PW_j+8] == 0x19) || (in_data[PW_j+8] == 0x66) || (in_data[PW_j+8] == 0x58) || (in_data[PW_j+8] == 0x0E) || (in_data[PW_j+8] == 0x5A) ) &&
- ((in_data[PW_j+17] == 0x00) || (in_data[PW_j+17] == 0x01) || (in_data[PW_j+17] == 0x02) || (in_data[PW_j+17] == 0x1F)) &&
- ((in_data[PW_j+18] == 0x00) || (in_data[PW_j+18] == 0x01) || (in_data[PW_j+18] == 0x33)) &&
- ((in_data[PW_j+19] == 0x00) || (in_data[PW_j+19] == 0x01) || (in_data[PW_j+19] == 0x02) || (in_data[PW_j+19] == 0x36)))
-
- {
- MYTEST = GOOD;
- printf ("first row of test OK (where : %ld)\n",PW_j);
- break;
- }
- }
- if (MYTEST == GOOD)
- { /* test 1 OK - proceed to test 2, then save if successful */
- while (PW_j<(PW_in_size-12))
- {
- /* test after @@@ */
- if ((in_data[PW_j] == 0xF8) &&
- (in_data[PW_j+1] == 0x02) &&
- (in_data[PW_j+2] == 0x00) &&
- (in_data[PW_j+3] == 0x00) &&
- (in_data[PW_j+4] == 0x86) &&
- (in_data[PW_j+5] == 0x03) &&
- (in_data[PW_j+6] == 0x00) &&
- (in_data[PW_j+7] == 0x00) &&
- (in_data[PW_j+8] == 0xA1) &&
- (in_data[PW_j+9] == 0x04) &&
- (in_data[PW_j+10] == 0x00) &&
- (in_data[PW_j+11] == 0x00))
-
- {
- /* printf ( "\n found end tag for 8000 at %ld (%lx)\n",PW_j, PW_j ); */
- /*OutputSize is the global PW var to store the output size, used by Save_Rip*/
- OutputSize = (PW_j+12)-PW_Start_Address;
- CONVERT = BAD; /* tells PW not to consider converting to PTK */
- Save_Rip ( "Viruz 2", Viruz2 );
- if ( Save_Status == GOOD )
- PW_i += 1; /* to bypass the case test */
- }
- PW_j++;
- }
- }
- return GOOD;
-}
-
-short testViruz2_E0 ()
-{
- PW_Start_Address = PW_i; /* bypass the 20 bytes already tested */
-
- for (PW_j = PW_Start_Address+20; PW_j<(PW_in_size-12); PW_j++)
- {
- /* PW_in_size if the size of the input file */
-
- if ((in_data[PW_j] == 0x94) &&
- ((in_data[PW_j+1] == 0x00) || (in_data[PW_j+1] == 0x01)) &&
- (in_data[PW_j+2] == 0x00) &&
- (in_data[PW_j+3] == 0x00) &&
- ((in_data[PW_j+4] == 0x01) || (in_data[PW_j+4] == 0x78) || (in_data[PW_j+4] == 0x81) || (in_data[PW_j+4] == 0xDD)) &&
- ((in_data[PW_j+5] == 0x00) || (in_data[PW_j+5] == 0x01)) &&
- (in_data[PW_j+6] == 0x00) &&
- (in_data[PW_j+7] == 0x00) &&
- ((in_data[PW_j+8] == 0x08) || (in_data[PW_j+8] == 0xC2) || (in_data[PW_j+8] == 0x27) || (in_data[PW_j+8] == 0xC8) || (in_data[PW_j+8] == 0x01) ) &&
- ((in_data[PW_j+9] == 0x00) || (in_data[PW_j+9] == 0x01)) &&
- (in_data[PW_j+10] == 0x00) &&
- (in_data[PW_j+11] == 0x00) )
- {
- /* printf ( "\n found end tag for E001 at %ld (%lx)\n",PW_j, PW_j ); */
- /*OutputSize is the global PW var to store the output size, used by Save_Rip*/
- OutputSize = (PW_j+12)-PW_Start_Address;
- CONVERT = BAD; /* tells PW not to consider converting to PTK */
- Save_Rip ( "Viruz 2", Viruz2 );
- if ( Save_Status == GOOD )
- PW_i += 1; /* to bypass the case test */
- }
- }
- return GOOD;
-}
-
-/* end of func */
-
+/* Viruz2 - made by kb_ Farbrausch */\r
+/* 06-05-2007 - test version by Muerto - mostly asle :D*/\r
+/* 08-05-2007 - Saved the first V2m mod!! - BUT phoemes not incluted.. yet!*/\r
+/* testV2 */\r
+\r
+/* This is an ongoing dev version made by Muerto - not part of PW4PC package */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+/* void testViruz2_60 (void)*/\r
+int16_t testViruz2_60 ()\r
+{\r
+ PW_Start_Address = PW_i; /* bypass the 20 bytes already tested */\r
+\r
+ for (PW_j = PW_Start_Address+20; PW_j<(PW_in_size-12); PW_j++)\r
+ {\r
+ /* PW_in_size if the size of the input file */\r
+ \r
+ if ((in_data[PW_j+1] == 0x00) &&\r
+ (in_data[PW_j+2] == 0x00) &&\r
+ (in_data[PW_j+3] == 0x00) &&\r
+ ((in_data[PW_j+4] == 0x01) || (in_data[PW_j+4] == 0x1F)) &&\r
+ (in_data[PW_j+5] == 0x00) &&\r
+ (in_data[PW_j+6] == 0x00) &&\r
+ (in_data[PW_j+7] == 0x00) &&\r
+ ((in_data[PW_j+8] == 0x08) || (in_data[PW_j+8] == 0x26)) &&\r
+ (in_data[PW_j+9] == 0x00) &&\r
+ (in_data[PW_j+10] == 0x00) &&\r
+ (in_data[PW_j+11] == 0x00) )\r
+ {\r
+ /* printf ( "\n found end tag for 6000 at %ld (%lx)\n",PW_j, PW_j ); */\r
+ /*OutputSize is the global PW var to store the output size, used by Save_Rip*/ \r
+ OutputSize = (PW_j+12)-PW_Start_Address;\r
+ CONVERT = BAD; /* tells PW not to consider converting to PTK */\r
+ Save_Rip ( "Viruz 2", Viruz2 );\r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1; /* to bypass the case test */\r
+ }\r
+ }\r
+ return GOOD;\r
+}\r
+\r
+int16_t testViruz2_80 ()\r
+{\r
+ uint8_t MYTEST = BAD;\r
+ PW_Start_Address = PW_i; /* bypass the 20 bytes already tested */\r
+\r
+ /* test 1 */\r
+ for (PW_j = PW_Start_Address+20; PW_j<(PW_in_size-12); PW_j++)\r
+ {\r
+ /* PW_in_size if the size of the input file */\r
+ /* Test before @@@ */ \r
+ if ((in_data[PW_j] == 0x16) &&\r
+ (in_data[PW_j+1] == 0x00) &&\r
+ (in_data[PW_j+2] == 0x00) &&\r
+ (in_data[PW_j+3] == 0x00) &&\r
+ ((in_data[PW_j+8] == 0x64) || (in_data[PW_j+8] == 0x6B) || (in_data[PW_j+8] == 0x6E) || (in_data[PW_j+8] == 0x7F) || (in_data[PW_j+8] == 0x5B) || (in_data[PW_j+8] == 0x60) || (in_data[PW_j+8] == 0x19) || (in_data[PW_j+8] == 0x66) || (in_data[PW_j+8] == 0x58) || (in_data[PW_j+8] == 0x0E) || (in_data[PW_j+8] == 0x5A) ) &&\r
+ ((in_data[PW_j+17] == 0x00) || (in_data[PW_j+17] == 0x01) || (in_data[PW_j+17] == 0x02) || (in_data[PW_j+17] == 0x1F)) &&\r
+ ((in_data[PW_j+18] == 0x00) || (in_data[PW_j+18] == 0x01) || (in_data[PW_j+18] == 0x33)) &&\r
+ ((in_data[PW_j+19] == 0x00) || (in_data[PW_j+19] == 0x01) || (in_data[PW_j+19] == 0x02) || (in_data[PW_j+19] == 0x36)))\r
+\r
+ {\r
+ MYTEST = GOOD;\r
+ printf ("first row of test OK (where : %ld)\n",PW_j);\r
+ break;\r
+ }\r
+ }\r
+ if (MYTEST == GOOD)\r
+ { /* test 1 OK - proceed to test 2, then save if successful */\r
+ while (PW_j<(PW_in_size-12))\r
+ {\r
+ /* test after @@@ */\r
+ if ((in_data[PW_j] == 0xF8) &&\r
+ (in_data[PW_j+1] == 0x02) &&\r
+ (in_data[PW_j+2] == 0x00) &&\r
+ (in_data[PW_j+3] == 0x00) &&\r
+ (in_data[PW_j+4] == 0x86) &&\r
+ (in_data[PW_j+5] == 0x03) &&\r
+ (in_data[PW_j+6] == 0x00) &&\r
+ (in_data[PW_j+7] == 0x00) &&\r
+ (in_data[PW_j+8] == 0xA1) &&\r
+ (in_data[PW_j+9] == 0x04) &&\r
+ (in_data[PW_j+10] == 0x00) &&\r
+ (in_data[PW_j+11] == 0x00)) \r
+ \r
+ {\r
+ /* printf ( "\n found end tag for 8000 at %ld (%lx)\n",PW_j, PW_j ); */\r
+ /*OutputSize is the global PW var to store the output size, used by Save_Rip*/ \r
+ OutputSize = (PW_j+12)-PW_Start_Address;\r
+ CONVERT = BAD; /* tells PW not to consider converting to PTK */\r
+ Save_Rip ( "Viruz 2", Viruz2 );\r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1; /* to bypass the case test */\r
+ }\r
+ PW_j++;\r
+ }\r
+ }\r
+ return GOOD;\r
+}\r
+\r
+int16_t testViruz2_E0 ()\r
+{\r
+ PW_Start_Address = PW_i; /* bypass the 20 bytes already tested */\r
+\r
+ for (PW_j = PW_Start_Address+20; PW_j<(PW_in_size-12); PW_j++)\r
+ {\r
+ /* PW_in_size if the size of the input file */\r
+ \r
+ if ((in_data[PW_j] == 0x94) &&\r
+ ((in_data[PW_j+1] == 0x00) || (in_data[PW_j+1] == 0x01)) &&\r
+ (in_data[PW_j+2] == 0x00) &&\r
+ (in_data[PW_j+3] == 0x00) &&\r
+ ((in_data[PW_j+4] == 0x01) || (in_data[PW_j+4] == 0x78) || (in_data[PW_j+4] == 0x81) || (in_data[PW_j+4] == 0xDD)) && \r
+ ((in_data[PW_j+5] == 0x00) || (in_data[PW_j+5] == 0x01)) && \r
+ (in_data[PW_j+6] == 0x00) &&\r
+ (in_data[PW_j+7] == 0x00) &&\r
+ ((in_data[PW_j+8] == 0x08) || (in_data[PW_j+8] == 0xC2) || (in_data[PW_j+8] == 0x27) || (in_data[PW_j+8] == 0xC8) || (in_data[PW_j+8] == 0x01) ) && \r
+ ((in_data[PW_j+9] == 0x00) || (in_data[PW_j+9] == 0x01)) && \r
+ (in_data[PW_j+10] == 0x00) &&\r
+ (in_data[PW_j+11] == 0x00) )\r
+ {\r
+ /* printf ( "\n found end tag for E001 at %ld (%lx)\n",PW_j, PW_j ); */\r
+ /*OutputSize is the global PW var to store the output size, used by Save_Rip*/ \r
+ OutputSize = (PW_j+12)-PW_Start_Address;\r
+ CONVERT = BAD; /* tells PW not to consider converting to PTK */\r
+ Save_Rip ( "Viruz 2", Viruz2 );\r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1; /* to bypass the case test */\r
+ }\r
+ }\r
+ return GOOD;\r
+}\r
+\r
+/* end of func */\r
+\r
#include "extern.h"
-short testWN ( void )
+int16_t testWN ( void )
{
/* test 1 */
if ( PW_i < 1080 )
void Depack_WN ( void )
{
- Uchar poss[37][2];
- Uchar *Whatever;
- long WholeSampleSize=0;
- long i=0,j=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t poss[37][2];
+ uint8_t *Whatever;
+ int32_t WholeSampleSize=0;
+ int32_t i=0,j=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read header */
Where += 129;
/* write ptk's ID */
- Whatever = (Uchar *) malloc (5);
+ Whatever = (uint8_t *) malloc (5);
Whatever[0] = 'M';
Whatever[1] = '.';
Whatever[2] = 'K';
#include "extern.h"
-short testXANN ( void )
+int16_t testXANN ( void )
{
/* test 1 */
if ( PW_i < 3 )
void Depack_XANN ( void )
{
- Uchar c1=0x00,c2=0x00;
- Uchar poss[37][2];
- Uchar Max=0x00;
- Uchar Note,Smp,Fx,FxVal;
- Uchar *Whatever;
- long i=0,j=0,l=0,z;
- long WholeSampleSize=0;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t c1=0x00,c2=0x00;
+ uint8_t poss[37][2];
+ uint8_t Max=0x00;
+ uint8_t Note,Smp,Fx,FxVal;
+ uint8_t *Whatever;
+ int32_t i=0,j=0,l=0,z;
+ int32_t WholeSampleSize=0;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
if ( Save_Status == BAD )
return;
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
/* use of htonl() suggested by Xigh !.*/
j/=2;
z = htonl(j);
- Whatever[0] = *((Uchar *)&z+2);
- Whatever[1] = *((Uchar *)&z+3);
+ Whatever[0] = *((uint8_t *)&z+2);
+ Whatever[1] = *((uint8_t *)&z+3);
fwrite ( Whatever , 2 , 1 , out );
/* write loop size */
#include "extern.h"
-short testZEN ( void )
+int16_t testZEN ( void )
{
/* test #1 */
if ( PW_i<9 )
void Depack_ZEN ( void )
{
- Uchar PatPos;
- Uchar *Whatever;
- Uchar PatMax;
- Uchar poss[37][2];
- Uchar Note,Smp,Fx,FxVal;
- long WholeSampleSize=0;
- long Pattern_Address[128];
- long Pattern_Address_Real[128];
- long Pattern_Table_Address;
- long Sample_Data_Address=999999l;
- long i,j,k,z;
- long Where=PW_Start_Address; /* main pointer to prevent fread() */
+ uint8_t PatPos;
+ uint8_t *Whatever;
+ uint8_t PatMax;
+ uint8_t poss[37][2];
+ uint8_t Note,Smp,Fx,FxVal;
+ int32_t WholeSampleSize=0;
+ int32_t Pattern_Address[128];
+ int32_t Pattern_Address_Real[128];
+ int32_t Pattern_Table_Address;
+ int32_t Sample_Data_Address=999999l;
+ int32_t i,j,k,z;
+ int32_t Where=PW_Start_Address; /* main pointer to prevent fread() */
FILE *out;
fillPTKtable(poss);
BZERO ( Pattern_Address , 128*4);
BZERO ( Pattern_Address_Real , 128*4);
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );
out = PW_fopen ( Depacked_OutName , "w+b" );
/* read pattern table address */
/*printf ( "Size of pattern list : %d\n" , PatPos );*/
/* write title */
- Whatever = (Uchar *) malloc (1024);
+ Whatever = (uint8_t *) malloc (1024);
BZERO ( Whatever , 1024 );
fwrite ( Whatever , 20 , 1 , out );
/* write loop start */
/* use of htonl() suggested by Xigh !.*/
z = htonl(j);
- Whatever[48] = *((Uchar *)&z+2);
- Whatever[49] = *((Uchar *)&z+3);
+ Whatever[48] = *((uint8_t *)&z+2);
+ Whatever[49] = *((uint8_t *)&z+3);
fwrite ( &Whatever[48] , 2 , 1 , out );
/* write loop size */
--- /dev/null
+/* testBNR() */\r
+/* Rip_BNR() */\r
+/* Depack_BNR() */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+short testBNR ( void )\r
+{\r
+ /* test 1 */\r
+ if ( PW_i < 1080 )\r
+ {\r
+ /*printf ( "#1 (PW_i:%ld)\n" , PW_i );*/\r
+ return BAD;\r
+ }\r
+\r
+ /* test 2 */\r
+ PW_Start_Address = PW_i-1080;\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_k=0 ; PW_k<31 ; PW_k++ )\r
+ {\r
+ /* size */\r
+ PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);\r
+ /* loop size */\r
+ PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2);\r
+ /* loop start */\r
+ PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);\r
+\r
+ if ( test_smps(PW_j*2, PW_n, PW_m, in_data[PW_Start_Address+45+30*PW_k], in_data[PW_Start_Address+44+30*PW_k] ) == BAD )\r
+ {\r
+ /*printf ( "start : %ld\n", PW_Start_Address );*/\r
+ return BAD; \r
+ }\r
+\r
+ PW_WholeSampleSize += PW_j;\r
+ }\r
+\r
+ /* test #4 pattern list size */\r
+ PW_l = in_data[PW_Start_Address+950];\r
+ if ( (PW_l>127) || (PW_l==0) )\r
+ {\r
+ /*printf ( "#4,0 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ /* PW_l holds the size of the pattern list */\r
+ PW_k=0;\r
+ for ( PW_j=0 ; PW_j<128 ; PW_j++ )\r
+ {\r
+ if ( in_data[PW_Start_Address+952+PW_j] > PW_k )\r
+ PW_k = in_data[PW_Start_Address+952+PW_j];\r
+ if ( in_data[PW_Start_Address+952+PW_j] > 127 )\r
+ {\r
+ /*printf ( "#4,1 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ }\r
+ /* PW_k holds the highest pattern number */\r
+ /* test last patterns of the pattern list = 0 ? */\r
+ PW_j += 2; /* found some obscure ptk :( */\r
+ while ( PW_j < 128 )\r
+ {\r
+ if ( in_data[PW_Start_Address+952+PW_j] > 0x7f )\r
+ {\r
+ /*printf ( "#4,2 (Start:%ld) (PW_j:%ld) (at:%ld)\n" , PW_Start_Address,PW_j ,PW_Start_Address+952+PW_j );*/\r
+ return BAD;\r
+ }\r
+ PW_j += 1;\r
+ }\r
+ /* PW_k is the number of pattern in the file (-1) */\r
+ PW_k += 1;\r
+\r
+\r
+ /* test #5 pattern data ... */\r
+ if ( ((PW_k*1024)+1084+PW_Start_Address) > PW_in_size )\r
+ {\r
+ /*printf ( "#5,0 (Start:%ld)(1patsize:%ld)\n" , PW_Start_Address, 1024);*/\r
+ return BAD;\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+/* Rip_AC1D */\r
+void Rip_BNR ( void )\r
+{\r
+ /* PW_WholeSampleSize still hold the whole sample size */\r
+ /* PW_k is still the number of pattern stored */\r
+\r
+ OutputSize = PW_WholeSampleSize + (PW_k*1024) + 1084;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "Binary Packer module", BNR );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
+\r
+\r
+/*\r
+ * bnr.c 1999 (c) Asle / ReDoX\r
+ * 20071223 - added into PW at Muerto's request\r
+*/\r
+void Depack_BNR ( void )\r
+{\r
+ uint8_t c1,c2;\r
+ uint8_t *Whatever;\r
+ uint8_t Nbr_Pat=0;\r
+ uint8_t poss[37][2];\r
+ int32_t WholeSampleSize=0;\r
+ int32_t i,j;\r
+ int32_t Where = PW_Start_Address;\r
+ FILE *out;\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ fillPTKtable(poss);\r
+\r
+ /*printf ("\nWhere:%ld\n", Where);*/\r
+\r
+ /* read header */\r
+ Whatever = (uint8_t *) malloc (1084);\r
+ BZERO ( Whatever , 1084 );\r
+ for ( i=0 ; i<1084 ; i++ )\r
+ {\r
+ Whatever[i] = in_data[i+Where];\r
+ }\r
+\r
+ /* reorder loops and sample size */\r
+ for (i=0 ; i<31 ; i++)\r
+ {\r
+ c1 = Whatever[i*30+20+26];\r
+ c2 = Whatever[i*30+20+27];\r
+ Whatever[i*30+20+26] = Whatever[i*30+20+28];\r
+ Whatever[i*30+20+27] = Whatever[i*30+20+29];\r
+ Whatever[i*30+20+28] = c1;\r
+ Whatever[i*30+20+29] = c2;\r
+ WholeSampleSize += (((Whatever[i*30+20+22]*256)+Whatever[i*30+20+23])*2);\r
+ }\r
+ \r
+ /* M.K. ... */\r
+ Whatever[1080] = 'M';\r
+ Whatever[1081] = '.';\r
+ Whatever[1082] = 'K';\r
+ Whatever[1083] = '.';\r
+ \r
+ /* write header */\r
+ fwrite (Whatever,1084,1,out);\r
+ Where += 1084;\r
+\r
+ /* get number of patterns */\r
+ for (i=952; i<1080 ; i++)\r
+ {\r
+ if (Whatever[i] > Nbr_Pat)\r
+ Nbr_Pat = Whatever[i];\r
+ }\r
+ Nbr_Pat += 1;\r
+\r
+ /* pattern data */\r
+ for ( i=0 ; i<Nbr_Pat ; i++ )\r
+ {\r
+ BZERO (Whatever,1084);\r
+ for ( j=0 ; j<256 ; j++ )\r
+ {\r
+ /* Fx Arg */\r
+ Whatever[j*4+3] = in_data[Where+i*1024+j*4+2];\r
+ /* Fx */\r
+ Whatever[j*4+2] = (in_data[Where+i*1024+j*4]>>2)&0x0f;\r
+ /* Smp Number */\r
+ Whatever[j*4+2] |= (in_data[Where+i*1024+j*4+3]<<1)&0xf0;\r
+ Whatever[j*4] = (in_data[Where+i*1024+j*4+3]>>3)&0xf0;\r
+\r
+ /* test flag #2 */\r
+ if ( (in_data[Where+i*1024+j*4] & 0x40) == 0x40 )\r
+ continue;\r
+ /* test flag #1 */\r
+ if ( (in_data[Where+i*1024+j*4] & 0x80) == 0x80 )\r
+ {\r
+/* printf ( "!!! at : %ld, Fx '%x' was converted to 0x0F\n"\r
+ , var+i*1024+j*4\r
+ , WholeFile[var+i*1024+j*4] );*/\r
+ Whatever[j*4+2] |= 0x0f; /* forcing set BPM */\r
+ }\r
+\r
+ /* notes ... */\r
+ Whatever[j*4] |= poss[37-(in_data[Where+i*1024+j*4+1]>>1)][0]&0x0f;\r
+ Whatever[j*4+1] = poss[37-(in_data[Where+i*1024+j*4+1]>>1)][1];\r
+\r
+ }\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ }\r
+\r
+ free ( Whatever );\r
+\r
+ /* sample data */\r
+ Where += (Nbr_Pat*1024);\r
+ /*for (i = Where; i<WholeSampleSize+Where ; i++)in_data[i]-=0x80;*/\r
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );\r
+\r
+ /* no crap() as it overwrites sample text */\r
+ /*Crap ( " Binary Packer " , BAD , BAD , out );*/\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
#include "extern.h"
-short testArcDDataCruncher ( void )
+int16_t testArcDDataCruncher ( void )
{
PW_Start_Address = PW_i;
if ( (PW_Start_Address + 12) > PW_in_size )
}
-short testCRND ( void )
+/* reminder : PW_l must get the packed size */
+int16_t testCRND ( void )
{
PW_Start_Address = PW_i;
return GOOD;
}
+
+/* reminder : PW_l must get the packed size */
+int16_t testB9AB ( void )
+{
+ if (PW_i<13)
+ return BAD;
+ PW_Start_Address = PW_i-13;
+
+ /* packed size */
+ PW_l = ( (in_data[PW_Start_Address]*256*256*256) +
+ (in_data[PW_Start_Address+1]*256*256) +
+ (in_data[PW_Start_Address+2]*256) +
+ in_data[PW_Start_Address+3] );
+ /* unpacked size */
+ PW_m = ( (in_data[PW_Start_Address+8]*256*256*256) +
+ (in_data[PW_Start_Address+9]*256*256) +
+ (in_data[PW_Start_Address+10]*256) +
+ in_data[PW_Start_Address+11] );
+
+ if ( (PW_l + PW_i) > PW_in_size )
+ return BAD;
+ if ( PW_l > 0x989689 )
+ return BAD;
+ if ( PW_m > 0x989689 )
+ return BAD;
+ if ( (PW_l + PW_i) > PW_in_size )
+ return BAD;
+
+ return GOOD;
+}
--- /dev/null
+/* testMOSH() */\r
+/* Rip_MOSH() */\r
+/* Depack_MOSH() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testMOSH ( void )\r
+{\r
+ /* test 1 */\r
+ if ( PW_i < 378 )\r
+ {\r
+ return BAD;\r
+ }\r
+\r
+ PW_Start_Address = PW_i-378;\r
+\r
+ /* samples */\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_k=0 ; PW_k<31 ; PW_k++ )\r
+ {\r
+ /* size */\r
+ PW_j = (((in_data[PW_Start_Address+6+PW_k*8]*256)+in_data[PW_Start_Address+7+PW_k*8])*2);\r
+ /* loop start */\r
+ PW_m = (((in_data[PW_Start_Address+2+PW_k*8]*256)+in_data[PW_Start_Address+3+PW_k*8])*2);\r
+ /* loop size */\r
+ PW_n = (((in_data[PW_Start_Address+PW_k*8]*256)+in_data[PW_Start_Address+1+PW_k*8])*2);\r
+\r
+ if ( test_smps(PW_j*2, PW_m, PW_n, in_data[PW_Start_Address+5+8*PW_k], in_data[PW_Start_Address+4+8*PW_k] ) == BAD )\r
+ {\r
+ /*printf ( "start : %ld\n", PW_Start_Address );*/\r
+ return BAD; \r
+ }\r
+\r
+ PW_WholeSampleSize += PW_j;\r
+ }\r
+\r
+ /* test #4 pattern list size */\r
+ PW_l = in_data[PW_Start_Address+248];\r
+ if ( (PW_l>127) || (PW_l==0) )\r
+ {\r
+ /*printf ( "#4,0 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ /* PW_l holds the size of the pattern list */\r
+ PW_k=0;\r
+ for ( PW_j=0 ; PW_j<128 ; PW_j++ )\r
+ {\r
+ if ( in_data[PW_Start_Address+250+PW_j] > PW_k )\r
+ PW_k = in_data[PW_Start_Address+250+PW_j];\r
+ if ( in_data[PW_Start_Address+250+PW_j] > 127 )\r
+ {\r
+ /*printf ( "#4,1 (Start:%ld)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ }\r
+ /* PW_k is the number of pattern in the file (-1) */\r
+ PW_k += 1;\r
+\r
+\r
+ /* test #5 pattern data ... */\r
+ if ( ((PW_k*1024)+382+PW_Start_Address) > PW_in_size )\r
+ {\r
+ /*printf ( "#5,0 (Start:%ld)\n" , PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+ for ( PW_j=0 ; PW_j<(PW_k*256) ; PW_j++ )\r
+ {\r
+ /* sample > 1f or pitch > 358 ? */\r
+ if ( in_data[PW_Start_Address+382+PW_j*4] > 0x13 )\r
+ {\r
+ /*printf ( "#5.1 (Start:%ld)(sample value:%x)(Where:%lx)\n" , PW_Start_Address,in_data[PW_Start_Address+382+PW_j*4],PW_Start_Address+382+PW_j*4);*/\r
+ return BAD;\r
+ }\r
+ PW_l = ((in_data[PW_Start_Address+382+PW_j*4]&0x0f)*256)+in_data[PW_Start_Address+383+PW_j*4];\r
+ if ( (PW_l>0) && (PW_l<0x1C) )\r
+ {\r
+ /*printf ( "#5,2 (Start:%ld)(PW_l:%lx)(Where:%lx)\n" , PW_Start_Address,PW_l,PW_Start_Address+382+PW_j*4 );*/\r
+ return BAD;\r
+ }\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_MOSH ( void )\r
+{\r
+ /* PW_k is still the number of patterns */\r
+ \r
+ OutputSize = (PW_k*1024) + 382 + PW_WholeSampleSize;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "MOSH packed module", MOSH );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 379; /* after the 'M' of M.K. */\r
+}\r
+\r
+\r
+\r
+/*\r
+ * MOSH.c 2007 (c) Asle\r
+ *\r
+*/\r
+void Depack_MOSH ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ uint8_t Max=0x00;\r
+ int32_t WholeSampleSize=0;\r
+ int32_t i=0;\r
+ int32_t Where=PW_Start_Address;\r
+ FILE *out;\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ Whatever = (uint8_t *) malloc (1024);\r
+ BZERO (Whatever , 1024);\r
+ /* title */\r
+ fwrite ( Whatever , 20 , 1 , out );\r
+\r
+ for ( i=0 ; i<31 ; i++ )\r
+ {\r
+ /* loop size */\r
+ Whatever[i*30+28] = in_data[Where];\r
+ Whatever[i*30+29] = in_data[Where+1];\r
+ /* loop start */\r
+ Whatever[i*30+26] = in_data[Where+2];\r
+ Whatever[i*30+27] = in_data[Where+3];\r
+ /* fine */\r
+ Whatever[i*30+24] = in_data[Where+4];\r
+ /* volume */\r
+ Whatever[i*30+25] = in_data[Where+5];\r
+ /* size */\r
+ Whatever[i*30+22] = in_data[Where+6];\r
+ Whatever[i*30+23] = in_data[Where+7];\r
+ WholeSampleSize += (((in_data[Where+6]*256)+in_data[Where+7])*2);\r
+\r
+ Where += 8;\r
+ }\r
+ fwrite (Whatever,930,1,out);\r
+ /*printf ( "Whole sample size : %ld\n" , WholeSampleSize );*/\r
+\r
+ /* write until after M.K. */\r
+ fwrite ( &in_data[Where] , 134 , 1 , out );\r
+ Where += 2; /* to be on at the patternlist level */\r
+ \r
+ /* getting highest pattern */\r
+ Max = 0x00;\r
+ for ( i=0 ; i<128 ; i++ )\r
+ {\r
+ Max = ( in_data[Where] > Max ) ? in_data[Where] : Max;\r
+ Where += 1;\r
+ }\r
+ Max += 1;\r
+ Where += 4; /*M.K.*/\r
+ /*printf ( "\nNumber of pattern : %d\n" , Max );*/\r
+ fwrite ( &in_data[Where] , (Max*1024) , 1 , out );\r
+ Where += (Max*1024); /*patdata*/\r
+\r
+ /* pattern data */\r
+\r
+ free ( Whatever );\r
+\r
+ /* sample data */\r
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );\r
+\r
+\r
+ /* crap */\r
+ Crap ( " Mosh Player " , BAD , BAD , out );\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r
+\r
--- /dev/null
+/* testOkta() */\r
+/* Rip_Okta() */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testOkta ( void )\r
+{\r
+ /* test 1 */\r
+ PW_Start_Address = PW_i;\r
+ PW_m = PW_Start_Address;\r
+ PW_m += 12; /* after OKTASONGCMOD */\r
+\r
+ /* CMOD chunk size */\r
+ PW_j = (in_data[PW_m]*256*256*256)+\r
+ (in_data[PW_m+1]*256*256)+\r
+ (in_data[PW_m+2]*256)+\r
+ in_data[PW_m+3];\r
+ if ((PW_j > 8) || (PW_j<4)) /* never seen it being different than 8 */\r
+ {\r
+/* printf ("invalid number of voices : %l\n",PW_j);*/\r
+ return BAD;\r
+ }\r
+\r
+ PW_m += PW_j+4;\r
+ /*should now be on SAMP*/\r
+ if ((in_data[PW_m]!='S')||\r
+ (in_data[PW_m+1]!='A')||\r
+ (in_data[PW_m+2]!='M')||\r
+ (in_data[PW_m+3]!='P'))\r
+ {\r
+/* printf ("bad tag. expecting SAMP (start:%ld)\n",PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+\r
+ PW_m +=4;\r
+ /* SAMP chunk size */\r
+ PW_j = (in_data[PW_m]*256*256*256)+\r
+ (in_data[PW_m+1]*256*256)+\r
+ (in_data[PW_m+2]*256)+\r
+ in_data[PW_m+3];\r
+ if (PW_j != 0x480) /* size fixed as specified */\r
+ {\r
+/* printf ("invalid SAMP chunk size : %lx\n",PW_j);*/\r
+ return BAD;\r
+ }\r
+ PW_m +=4;\r
+\r
+ /* PW_m is the first sample now */\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_Okta ( void )\r
+{\r
+ int32_t Where=PW_m;\r
+/*printf ( "Where : %ld\n",Where);*/\r
+\r
+ /*get the number of samples */\r
+ PW_l = 0;\r
+ for (PW_k=0; PW_k<36; PW_k++)\r
+ {\r
+ PW_m = (in_data[Where+20+PW_k*32]*256*256*256)+\r
+ (in_data[Where+21+PW_k*32]*256*256)+\r
+ (in_data[Where+22+PW_k*32]*256)+\r
+ in_data[Where+23+PW_k*32];\r
+ if (PW_m != 0)\r
+ PW_l += 1; /* so PW_l holds the nbr of samples (i.e. SBOD)*/\r
+ }\r
+ /* bypass SAMP */\r
+ Where += 0x480;\r
+\r
+ /* bypass SPEE entire chunk, which total size should be 4 + 4 + 2 */\r
+ Where += +10;\r
+ \r
+ /* bypass SLEN word and its size which is always 2 */\r
+ Where += 8;\r
+ \r
+ /* get song length (i.e. number of PBOD) */\r
+ PW_m = (in_data[Where]*256)+in_data[Where+1];\r
+ Where += 2;\r
+ \r
+ /* bypass PLEN entire chunk which size is always 4 + 4 + 2 */\r
+ Where += 10;\r
+ \r
+ /* bypass PATT entire chunk which size is always 128 + 4 + 4 */\r
+ Where += 136;\r
+\r
+ /* now, lets calculate the size of patterns (PBODs) */\r
+ for (PW_k=0; PW_k<PW_m; PW_k++)\r
+ {\r
+ Where += 4; /*bypass 'PBOD'*/\r
+ PW_j = (in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ Where += 4; /* bypass the dword just read */\r
+ Where += PW_j;\r
+ if (Where > PW_in_size)\r
+ break;\r
+/*printf ( "Where : %ld\n",Where);*/\r
+ }\r
+ /* Where is now on the first SBOD */\r
+\r
+ /* now, lets calculate the size of samples (SBODs) */\r
+ for (PW_k=0; PW_k<PW_l; PW_k++)\r
+ {\r
+ Where += 4; /*bypass 'SBOD'*/\r
+ PW_j = (in_data[Where]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3];\r
+ Where += 4; /* bypass the dword just read */\r
+ Where += PW_j;\r
+ if (Where > PW_in_size)\r
+ {\r
+ PW_o = BAD;\r
+ break;\r
+ }\r
+ }\r
+ /* We're is now at the end of the OKTA file */\r
+ \r
+\r
+ if (PW_o != BAD)\r
+ { \r
+ OutputSize = Where - PW_Start_Address;\r
+ \r
+ CONVERT = BAD;\r
+ Save_Rip ( "Oktalizer module", Oktalizer );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+ }\r
+ else\r
+ {\r
+ printf ("found a too much truncated Oktalizer file\n");\r
+ }\r
+}\r
+\r
--- /dev/null
+/* testPMD3() */\r
+/* Rip_PMD3() */\r
+/* Depack_PMD3() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testPMD3 ( void )\r
+{\r
+ /* test 1 */\r
+ if ( PW_i < 1080 )\r
+ {\r
+ /*printf ( "#1 (PW_i:%d)\n" , PW_i );*/\r
+ return BAD;\r
+ }\r
+ /*if ( PW_Start_Address == 0)printf ("yo");*/\r
+\r
+ /* test 2 */\r
+ PW_Start_Address = PW_i-1080;\r
+ \r
+ /* test 1.1 */\r
+ if ( PW_Start_Address + 12 > PW_in_size )\r
+ {\r
+ /*printf ( "#1.1 (PW_i:%d)\n" , PW_i );*/\r
+ return BAD;\r
+ }\r
+\r
+ \r
+ for ( PW_k=0 ; PW_k<31 ; PW_k++ )\r
+ {\r
+ /* size */\r
+ PW_j = (((in_data[PW_Start_Address+42+PW_k*30]*256)+in_data[PW_Start_Address+43+PW_k*30])*2);\r
+ /* loop start */\r
+ PW_m = (((in_data[PW_Start_Address+46+PW_k*30]*256)+in_data[PW_Start_Address+47+PW_k*30])*2);\r
+ /* loop size */\r
+ PW_n = (((in_data[PW_Start_Address+48+PW_k*30]*256)+in_data[PW_Start_Address+49+PW_k*30])*2);\r
+\r
+ if ( test_smps (PW_j,PW_m,PW_n,in_data[PW_Start_Address+45+PW_k*30]/2,in_data[PW_Start_Address+44+PW_k*30]) == BAD )\r
+ {\r
+ /*printf ( "#2 (Start:%d)(siz:%d)(lstart:%d)(lsiz:%d) (smp:%d)\n" , PW_Start_Address,PW_j,PW_m,PW_n,PW_k );*/\r
+ return BAD;\r
+ }\r
+ }\r
+\r
+ /*if ( PW_Start_Address == 0)printf ("yo");*/\r
+\r
+ /* test #4 pattern list size */\r
+ PW_l = in_data[PW_Start_Address+950];\r
+ if ( PW_l>127 )\r
+ {\r
+ /*printf ( "#4,0 (Start:%d)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ /*if ( PW_Start_Address == 0)printf ("yo");*/\r
+\r
+ /* PW_l holds the size of the pattern list */\r
+ PW_k=0;\r
+ for ( PW_j=0 ; PW_j<128 ; PW_j++ )\r
+ {\r
+ if ( in_data[PW_Start_Address+952+PW_j] > PW_k )\r
+ PW_k = in_data[PW_Start_Address+952+PW_j];\r
+ if ( in_data[PW_Start_Address+952+PW_j] > 127 )\r
+ {\r
+ /*printf ( "#4,1 (Start:%d)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+ }\r
+\r
+ /*if ( PW_Start_Address == 0)printf ("yo");*/\r
+\r
+ /* PW_k holds the highest pattern number */\r
+ /* test last patterns of the pattern list = 0 ? */\r
+ PW_j += 2; /* found some obscure ptk :( */\r
+ while ( PW_j < 128 )\r
+ {\r
+ if ( in_data[PW_Start_Address+952+PW_j] > 0x7f )\r
+ {\r
+ /*printf ( "#4,2 (Start:%d) (PW_j:%d) (at:%d)\n" , PW_Start_Address,PW_j ,PW_Start_Address+952+PW_j );*/\r
+ return BAD;\r
+ }\r
+ PW_j += 1;\r
+ }\r
+ /* PW_k is the number of pattern in the file (-1) */\r
+ PW_k += 1;\r
+\r
+ /* if ( PW_Start_Address == 0)printf ("yo");*/\r
+\r
+ /* test #5 size ... */\r
+ PW_m = ((in_data[PW_Start_Address+1084]*256*256*256)+\r
+ (in_data[PW_Start_Address+1085]*256*256)+\r
+ (in_data[PW_Start_Address+1086]*256)+\r
+ in_data[PW_Start_Address+1087]);\r
+ PW_o = ((in_data[PW_Start_Address+1088]*256*256*256)+\r
+ (in_data[PW_Start_Address+1089]*256*256)+\r
+ (in_data[PW_Start_Address+1090]*256)+\r
+ in_data[PW_Start_Address+1091]);\r
+ if ( (PW_o + PW_n +PW_Start_Address) > PW_in_size )\r
+ {\r
+ /*printf ( "#5,0 (Start:%d)\n" , PW_Start_Address );*/\r
+ return BAD;\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+void Rip_PMD3 ( void )\r
+{\r
+ uint8_t c=0x00;\r
+ /* PW_k is still the nbr of pattern */\r
+ /* PW_m is still the size of note pointers */\r
+ /* PW_o is still the size of ref table for notes */\r
+ \r
+ if (in_data[PW_Start_Address + 1082] == 'D')\r
+ c = 0x20;\r
+ else /* 'd' */\r
+ c = 0x40;\r
+\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_j=0 ; PW_j<31 ; PW_j++ )\r
+ PW_WholeSampleSize += (((in_data[PW_Start_Address+42+PW_j*30]*256)+in_data[PW_Start_Address+43+PW_j*30])*2);\r
+\r
+ OutputSize += PW_WholeSampleSize + PW_m + PW_o + 1092 + (PW_k*c);\r
+\r
+ CONVERT = BAD;\r
+ if (c == 0x20)\r
+ Save_Rip ( "Module-Patterncompressor (PMD3)", PMD3 );\r
+ else\r
+ Save_Rip ( "Module-Patterncompressor (PMd3)", PMd3 );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
+\r
+\r
+/*\r
+ * PMD3.c 20160413 (c) Asle\r
+ *\r
+ * Converts PMD3 MODs back to PTK or OCT\r
+ *\r
+*/\r
+\r
+void Depack_PMD3 ( void )\r
+{\r
+ uint8_t c=0x00;\r
+ uint8_t *Whatever;\r
+ uint8_t Max=0x00;\r
+ int32_t WholeSampleSize=0;\r
+ int32_t i=0, addy1, addy2, addy3, size1, size2, size3, ptr1, ptr2, ptr3;\r
+ int32_t Where=PW_Start_Address;\r
+ FILE *out; /*, *DEBUG;*/\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+/* DEBUG = fopen ("_debug_.txt", "w+b");*/\r
+\r
+ /* get whole sample size and patch vols (/2)*/\r
+ for ( i=0 ; i<31 ; i++ )\r
+ {\r
+ WholeSampleSize += (((in_data[Where+42+i*30]*256)+in_data[Where+43+i*30])*2);\r
+ }\r
+ /*printf ( "Whole sanple size : %ld\n" , WholeSampleSize );*/\r
+\r
+ /* read and write whole header */\r
+ fwrite ( &in_data[Where] , 1080 , 1 , out );\r
+\r
+ /* write ID */\r
+ if (in_data[PW_Start_Address + 1082] == 'D')\r
+ c = 0x20;\r
+ else /* 'd' */\r
+ c = 0x40;\r
+ \r
+ Whatever = (uint8_t *) malloc (4);\r
+ if (c == 0x20)\r
+ {\r
+ Whatever[0] = 'M';\r
+ Whatever[1] = '.';\r
+ Whatever[2] = 'K';\r
+ Whatever[3] = '.';\r
+ }\r
+ else\r
+ {\r
+ Whatever[0] = 'C';\r
+ Whatever[1] = 'D';\r
+ Whatever[2] = '8';\r
+ Whatever[3] = '1';\r
+ }\r
+ fwrite ( Whatever , 4 , 1 , out );\r
+ free ( Whatever );\r
+\r
+ Where += 952;\r
+\r
+ /* get number of pattern */\r
+ Max = 0x00;\r
+ for ( i=0 ; i<128 ; i++ )\r
+ {\r
+ if ( in_data[Where+i] > Max )\r
+ Max = in_data[Where+i];\r
+ }\r
+ Max += 1;\r
+ /*printf ( "Number of pattern : %d\n" , Max );*/\r
+\r
+ Where += (128 + 4);\r
+\r
+ ptr1 = addy1 = Where + 8;\r
+ size1 = Max * c; /* c says if it's 4 or 8 channels */\r
+ ptr2 = addy2 = addy1 + size1;\r
+ size2 = ((in_data[Where+0]*256*256*256)+\r
+ (in_data[Where+1]*256*256)+\r
+ (in_data[Where+2]*256)+\r
+ in_data[Where+3]);\r
+ ptr3 = addy3 = addy2 + size2;\r
+ size3 = ((in_data[Where+4]*256*256*256)+\r
+ (in_data[Where+5]*256*256)+\r
+ (in_data[Where+6]*256)+\r
+ in_data[Where+7]);\r
+ \r
+\r
+ /* pattern data */\r
+ for (i=0; i<Max; i++) /* loop per pattern */\r
+ {\r
+ uint8_t PATTERN[2048], j, k, l;\r
+ BZERO (PATTERN, 2048);\r
+\r
+/*fprintf (DEBUG,"Pattern %d\n-------\n",i);*/\r
+ \r
+ /* loop per voice */\r
+ for (j=0; j<(c/8); j++)\r
+ {\r
+/*fprintf (DEBUG,"voice %d\n-----\n",j);*/\r
+ PW_j = ((in_data[ptr1+0]*256*256*256)+\r
+ (in_data[ptr1+1]*256*256)+\r
+ (in_data[ptr1+2]*256)+\r
+ in_data[ptr1+3]);\r
+ ptr1 += 4;\r
+ PW_k = ((in_data[ptr1+0]*256*256*256)+\r
+ (in_data[ptr1+1]*256*256)+\r
+ (in_data[ptr1+2]*256)+\r
+ in_data[ptr1+3]);\r
+ ptr1 += 4;\r
+/* fprintf (DEBUG,"ctrl:%4x data:%4x\n", PW_j, PW_k);*/\r
+ \r
+ for (k=0, l=0; k<64;) /* k will count the note occurences */\r
+ {\r
+ uint32_t z, repeat;\r
+ uint8_t c1 = (in_data[PW_j+ptr2+l]&0x03)+1, c2 = (in_data[PW_j+ptr2+l]&0xFC);\r
+/* fprintf (DEBUG, "[@%x][@%x] %x -> %d & %d => ",PW_j+ptr2+l, PW_j+l, in_data[PW_j+ptr2+l], c1,c2);*/\r
+ l+=1;\r
+ \r
+ /* fetch relative note and write it */\r
+/* fprintf (DEBUG,"%x-%x-%x-%x | ",\r
+ in_data[PW_k+ptr3+c2],\r
+ in_data[PW_k+ptr3+c2+1],\r
+ in_data[PW_k+ptr3+c2+2],\r
+ in_data[PW_k+ptr3+c2+3]\r
+ );*/\r
+ for (repeat=0; repeat<c1; repeat+=1)\r
+ {\r
+ z = (j*4)+((k+repeat)*(c/2));\r
+ \r
+/* fprintf (DEBUG,"(z:%x)\n",z);\r
+ fflush (DEBUG);*/\r
+ \r
+ PATTERN[z] = in_data[PW_k+ptr3+c2];\r
+ PATTERN[z+1] = in_data[PW_k+ptr3+c2+1];\r
+ PATTERN[z+2] = in_data[PW_k+ptr3+c2+2];\r
+ PATTERN[z+3] = in_data[PW_k+ptr3+c2+3];\r
+ }\r
+ \r
+/* fprintf (DEBUG,"%x-%x-%x-%x | (z:%x)(z+1:%x)(z+2:%x)(z+3:%x)",PATTERN[z],PATTERN[z+1],PATTERN[z+2],PATTERN[z+3], z, z+1, z+2, z+3);\r
+ fprintf (DEBUG,"\n");*/\r
+ \r
+ k += c1;\r
+ }\r
+/* fprintf (DEBUG,"\n");*/\r
+ }\r
+ \r
+ \r
+ \r
+ /* write pattern */\r
+ if (c==0x20)\r
+ fwrite ( PATTERN , 1024 , 1 , out );\r
+ else\r
+ fwrite ( PATTERN , 2048 , 1 , out );\r
+ }\r
+\r
+ /* sample data */\r
+ Where = PW_Start_Address + 1092 + size1 + size2 + size3;\r
+ fwrite ( &in_data[Where] , WholeSampleSize , 1 , out );\r
+\r
+ /* crap */\r
+ /*Crap ( " PMD3 " , BAD , BAD , out );*/\r
+\r
+/* fflush ( DEBUG );*/\r
+/* fclose ( DEBUG );*/\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return;\r
+}\r
+\r
--- /dev/null
+/*\r
+ thanks to Markus\r
+ 20091124 - Asle\r
+*/\r
+/* testSIDMON1() */\r
+/* Rip_SIDMON1() */\r
+\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testSIDMON1 ( void )\r
+{\r
+ PW_Start_Address = PW_i;\r
+\r
+ /* file size < 4 */\r
+ if ( (PW_in_size - PW_Start_Address) < 4 )\r
+ {\r
+ /*printf ( "#1 (start:%ld) (size:%ld)\n" , PW_Start_Address , PW_in_size-PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* get central addy */\r
+ PW_m = (( in_data[PW_Start_Address+2]*256)+\r
+ in_data[PW_Start_Address+3] );\r
+\r
+\r
+ /* test in-size again */\r
+ if ( PW_Start_Address+PW_m+2 > PW_in_size )\r
+ {\r
+ /*printf ( "#2 (start:%ld) (central addy:%ld)\n" , PW_Start_Address , PW_m);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* test some bytes */\r
+ if ( (in_data[PW_Start_Address+6] != 0xFF) || (in_data[PW_Start_Address+7] != 0xD4) )\r
+ {\r
+ /*printf ( "#3 (start:%ld)\n" , PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* get tech addys */\r
+ PW_n = (( in_data[PW_Start_Address+PW_m-2+2]*256)+ /* smps desc */\r
+ in_data[PW_Start_Address+PW_m-1+2] );\r
+ PW_o = (( in_data[PW_Start_Address+PW_m-6+2]*256)+ /* patlist addy */\r
+ in_data[PW_Start_Address+PW_m-5+2] );\r
+ PW_j = (( in_data[PW_Start_Address+PW_m-10+2]*256)+ /* pat data addy */\r
+ in_data[PW_Start_Address+PW_m-9+2] );\r
+\r
+ /* test in-size again */\r
+ if ( (PW_Start_Address+PW_m+2+PW_n+4 > PW_in_size ) ||\r
+ (PW_Start_Address+PW_m+2+PW_o+4 > PW_in_size ) )\r
+ {\r
+ /*printf ( "#4 (start:%ld) (PW_n:%ld) (PW_o:%ld) (PW_j:%ld)\n" , PW_Start_Address , PW_n,PW_o,PW_j);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* check both adresses consistency */\r
+ if ( (PW_n <= PW_o) && (PW_n != 1) )\r
+ {\r
+ /*printf ( "#5 (start:%ld) (smp addy:%ld) (patlist addy:%ld) (PW_m:%ld)\n" , PW_Start_Address , PW_n, PW_o,PW_m);*/\r
+ return BAD;\r
+ }\r
+\r
+ /* no sample - then check only patlist at the end */\r
+ if (PW_n == 1)\r
+ {\r
+ PW_k = PW_Start_Address+PW_m+2+PW_o;\r
+ if ( (PW_k + 4) > PW_in_size ) /* one pattern ? odd but ... */\r
+ return GOOD;\r
+ PW_k += 4;\r
+ PW_l = 1;\r
+ PW_n = PW_o - PW_j;\r
+ /*printf ("(PW_k:%ld)(PW_n:%ld)\n",PW_k,PW_n);*/\r
+ while(PW_l < PW_n)\r
+ {\r
+ /*printf ("%lx - \n", PW_l);*/\r
+ PW_l = (( in_data[PW_k]*256*256*256)+\r
+ ( in_data[PW_k+1]*256*256)+\r
+ ( in_data[PW_k+2]*256)+\r
+ in_data[PW_k+3] );\r
+ if ( ((PW_k + 4) > PW_in_size ) || (PW_l == 0)) /* end of file, so end of patlist .. or 0 */\r
+ return GOOD;\r
+ PW_k += 4;\r
+ }\r
+ PW_k -= 4;\r
+ }\r
+ else /* there are some samples */\r
+ {\r
+ PW_n = PW_Start_Address+PW_m+2+PW_n;\r
+ PW_m = (in_data[PW_n+2]*256) + in_data[PW_n+3];\r
+ if ( ((PW_n+PW_m) > PW_in_size) || ((PW_m%32) != 0) )\r
+ {\r
+ /*printf ( "#6 (start:%ld) (size of smp desc:%ld)(PW_n:%ld)\n" , PW_Start_Address , PW_m,PW_n);*/\r
+ return BAD;\r
+ }\r
+ if ( PW_m == 0 )\r
+ { /* weird hack ?!? try to guess the smp desc size */\r
+ for ( ; ;PW_m += 32 )\r
+ {\r
+ /*printf ("+");*/\r
+ if (PW_m + 4 + 32 > PW_in_size)\r
+ {\r
+ /*printf ( "#6,1 (start:%ld) (size of smp desc:%ld)(PW_n:%ld)\n" , PW_Start_Address , PW_m,PW_n);*/\r
+ return BAD;\r
+ }\r
+ PW_j = (( in_data[PW_n+PW_m+4]*256*256*256)+\r
+ ( in_data[PW_n+PW_m+5]*256*256)+\r
+ ( in_data[PW_n+PW_m+6]*256)+\r
+ in_data[PW_n+PW_m+7] );\r
+ PW_k = (( in_data[PW_n+PW_m+8]*256*256*256)+\r
+ ( in_data[PW_n+PW_m+9]*256*256)+\r
+ ( in_data[PW_n+PW_m+10]*256)+\r
+ in_data[PW_n+PW_m+11] );\r
+ PW_l = (( in_data[PW_n+PW_m+12]*256*256*256)+\r
+ ( in_data[PW_n+PW_m+13]*256*256)+\r
+ ( in_data[PW_n+PW_m+14]*256)+\r
+ in_data[PW_n+PW_m+15] );\r
+ if ((PW_j > PW_k) || (PW_k >= PW_l))\r
+ {\r
+ /*printf ("%lx,%lx,%lx\n",PW_j,PW_k,PW_l);*/\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ /*printf ("\n(PW_n:%ld)(PW_m:%ld)\n",PW_n,PW_m);*/\r
+ /* get biggest end addy of samples */\r
+ PW_o = 0;\r
+ for ( PW_j=0; PW_j<(PW_m/32); PW_j+=1)\r
+ {\r
+ /*printf ("%lx - \n",PW_o);*/\r
+ PW_k = ((in_data[PW_n+14+PW_j*32]*256) + in_data[PW_n+15+PW_j*32]);\r
+ if (PW_k > PW_o)\r
+ PW_o = PW_k;\r
+ }\r
+ PW_n += (PW_m + PW_o + 4);\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_SIDMON1 ( void )\r
+{\r
+\r
+ OutputSize = PW_n - PW_Start_Address;\r
+\r
+ CONVERT = BAD;\r
+ Save_Rip ( "Sidmon v1 module", Sidmon1 );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
--- /dev/null
+/*\r
+ thanks to Laurent Clevy\r
+ 20091125 - Asle\r
+ 20160319 - reworked from scratch\r
+*/\r
+/* testSIDMON2() */\r
+/* Rip_SIDMON2() */\r
+\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testSIDMON2 ( void )\r
+{\r
+ if (PW_i<58)\r
+ return BAD;\r
+\r
+ \r
+ PW_Start_Address = PW_i-58;\r
+ if ((PW_Start_Address + 0x5a) > PW_in_size)\r
+ return BAD;\r
+\r
+ if ( (in_data[PW_Start_Address+6] != 0x00) ||\r
+ (in_data[PW_Start_Address+7] != 0x00) ||\r
+ (in_data[PW_Start_Address+8] != 0x00) ||\r
+ (in_data[PW_Start_Address+9] != 0x1c) ||\r
+ (in_data[PW_Start_Address+10]!= 0x00) ||\r
+ (in_data[PW_Start_Address+11] != 0x00) ||\r
+ (in_data[PW_Start_Address+12] != 0x00) ||\r
+ (in_data[PW_Start_Address+13] != 0x04) ||\r
+ (in_data[PW_Start_Address+68] != '-') ||\r
+ (in_data[PW_Start_Address+69] != ' ') ||\r
+ (in_data[PW_Start_Address+70] != 'T'))\r
+ return BAD;\r
+\r
+ /* successives sizes */\r
+ PW_n = 0;\r
+ for (PW_j = 0; PW_j<11; PW_j++)\r
+ {\r
+ PW_m = (( in_data[PW_Start_Address+14+(PW_j*4)]*256*256*256)+\r
+ ( in_data[PW_Start_Address+15+(PW_j*4)]*256*256)+\r
+ ( in_data[PW_Start_Address+16+(PW_j*4)]*256)+\r
+ in_data[PW_Start_Address+17+(PW_j*4)] );\r
+ PW_n += PW_m;\r
+ if ( ((PW_Start_Address + PW_n) > PW_in_size ) || (PW_m > 0xffff) || (PW_m == 0))\r
+ {\r
+ /*printf ( "#1,%ld (start:%ld) (size:%ld)\n" , PW_j, PW_Start_Address , PW_m);*/\r
+ return BAD;\r
+ }\r
+ if (PW_j == 7)\r
+ {\r
+ PW_k = (( in_data[PW_Start_Address+4]*256)+\r
+ in_data[PW_Start_Address+5] );\r
+ if (PW_k != PW_m)\r
+ {\r
+ /*printf ( "#1,a (start:%ld) (size:%ld) (PW_k:%ld)\n" , PW_Start_Address , PW_m,PW_k);*/\r
+ return BAD;\r
+ }\r
+ }\r
+ }\r
+ /*printf ("(PW_n:%u)\n",PW_n);*/\r
+\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+\r
+void Rip_SIDMON2 ( void )\r
+{\r
+\r
+ OutputSize = PW_i - PW_Start_Address;\r
+\r
+ CONVERT = BAD;\r
+ Save_Rip ( "Sidmon v2 module", Sidmon2 );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
-/* (5th of may 2007)
-*/
-/* testSkizzo() */
-/* Rip_Skizzo() */
-/* Depack_Skizzo() */
-
-
-#include "globals.h"
-#include "extern.h"
-
-
-short testSkizzo ( void )
-{
- /* test #1 */
- PW_Start_Address = PW_i-24;
- if ((PW_i + 38) > PW_in_size)
- {
- /*printf ("[1] PW_Start_Address : %ld\n", PW_Start_Address);*/
- return BAD;
- }
- PW_j = in_data[PW_Start_Address+22]; /* nbr of samples */
- if ((PW_j > 31) || (PW_j==0))
- {
- /*printf ("[2] (nbr of samples:%ld) PW_Start_Address : %ld\n", PW_j,PW_Start_Address);*/
- return BAD;
- }
-
- return GOOD;
-}
-
-
-void Rip_Skizzo ( void )
-{
- /* PW_j is the nbr of samples */
- /* get nbr of stored patts */
- PW_k = in_data[PW_Start_Address+23];
- /* get size of patlist */
- PW_m = in_data[PW_Start_Address+20] & 0x7f;
- PW_WholeSampleSize = 0;
- for ( PW_l=0 ; PW_l<PW_j ; PW_l++ )
- PW_WholeSampleSize += ((in_data[PW_Start_Address+28+(PW_l*8)]*256)+
- in_data[PW_Start_Address+29+(PW_l*8)])*2;
-
- OutputSize = PW_WholeSampleSize + (PW_j*8) + (PW_k*768) + PW_m + 28;
-
- CONVERT = GOOD;
- Save_Rip ( "Skizzo Packed music", Skizzo );
-
- if ( Save_Status == GOOD )
- PW_i += 1;
-}
-
-
-/*
- * Skizzo.c 2007 (c) Asle / ReDoX
- *
- * 20070525 : doesn't convert pattern data
-*/
-void Depack_Skizzo ( void )
-{
- Uchar *Whatever;
- long i=0,k=0;
- short BODYaddy, SAMPaddy, nbr_sample, siz_patlist, nbr_patstored;
- long Total_Sample_Size=0;
- long Where = PW_Start_Address;
- Uchar poss[37][2];
- FILE *out,*DEBUG;
-
- /* filling up the possible PTK notes */
- fillPTKtable(poss);
-
-/* DEBUG = fopen("DEBUG.txt","w+b");*/
-
- if ( Save_Status == BAD )
- return;
-
- sprintf ( Depacked_OutName , "%ld.mod" , Cpt_Filename-1 );
- out = PW_fopen ( Depacked_OutName , "w+b" );
-
- /* title */
- Whatever = (Uchar *) malloc (2048);
- BZERO ( Whatever , 2048 );
- /* write title */
- fwrite ( &in_data[Where], 20, 1, out );
- Where += 20;
-
- /* read size of patternlist */
- siz_patlist = in_data[Where]; /* &0x7F necessary ! */
- Where += 2; /* with bypassing an unknown '00' */
-
- /* read number of sample */
- nbr_sample = in_data[Where];
- Where += 1;
-
- /* read nbr of pattern saved */
- nbr_patstored = in_data[Where];
- Where += 5; /* bypassing '-GD-' too */
-
- /* sample header */
- BZERO ( Whatever, 2048 );
- for ( i=0 ; i<nbr_sample ; i++ )
- {
- /* size */
- Whatever[22+(i*30)] = in_data[Where];
- Whatever[23+(i*30)] = in_data[Where+1];
- Total_Sample_Size += ((in_data[Where]*256)+in_data[Where+1])*2;
- /* finetune */
- Whatever[24+(i*30)] = in_data[Where+2];
- /* volume */
- Whatever[25+(i*30)] = in_data[Where+3];
- /* loop start */
- Whatever[26+(i*30)] = in_data[Where+4];
- Whatever[27+(i*30)] = in_data[Where+5];
- /* loop size */
- Whatever[28+(i*30)] = in_data[Where+6];
- Whatever[29+(i*30)] = in_data[Where+7];
- Where += 8;
- }
- /* finally, write the PTK header */
- fwrite ( Whatever , 930 , 1 , out );
-
- /* pattern list now */
- /* 'Where' is on it */
- BZERO ( Whatever, 2048 );
- for ( i=2; i<(siz_patlist&0x7f)+2; i++ )
- {
- Whatever[i] = in_data[Where];
- Where += 1;
- }
- Whatever[i+1] = (nbr_patstored - 1);
- Whatever[0] = (Uchar)(siz_patlist&0x7f);
- Whatever[1] = 0x7F;
- fwrite ( Whatever , 130 , 1 , out );
-
- /* PTK's tag now*/
- Whatever[0] = 'M';
- Whatever[1] = '.';
- Whatever[2] = 'K';
- Whatever[3] = '.';
- fwrite ( Whatever , 4 , 1 , out );
-/*
-fprintf(DEBUG,"nbr_sample : %d\n",nbr_sample);
-fprintf(DEBUG,"siz_patlist : %d\n",siz_patlist&0x7f);
-fprintf(DEBUG,"nbr_patstored : %d\n\n",nbr_patstored);
-*/
- /* pattern data now ... */
- for ( i=0 ; i<nbr_patstored ; i++ )
-/* for ( i=0 ; i<2 ; i++ )*/
- {
-/*fprintf(DEBUG,"\n-------pat %ld----\n",i);
-fprintf(DEBUG,"@ in file : %ld\n",Where);*/
- for ( k=0; k<256; k++ ) /* loop on each note for this pattern */
- {
-/*fprintf(DEBUG,"[%-4ld] %2x-%2x-%2x\n",k,in_data[Where],in_data[Where+1],in_data[Where+2]); */
-
- Whatever[k*4] = poss[in_data[Where]&0x7f][0];
- /*Whatever[k*4] &= in_data[Where]&0x80;*/ /* not sure .. never seen */
- Whatever[k*4+1] = poss[in_data[Where]&0x7f][1];
- Whatever[k*4+2] = in_data[Where+1];
- Whatever[k*4+3] = in_data[Where+2];
- Where += 3;
- }
-/*fprintf(DEBUG,"\nEND OF LOOP ?!?\n");*/
- fwrite ( Whatever , 1024 , 1 , out );
- }
- free ( Whatever );
-
-
- fwrite ( &in_data[Where] , Total_Sample_Size , 1 , out );
-
- Crap ( " Skizzo " , BAD , BAD , out );
-
-/* fflush ( DEBUG );
- fclose ( DEBUG );*/
- fflush ( out );
- fclose ( out );
-
- printf ( "done\n" );
- return; /* useless ... but */
-
-}
+/* (5th of may 2007)\r
+*/\r
+/* testSkizzo() */\r
+/* Rip_Skizzo() */\r
+/* Depack_Skizzo() */\r
+\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testSkizzo ( void )\r
+{\r
+ /* test #1 */\r
+ PW_Start_Address = PW_i-24;\r
+ if ((PW_i + 38) > PW_in_size)\r
+ {\r
+ /*printf ("[1] PW_Start_Address : %ld\n", PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+ PW_j = in_data[PW_Start_Address+22]; /* nbr of samples */\r
+ if ((PW_j > 31) || (PW_j==0))\r
+ {\r
+ /*printf ("[2] (nbr of samples:%ld) PW_Start_Address : %ld\n", PW_j,PW_Start_Address);*/\r
+ return BAD;\r
+ }\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+void Rip_Skizzo ( void )\r
+{\r
+ /* PW_j is the nbr of samples */\r
+ /* get nbr of stored patts */\r
+ PW_k = in_data[PW_Start_Address+23];\r
+ /* get size of patlist */\r
+ PW_m = in_data[PW_Start_Address+20] & 0x7f;\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_l=0 ; PW_l<PW_j ; PW_l++ )\r
+ PW_WholeSampleSize += ((in_data[PW_Start_Address+28+(PW_l*8)]*256)+\r
+ in_data[PW_Start_Address+29+(PW_l*8)])*2;\r
+\r
+ OutputSize = PW_WholeSampleSize + (PW_j*8) + (PW_k*768) + PW_m + 28;\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "GnoiPacker Packed music", GnoiPacker );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 1;\r
+}\r
+\r
+\r
+/*\r
+ * Skizzo.c 2007 (c) Asle / ReDoX\r
+ *\r
+ * 20070525 : doesn't convert pattern data\r
+ * ???????? : pattern data converted\r
+ * 20121022 : real player name : GnoiPacker by Tax/Gnu Design (1991)\r
+*/\r
+void Depack_Skizzo ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ int32_t i=0,k=0;\r
+ int16_t nbr_sample, siz_patlist, nbr_patstored;\r
+ int32_t Total_Sample_Size=0;\r
+ int32_t Where = PW_Start_Address;\r
+ uint8_t poss[37][2];\r
+ FILE *out;/*,*DEBUG;*/\r
+\r
+ /* filling up the possible PTK notes */\r
+ fillPTKtable(poss);\r
+ \r
+/* DEBUG = fopen("DEBUG.txt","w+b");*/\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ /* title */\r
+ Whatever = (uint8_t *) malloc (2048);\r
+ BZERO ( Whatever , 2048 );\r
+ /* write title */\r
+ fwrite ( &in_data[Where], 20, 1, out );\r
+ Where += 20;\r
+\r
+ /* read size of patternlist */\r
+ siz_patlist = in_data[Where]; /* &0x7F necessary ! */\r
+ Where += 2; /* with bypassing an unknown '00' */\r
+\r
+ /* read number of sample */\r
+ nbr_sample = in_data[Where];\r
+ Where += 1;\r
+ \r
+ /* read nbr of pattern saved */\r
+ nbr_patstored = in_data[Where];\r
+ Where += 5; /* bypassing '-GD-' too */\r
+ \r
+ /* sample header */\r
+ BZERO ( Whatever, 2048 );\r
+ for ( i=0 ; i<nbr_sample ; i++ )\r
+ {\r
+ /* size */\r
+ Whatever[22+(i*30)] = in_data[Where];\r
+ Whatever[23+(i*30)] = in_data[Where+1];\r
+ Total_Sample_Size += ((in_data[Where]*256)+in_data[Where+1])*2;\r
+ /* finetune */\r
+ Whatever[24+(i*30)] = in_data[Where+2];\r
+ /* volume */\r
+ Whatever[25+(i*30)] = in_data[Where+3];\r
+ /* loop start */\r
+ Whatever[26+(i*30)] = in_data[Where+4];\r
+ Whatever[27+(i*30)] = in_data[Where+5];\r
+ /* loop size */\r
+ Whatever[28+(i*30)] = in_data[Where+6];\r
+ Whatever[29+(i*30)] = in_data[Where+7];\r
+ Where += 8;\r
+ }\r
+ /* finally, write the PTK header */\r
+ fwrite ( Whatever , 930 , 1 , out );\r
+\r
+ /* pattern list now */\r
+ /* 'Where' is on it */\r
+ BZERO ( Whatever, 2048 );\r
+ for ( i=2; i<(siz_patlist&0x7f)+2; i++ )\r
+ {\r
+ Whatever[i] = in_data[Where];\r
+ Where += 1;\r
+ }\r
+ Whatever[i+1] = (nbr_patstored - 1);\r
+ Whatever[0] = (uint8_t)(siz_patlist&0x7f);\r
+ Whatever[1] = 0x7F;\r
+ fwrite ( Whatever , 130 , 1 , out );\r
+ \r
+ /* PTK's tag now*/\r
+ Whatever[0] = 'M';\r
+ Whatever[1] = '.';\r
+ Whatever[2] = 'K';\r
+ Whatever[3] = '.';\r
+ fwrite ( Whatever , 4 , 1 , out );\r
+/*\r
+fprintf(DEBUG,"nbr_sample : %d\n",nbr_sample);\r
+fprintf(DEBUG,"siz_patlist : %d\n",siz_patlist&0x7f);\r
+fprintf(DEBUG,"nbr_patstored : %d\n\n",nbr_patstored);\r
+*/\r
+ /* pattern data now ... */\r
+ for ( i=0 ; i<nbr_patstored ; i++ )\r
+/* for ( i=0 ; i<2 ; i++ )*/\r
+ {\r
+/*fprintf(DEBUG,"\n-------pat %ld----\n",i);\r
+fprintf(DEBUG,"@ in file : %ld\n",Where);*/\r
+ for ( k=0; k<256; k++ ) /* loop on each note for this pattern */\r
+ {\r
+/*fprintf(DEBUG,"[%-4ld] %2x-%2x-%2x\n",k,in_data[Where],in_data[Where+1],in_data[Where+2]); */\r
+\r
+ Whatever[k*4] = poss[in_data[Where]&0x7f][0];\r
+ /*Whatever[k*4] &= in_data[Where]&0x80;*/ /* not sure .. never seen */\r
+ Whatever[k*4+1] = poss[in_data[Where]&0x7f][1];\r
+ Whatever[k*4+2] = in_data[Where+1];\r
+ Whatever[k*4+3] = in_data[Where+2];\r
+ Where += 3;\r
+ }\r
+/*fprintf(DEBUG,"\nEND OF LOOP ?!?\n");*/\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ }\r
+ free ( Whatever );\r
+\r
+\r
+ fwrite ( &in_data[Where] , Total_Sample_Size , 1 , out );\r
+\r
+/* Crap ( " Skizzo " , BAD , BAD , out );*/\r
+ Crap ( " GnoiPacker " , BAD , BAD , out );\r
+\r
+/* fflush ( DEBUG );\r
+ fclose ( DEBUG );*/\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+\r
+}\r
--- /dev/null
+/* testSTRUGGLE() */\r
+/* Rip_STRUGGLE() */\r
+/* Depack_STRUGGLE() */\r
+\r
+#include "globals.h"\r
+#include "extern.h"\r
+\r
+\r
+int16_t testSTRUGGLE ( void )\r
+{\r
+ int32_t samplesize;\r
+ \r
+ if (PW_i<3)\r
+ return BAD;\r
+ \r
+ PW_Start_Address = PW_i-3;\r
+\r
+ if ((PW_i + 180 + 12 + 0x38) > PW_in_size)\r
+ return BAD;\r
+\r
+ /* test samples */\r
+ PW_n = 0;\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_k=0 ; PW_k<15 ; PW_k++ )\r
+ {\r
+ /* fine */\r
+ if ( in_data[PW_Start_Address+2+PW_k*12] != 0 )\r
+ return BAD;\r
+ /* volume */\r
+ if ( in_data[PW_Start_Address+3+PW_k*12] > 0x40 )\r
+ return BAD;\r
+ /* size */\r
+ samplesize = ((in_data[PW_Start_Address+PW_k*12] * 256) + in_data[PW_Start_Address+1+PW_k*12])*2;\r
+ PW_WholeSampleSize += samplesize;\r
+ /* lstart */\r
+ PW_j = ((in_data[PW_Start_Address+4+PW_k*12] * 256) + in_data[PW_Start_Address+5+PW_k*12])*2;\r
+ /* lsize */\r
+ PW_o = ((in_data[PW_Start_Address+6+PW_k*12] * 256) + in_data[PW_Start_Address+7+PW_k*12])*2;\r
+ /* sizes tests */\r
+ if ((PW_j > samplesize+2) || (PW_o > samplesize+2 ) || ((PW_j + PW_o)>(samplesize*2)+2))\r
+ return BAD;\r
+ /* loop start not 0 while size 0*/\r
+ if ((PW_j != 0) && (PW_o == 0))\r
+ return BAD;\r
+ /* loop start = loop size not 0 */\r
+ if ((PW_j + PW_o) > samplesize)\r
+ return BAD;\r
+ /* addys */\r
+ PW_m = ((in_data[PW_Start_Address+8+PW_k*12]*256*256*256) +\r
+ (in_data[PW_Start_Address+9+PW_k*12]*256*256) +\r
+ (in_data[PW_Start_Address+10+PW_k*12]*256) +\r
+ in_data[PW_Start_Address+11+PW_k*12]);\r
+ if ((PW_m < PW_n) || (PW_m < 0x100))\r
+ return BAD;\r
+ PW_n = PW_m;\r
+ }\r
+\r
+ /* pattern size */\r
+ PW_j = in_data[PW_Start_Address+193];\r
+ if ( (PW_j == 0) || (PW_j > 64) )\r
+ return BAD;\r
+\r
+ /* pattern list */\r
+ PW_j = in_data[PW_Start_Address+193];\r
+ for (PW_k = 0; PW_k<0x38; PW_k++)\r
+ {\r
+ if ( in_data[PW_Start_Address+194+PW_k] > 0x38 )\r
+ return BAD;\r
+ }\r
+\r
+ /* whole size ok ? */\r
+ if ( PW_WholeSampleSize < 4 )\r
+ return BAD;\r
+\r
+ return GOOD;\r
+}\r
+\r
+\r
+void Rip_STRUGGLE ( void )\r
+{\r
+ PW_WholeSampleSize = 0;\r
+ for ( PW_k=0 ; PW_k<15 ; PW_k++ )\r
+ PW_WholeSampleSize += ((in_data[PW_Start_Address+PW_k*12]*256)+in_data[PW_Start_Address+1+PW_k*12])*2;\r
+ \r
+ PW_n = 0;\r
+ for ( PW_k=0 ; PW_k<0x38 ; PW_k++ )\r
+ if (in_data[PW_Start_Address+PW_k+0xC2] > PW_n)\r
+ PW_n = in_data[PW_Start_Address+PW_k+0xC2];\r
+\r
+ PW_n += 1; /* max pattern number */\r
+\r
+ /* 0x100 header size */\r
+ OutputSize = 0x100 + PW_WholeSampleSize + (PW_n*768);\r
+\r
+ CONVERT = GOOD;\r
+ Save_Rip ( "Struggle game module", STRUGGLE );\r
+ \r
+ if ( Save_Status == GOOD )\r
+ PW_i += 3;\r
+}\r
+\r
+\r
+/*\r
+ * STRUGGLE.c 2008 (c) Sylvain "Asle" Chipaux\r
+ *\r
+ * example provided by Muerto, as usual :)\r
+*/\r
+\r
+#define ON 1\r
+#define OFF 2\r
+\r
+void Depack_STRUGGLE ( void )\r
+{\r
+ uint8_t *Whatever;\r
+ int32_t Where=PW_Start_Address;\r
+ uint32_t i=0,j=0,k=0;\r
+ FILE *out;\r
+\r
+ if ( Save_Status == BAD )\r
+ return;\r
+\r
+ sprintf ( Depacked_OutName , "%d.mod" , Cpt_Filename-1 );\r
+ out = PW_fopen ( Depacked_OutName , "w+b" );\r
+\r
+ /* title */\r
+ Whatever = (uint8_t *) malloc ( 1024 );\r
+ BZERO ( Whatever , 1024 );\r
+ fwrite ( Whatever , 20 , 1 , out );\r
+\r
+ /* read and write whole header */\r
+ /*printf ( "Converting sample headers ... " );*/\r
+ PW_WholeSampleSize = 0;\r
+ for ( i=0 ; i<15 ; i++ )\r
+ {\r
+ /* write name */\r
+ fwrite ( Whatever , 22 , 1 , out );\r
+ /* size/finetune/volume/loops */\r
+ PW_WholeSampleSize += ((in_data[Where] * 256) + in_data[Where+1])*2;\r
+ fwrite ( &in_data[Where] , 8 , 1 , out );\r
+ Where += 12;\r
+ }\r
+\r
+ /* bypassing 12 empty bytes (!) */\r
+ Where += 12;\r
+\r
+ /* pattern list */\r
+ fwrite (&in_data[Where+1],1,1,out);\r
+ fwrite (Whatever,1,1,out);\r
+ Where += 2;\r
+ /* 0x38 pos .. apparently */\r
+ /* write pattern list */\r
+ fwrite ( &in_data[Where] , 0x38 , 1 , out );\r
+ /* complete to 128 */\r
+ fwrite (Whatever,72,1,out);\r
+ /* get highest pattern nbr */\r
+ for (i=0;i<0x38;i++)\r
+ {\r
+ if (in_data[Where]>j)\r
+ j = in_data[Where];\r
+ Where ++;\r
+ }\r
+ /* j is the highest pattern number */\r
+\r
+ /* bypass 6 empty bytes */\r
+ Where += 6;\r
+\r
+ /* pattern data */\r
+ /*printf ( "Converting pattern datas (Where = %x, j = %x)",Where,j );*/\r
+ for ( i=0 ; i<=j ; i++ )\r
+ {\r
+ BZERO ( Whatever , 1024 );\r
+ for (k=0;k<64*4;k++)\r
+ {\r
+ Whatever[k*4] = in_data[Where];\r
+ Whatever[k*4+1] = in_data[Where+1];\r
+ Whatever[k*4+2] = in_data[Where+2]<<4;\r
+ Where += 3;\r
+ }\r
+ fwrite ( Whatever , 1024 , 1 , out );\r
+ }\r
+ free ( Whatever );\r
+ /*printf ( " ok\n" );*/\r
+ /*fflush ( stdout );*/\r
+\r
+\r
+ /* sample data */\r
+ /*printf ( "Saving sample data ... " );*/\r
+ fwrite ( &in_data[Where] , PW_WholeSampleSize , 1 , out );\r
+\r
+\r
+ /* crap */\r
+ /*Crap ( "Struggle game music" , BAD , BAD , out );*/\r
+\r
+ fflush ( out );\r
+ fclose ( out );\r
+\r
+ printf ( "done\n" );\r
+ return; /* useless ... but */\r
+}\r