]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
prowizard: update integrated ripper to 1.70a
authorStefan Reinauer <stefan.reinauer@coreboot.org>
Wed, 17 Jun 2026 20:21:35 +0000 (13:21 -0700)
committerStefan Reinauer <stefan.reinauer@coreboot.org>
Wed, 17 Jun 2026 22:26:51 +0000 (15:26 -0700)
Refresh the bundled ProWizard sources from the standalone 1.70a
tree and add the new ripper modules to the Unix and Visual Studio
build lists.

Keep the WinUAE entry point, module-ripper file hooks, logging,
and byte-order compatibility shims while updating the visible Pro
Wizard version labels.

Drop duplicate upstream source aliases from the integrated build lists
so the imported ripper objects link without duplicate definitions.

144 files changed:
CMakeLists.txt
od-unix/qt/launcher.cpp
od-win32/prowizard/prowizard.vcxproj
od-win32/prowizard/prowizard.vcxproj.filters
od-win32/resources/winuae.rc
od-win32/resources/winuae_minimal.rc
od-win32/resources/winuae_old.rc
prowizard/include/extern.h
prowizard/include/globals.h
prowizard/include/tuning.h
prowizard/include/vars.h
prowizard/misc/misc.c
prowizard/misc/testbag.c
prowizard/prowiz.c
prowizard/rippers/AC1D_packer.c
prowizard/rippers/AMF.c [new file with mode: 0644]
prowizard/rippers/AMOS-MusicBank.c
prowizard/rippers/AMOS-PowerPackerBank.c
prowizard/rippers/BP-Soundmonitor.c
prowizard/rippers/BSI-FutureComposer.c
prowizard/rippers/Bytekiller.c
prowizard/rippers/ChipTracker.c
prowizard/rippers/Crunchmania-Address.c
prowizard/rippers/Crunchmania-Simple.c
prowizard/rippers/DM1.c [new file with mode: 0644]
prowizard/rippers/DefjamCruncher32-pro.c
prowizard/rippers/DigiBooster17.c
prowizard/rippers/DigitalIllusion.c
prowizard/rippers/DoubleAction.c
prowizard/rippers/Dragpack100.c
prowizard/rippers/Dragpack252.c
prowizard/rippers/EurekaPacker.c
prowizard/rippers/FC-M-Packer.c
prowizard/rippers/FastTracker2.c
prowizard/rippers/FuchsTracker.c
prowizard/rippers/FutureComposer13.c
prowizard/rippers/FutureComposer14.c
prowizard/rippers/FuzzacPacker.c
prowizard/rippers/GMC.c
prowizard/rippers/GNUPacker12.c
prowizard/rippers/GPMO.c
prowizard/rippers/GnuPlayer.c
prowizard/rippers/HCD.c [new file with mode: 0644]
prowizard/rippers/HQC2.c
prowizard/rippers/HeatseekerMC10.c
prowizard/rippers/HighPresCr.c [new file with mode: 0644]
prowizard/rippers/HornetPacker.c
prowizard/rippers/IFF.c [new file with mode: 0644]
prowizard/rippers/IT.c [new file with mode: 0644]
prowizard/rippers/JamCracker.c
prowizard/rippers/KefrensSoundMachine.c
prowizard/rippers/MED-Octamed.c
prowizard/rippers/MOD-compatible.c
prowizard/rippers/MasterCruncher30-Address.c
prowizard/rippers/MaxPacker12.c
prowizard/rippers/MegaCruncher-Object.c
prowizard/rippers/MegaCruncher.c
prowizard/rippers/ModuleProtector.c
prowizard/rippers/Mugician.c
prowizard/rippers/NP3.c
prowizard/rippers/Newtron.c
prowizard/rippers/NewtronOld.c
prowizard/rippers/NoiseFromHeaven.c
prowizard/rippers/NoisePacker1.c
prowizard/rippers/NoisePacker2.c
prowizard/rippers/NoiseRunner.c
prowizard/rippers/NovoTrade.c
prowizard/rippers/Perfsong.c [new file with mode: 0644]
prowizard/rippers/PhaPacker.c
prowizard/rippers/PolkaPacker.c
prowizard/rippers/PowerMusic.c
prowizard/rippers/PowerPacker23.c
prowizard/rippers/PowerPacker30.c
prowizard/rippers/PowerPacker40-library.c
prowizard/rippers/PowerPacker40.c
prowizard/rippers/ProPacker10.c
prowizard/rippers/ProPacker21.c
prowizard/rippers/ProPacker30.c
prowizard/rippers/Promizer01.c
prowizard/rippers/Promizer10c.c
prowizard/rippers/Promizer18a.c
prowizard/rippers/Promizer20.c
prowizard/rippers/Promizer40.c
prowizard/rippers/Prorunner10.c
prowizard/rippers/Prorunner20.c
prowizard/rippers/QuadraComposer.c
prowizard/rippers/RelokIt10.c
prowizard/rippers/S3M.c [new file with mode: 0644]
prowizard/rippers/SA.c [new file with mode: 0644]
prowizard/rippers/SGT-Packer.c
prowizard/rippers/SkytPacker.c
prowizard/rippers/SlamPacker.c [new file with mode: 0644]
prowizard/rippers/SoundFX.c
prowizard/rippers/SoundTracker.c
prowizard/rippers/SoundTracker26.c
prowizard/rippers/SpikeCruncher.c
prowizard/rippers/StartrekkerPack.c
prowizard/rippers/StimPacker.c
prowizard/rippers/StoneArtsPlayer.c
prowizard/rippers/StoneCracker270.c
prowizard/rippers/StoneCracker299.c
prowizard/rippers/StoneCracker299b.c
prowizard/rippers/StoneCracker299d.c
prowizard/rippers/StoneCracker300.c
prowizard/rippers/StoneCracker310.c
prowizard/rippers/SuperCruncher27.c
prowizard/rippers/SyncroPacker46.c
prowizard/rippers/THX.c [new file with mode: 0644]
prowizard/rippers/TMK.c
prowizard/rippers/TNMCruncher.c
prowizard/rippers/TetraPack102.c
prowizard/rippers/TetraPack21.c
prowizard/rippers/TetraPack22.c
prowizard/rippers/TheDarkDemon.c
prowizard/rippers/ThePlayer22a.c
prowizard/rippers/ThePlayer30a.c
prowizard/rippers/ThePlayer40.c
prowizard/rippers/ThePlayer41a.c
prowizard/rippers/ThePlayer50a.c
prowizard/rippers/ThePlayer60a.c
prowizard/rippers/ThePlayer61a.c
prowizard/rippers/TimeCruncher17.c
prowizard/rippers/TitanicsPlayer.c
prowizard/rippers/TrackerPacker1.c
prowizard/rippers/TrackerPacker2.c
prowizard/rippers/TrackerPacker3.c
prowizard/rippers/TreasurePattern.c
prowizard/rippers/TryItCruncher101.c
prowizard/rippers/TurboSqueezer61.c
prowizard/rippers/UnicTracker.c
prowizard/rippers/UnicTracker2.c
prowizard/rippers/Viruz2.c
prowizard/rippers/WantonPacker.c
prowizard/rippers/XannPlayer.c
prowizard/rippers/ZenPacker.c
prowizard/rippers/bnr.c [new file with mode: 0644]
prowizard/rippers/datacrunchers.c
prowizard/rippers/mosh.c [new file with mode: 0644]
prowizard/rippers/okta.c [new file with mode: 0644]
prowizard/rippers/pmd3.c [new file with mode: 0644]
prowizard/rippers/sidmon1.c [new file with mode: 0644]
prowizard/rippers/sidmon2.c [new file with mode: 0644]
prowizard/rippers/skizzo.c
prowizard/rippers/struggle.c [new file with mode: 0644]

index 779a0f014a1996df7a215cfe330daf35cff05f6b..18aeabbb7ec4fcaa5ecab0dfb836e46cea97d47d 100644 (file)
@@ -1052,6 +1052,7 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
@@ -1065,6 +1066,7 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
@@ -1078,9 +1080,13 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
@@ -1100,6 +1106,7 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
@@ -1118,8 +1125,11 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
@@ -1136,6 +1146,7 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
@@ -1160,6 +1171,13 @@ if(WINUAE_UNIX_WITH_PROWIZARD)
         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
index 8402ace5f730fd77cfd28bd0aaad7220ca0f7317..44d2cfe0d987432345ce87ffd30732fce3e29b60 100644 (file)
@@ -9302,7 +9302,7 @@ private:
         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]() {
index deb16fd77a370177a525608a12488060efd7cbed..a00d3b69cc078bd260182de9f74b923db678b531 100644 (file)
     <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>
index ec062f2b52d882064c4cec835d1cf62dd177be03..8ccca1b8165763948d11604b53427fa5d7678296 100644 (file)
@@ -28,6 +28,9 @@
       <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">
@@ -67,6 +70,9 @@
       <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>
index 838cbce2777be60936a3cffb4a5494beeb7c8f43..4332d0890c70346592e00411b7502359aff2e15f 100644 (file)
@@ -899,7 +899,7 @@ BEGIN
     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
index e3339347e615cecaaee2b9a18a73c98604d2d06a..3c98109db6964e137658a7a5a3d55b57053c2bf6 100644 (file)
@@ -896,7 +896,7 @@ BEGIN
     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
index cd559af7551ce94cbba4a482711f48631af100d5..4a43b451f29cc2565a521a8074c63c7d4c2c5e62 100644 (file)
@@ -609,7 +609,7 @@ BEGIN
     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
index 593d3b42dea28a41353f1d493ea126032d6500cf..70efe1b6ce17784e3089768413f7a42fc0d3d835 100644 (file)
  *
  * 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 */
 
@@ -136,14 +166,20 @@ extern short testZEN ( void );
 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 );
@@ -154,6 +190,7 @@ extern void Rip_Powerpacker40 ( 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 );
@@ -164,6 +201,7 @@ extern void Rip_StoneCracker270 ( 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 );
@@ -173,10 +211,12 @@ extern void Rip_TurboSqueezer61 ( 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 );
@@ -187,12 +227,15 @@ extern void Rip_GnuPlayer ( 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 );
@@ -204,6 +247,7 @@ extern void Rip_Noisepacker2 ( 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 );
@@ -212,6 +256,7 @@ extern void Rip_P41A ( 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 );
@@ -219,13 +264,17 @@ extern void Rip_PM10c ( 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 );
@@ -235,8 +284,10 @@ extern void Rip_STARPACK ( 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 );
@@ -256,6 +307,7 @@ extern void Rip_ZEN ( 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 );
@@ -265,10 +317,12 @@ extern void Depack_GnuPlayer ( 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 );
@@ -284,6 +338,7 @@ extern void Depack_P41A ( 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 );
@@ -291,6 +346,7 @@ extern void Depack_PM18a ( 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 );
@@ -304,6 +360,7 @@ extern void Depack_SKYT ( 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 );
@@ -322,16 +379,16 @@ extern void Depack_ZEN ( 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
@@ -340,21 +397,21 @@ extern unsigned int htonl(unsigned int);
 /* 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);
index 11c978af6b385c071b2bd125f3ad13f8d827c388..46d375d2565dcd5df8150b494d2627b9619de565 100644 (file)
@@ -1,28 +1,20 @@
+#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);
 }
@@ -32,7 +24,6 @@ __inline Ulong htonlx (Ulong v)
 #endif
 #endif
 
-#define _KNOWN_FORMATS      135
 #define _TYPES_FILENAME     "_types_"
 #define _TYPES_LINE_LENGHT  256
 #define MINIMAL_FILE_LENGHT 64
@@ -183,6 +174,44 @@ enum
   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 */
index 1faa1e5e996a92c75a248efb29854127c49f9833..c6c46d79d4b8c4c32fc99ff8b57f4cea316a02ce 100644 (file)
@@ -5,7 +5,7 @@
 */
 
 
-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 },
index f69dfc470a49a9a2771b7b5b106727ebb7a6e59d..b8ac61a925ac48aff9ab03d4382c3283a45c6acd 100644 (file)
@@ -6,19 +6,19 @@
 */
 
 
-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;
index 1ade02dd4684e1cf88f8c07ec5de2e6c02b4c4f8..114c3de1f026e8939a3a800693873a9517006dcb 100644 (file)
@@ -5,10 +5,9 @@
  *  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;
 
@@ -37,7 +36,7 @@ void Support_Types ( void )
       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;
@@ -56,7 +55,7 @@ void Support_Types ( void )
 
   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;
@@ -64,9 +63,8 @@ void Support_Types ( void )
 
   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
@@ -205,7 +203,7 @@ void Support_Types_FileDefault ( void )
   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" );
@@ -213,9 +211,42 @@ void Support_Types_FileDefault ( void )
   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], "---" );
 }
 
 
@@ -225,26 +256,27 @@ void Support_Types_FileDefault ( void )
  * 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" );
@@ -252,7 +284,6 @@ void Save_Rip ( char * format_to_save, int FMT_EXT )
   {
     pw_write_log ( "  converting to Protracker ... " );
   }
-  //fflush ( stdout );
   Save_Status = GOOD;
 }
 
@@ -260,23 +291,24 @@ void Save_Rip ( char * format_to_save, int FMT_EXT )
  * 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 );
@@ -287,8 +319,7 @@ void Save_Rip_Special ( char * format_to_save, int FMT_EXT, Uchar * Header_Block
   }
   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;
 }
@@ -296,7 +327,7 @@ void Save_Rip_Special ( char * format_to_save, int FMT_EXT, Uchar * Header_Block
 
 
 /* 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  ]" );
@@ -323,7 +354,7 @@ void Crap ( char *Format , Uchar Delta , Uchar Pack , FILE *out )
 }
 
 /* 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  ]" );
@@ -342,13 +373,13 @@ void Crap15 ( char *Format , Uchar Delta , Uchar Pack , FILE *out )
  * 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;
@@ -408,6 +439,7 @@ void Rip_SpecialCruncherData ( char *Packer_Name , int Header_Size , int Packer_
       PW_l *= 4;
       PW_l += 10;
       OutputSize = PW_l;
+      Header_Size = 6;
       break;
     default:
       OutputSize = PW_l + Header_Size;
@@ -422,7 +454,7 @@ void Rip_SpecialCruncherData ( char *Packer_Name , int Header_Size , int Packer_
   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;
 
@@ -430,40 +462,40 @@ void Rip_SpecialCruncherData ( char *Packer_Name , int Header_Size , int Packer_
 
 
 /* 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;
 
@@ -511,6 +543,51 @@ void fillPTKtable (Uchar poss[37][2])
 #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;
+}
index 10149bb4c4fc04206cddb2b355a80073733e33f9..3b2a987d41077925be7eec4a7aa1ee023ad8d36a 100644 (file)
@@ -8,12 +8,12 @@
 
 /* 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;
@@ -21,7 +21,7 @@ short test_smps ( long smpsiz, long lstart, long lsiz, Uchar vol, Uchar fine )
     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;
index e889b7c56f483023f00ee1cdb0d12ce6e99d9532..b97774b9d5d86279aff8c07db4b9ccbfef2feae9 100644 (file)
@@ -1,26 +1,24 @@
 /*
  * 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 )
   {
@@ -43,7 +41,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
   /* 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" );
@@ -52,7 +50,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
   }
 
   /* 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" );
@@ -60,8 +58,13 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
   }
   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   ******************************/
   /********************************************************************/
@@ -83,24 +86,26 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
     /* 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]   == '!') &&
@@ -112,7 +117,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         {
           Rip_PM ();
           Depack_PM ();
-          continue;
         }
       }
       /* Treasure Patterns ?*/
@@ -124,7 +128,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         {
           Rip_Treasure ();
           Depack_Treasure ();
-          continue;
         }
       }
       */
@@ -134,12 +137,14 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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 */
@@ -150,7 +155,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         if ( testSpecialCruncherData( 12, 8 ) != BAD )
         {
           Rip_SpecialCruncherData ( "Amnesty Design (1AM) Data Cruncher" , 16 , AmnestyDesign1 );
-          continue;
         }
       }
       /* "2AM" data cruncher */
@@ -161,7 +165,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         if ( testSpecialCruncherData ( 8, 4 ) != BAD )
         {
           Rip_SpecialCruncherData ( "Amnesty Design (2AM) Data Cruncher" , 12 , AmnestyDesign2 );
-          continue;
         }
       }
 #endif
@@ -182,7 +185,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         if ( testMOD(in_data[PW_i]-0x30) != BAD )
         {
           Rip_MOD (in_data[PW_i]-0x30);
-          continue;
         }
       }
       /* "[10-32]CH" FastTracker v1/v2 */
@@ -206,7 +208,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         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
@@ -219,7 +220,18 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         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 );
         }
       }
 
@@ -232,11 +244,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         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') &&
@@ -246,7 +257,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         {
           Rip_Skizzo ();
           Depack_Skizzo ();
-          continue;
         }
       }
 
@@ -264,10 +274,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
          (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
 
@@ -278,7 +288,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
         {
           Rip_XANN ();
           Depack_XANN ();
-          continue;
         }
       }
 
@@ -289,7 +298,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_MP_noID ();
         Depack_MP ();
-        continue;
       }
 
       /* Digital Illusion */
@@ -297,7 +305,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_DI ();
         Depack_DI ();
-        continue;
       }
 
       /* SGTPacker */
@@ -306,7 +313,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_SGT ();
         Depack_SGT ();
-        continue;
       }
       */
       /* eureka packer */
@@ -314,7 +320,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_EUREKA ();
         Depack_EUREKA ();
-        continue;
       }
 
       /* The player 5.0a ? */
@@ -322,7 +327,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_P50A ();
         Depack_P50A ();
-        continue;
       }
 
       /* The player 6.0a ? */
@@ -330,16 +334,14 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         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 ? */
@@ -347,16 +349,14 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         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 */
@@ -364,7 +364,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_PP10 ();
         Depack_PP10 ();
-        continue;
       }
 
       /* Noise Packer v2 */
@@ -373,7 +372,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_Noisepacker2 ();
         Depack_Noisepacker2 ();
-        continue;
       }
 
       /* Noise Packer v1 */
@@ -381,7 +379,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_Noisepacker1 ();
         Depack_Noisepacker1 ();
-        continue;
       }
 
       /* Noise Packer v3 */
@@ -389,7 +386,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_Noisepacker3 ();
         Depack_Noisepacker3 ();
-        continue;
       }
 
       /* Promizer 0.1 */
@@ -397,7 +393,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_PM01 ();
         Depack_PM01 ();
-        continue;
       }
 
       /* ProPacker 2.1 */
@@ -405,7 +400,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_PP21 ();
         Depack_PP21 ();
-        continue;
       }
 
       /* ProPacker 3.0 */
@@ -413,7 +407,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_PP30 ();
         Depack_PP30 ();
-        continue;
       }
 
       /* StartTrekker pack */
@@ -421,7 +414,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_STARPACK ();
         Depack_STARPACK ();
-        continue;
       }
 
       /* Zen packer */
@@ -429,7 +421,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_ZEN ();
         Depack_ZEN ();
-        continue;
       }
 
       /* Unic tracker v1 ? */
@@ -437,7 +428,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_UNIC_withID ();
         Depack_UNIC ();
-        continue;
       }
 
       /* Unic tracker v1 ? */
@@ -445,7 +435,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_UNIC_noID ();
         Depack_UNIC ();
-        continue;
       }
 
       /* Unic trecker v2 ? */
@@ -453,7 +442,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_UNIC2 ();
         Depack_UNIC2 ();
-        continue;
       }
 
       /* Game Music Creator ? */
@@ -461,7 +449,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_GMC ();
         Depack_GMC ();
-        continue;
       }
 
       /* Heatseeker ? */
@@ -469,14 +456,12 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_HEATSEEKER ();
         Depack_HEATSEEKER ();
-        continue;
       }
 
       /* SoundTracker (15 smp) */
       if ( testSoundTracker() != BAD )
       {
         Rip_SoundTracker ();
-        continue;
       }
 
       /* The Dark Demon (group name) format */
@@ -484,7 +469,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_TheDarkDemon ();
         Depack_TheDarkDemon ();
-        continue;
       }
 
       /* Newtron */
@@ -492,7 +476,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         Rip_Newtron ();
         Depack_Newtron ();
-        continue;
       }
 
       /* Newtron Old */
@@ -500,16 +483,22 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
       {
         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;
+      }*/
     }
 
 
@@ -524,10 +513,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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" */
@@ -535,11 +524,19 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -557,50 +554,50 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 ) &&
@@ -622,9 +619,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testSyncroPacker() != BAD )
           {
             Rip_SyncroPacker ();
-            break;
           }
-          break;
         }
         /* Tetrapack 1.02 */
         if ( (in_data[PW_i+1]  == 0xFA ) &&
@@ -639,19 +634,38 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 ) &&
@@ -673,9 +687,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testHQCCruncher2() != BAD )
           {
             Rip_HQCCruncher2 ();
-            break;
           }
-          break;
         }
         /* ByteKillerPro 1.0 */
         if ( (in_data[PW_i+1]  == 0xFA) &&
@@ -692,22 +704,66 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -720,15 +776,32 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           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 */
@@ -736,10 +809,22 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
 
@@ -753,11 +838,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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! */
@@ -771,30 +856,30 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
               (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) &&
@@ -804,10 +889,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              ((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;
@@ -818,10 +903,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
             (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;
 
@@ -831,11 +916,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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') &&
@@ -849,10 +934,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
 
@@ -862,63 +947,73 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -926,10 +1021,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
@@ -956,9 +1051,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testMegaCruncher10() != BAD )
           {
             Rip_MegaCruncher ();
-            break;
           }
-          break;
         }
 
         /* Mega Cruncher 1.2 */
@@ -978,10 +1071,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -996,10 +1089,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 ?)*/
@@ -1007,11 +1100,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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 */
@@ -1019,11 +1112,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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;
@@ -1034,11 +1127,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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
@@ -1059,10 +1152,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1082,10 +1175,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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) &&
@@ -1104,10 +1197,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1123,10 +1216,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1146,10 +1239,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1169,10 +1262,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1192,10 +1285,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1211,10 +1304,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1234,10 +1327,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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)*/
@@ -1257,10 +1350,33 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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 */
@@ -1279,11 +1395,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
            (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 */
@@ -1303,10 +1419,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1322,10 +1438,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1341,10 +1457,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1364,10 +1480,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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) &&
@@ -1386,10 +1502,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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) &&
@@ -1408,12 +1524,22 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1423,30 +1549,40 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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') &&
@@ -1454,11 +1590,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
 
@@ -1468,11 +1604,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1492,15 +1628,52 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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] == '.') )
@@ -1509,7 +1682,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testMOD(4) != BAD )
           {
             Rip_MOD(4);
-            break;
           }
 
           /* Unic tracker v1 ? */
@@ -1517,7 +1689,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_UNIC_withID ();
             Depack_UNIC ();
-            break;
           }
 
           /* Noiserunner ? */
@@ -1525,7 +1696,19 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_Noiserunner ();
             Depack_Noiserunner ();
-            break;
+          }
+
+          /* Mosh packer ? */
+          if ( testMOSH() != BAD )
+          {
+            Rip_MOSH ();
+            Depack_MOSH ();
+          }
+          /* HCD-protector ? */
+          if ( testHCD() != BAD )
+          {
+            Rip_HCD ();
+            Depack_HCD ();
           }
         }
 
@@ -1538,7 +1721,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_Fuzzac ();
             Depack_Fuzzac ();
-            break;
           }
         }
 
@@ -1551,14 +1733,12 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_TP2 ();
             Depack_TP2 ();
-            break;
           }
           /* tracker packer v1 */
           if ( testTP1() != BAD )
           {
             Rip_TP1 ();
             Depack_TP1 ();
-            break;
           }
         }
 
@@ -1569,22 +1749,21 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             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') &&
@@ -1595,21 +1774,21 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             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
@@ -1633,7 +1812,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testDefjam32pro() != BAD )
           {
             Rip_Defjam32 ();
-            break;
           }
         }
 
@@ -1657,7 +1835,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testSTC299d() != BAD )
           {
             Rip_STC299d ();
-            break;
           }
         }
 
@@ -1681,7 +1858,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testSTC299b() != BAD )
           {
             Rip_STC299b ();
-            break;
           }
         }
 
@@ -1706,7 +1882,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testSTC299() != BAD )
           {
             Rip_STC299 ();
-            break;
           }
         }
 
@@ -1730,7 +1905,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testSTC300() != BAD )
           {
             Rip_STC300 ();
-            break;
           }
         }
 
@@ -1754,12 +1928,66 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           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 */
@@ -1767,8 +1995,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1776,22 +2003,23 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1799,10 +2027,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1810,10 +2039,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1821,11 +2051,23 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1833,11 +2075,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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
@@ -1846,10 +2088,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1857,10 +2099,21 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1872,10 +2125,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1886,11 +2139,27 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
 
@@ -1900,45 +2169,57 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1946,11 +2227,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1958,22 +2239,39 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1981,10 +2279,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -1992,10 +2290,20 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2003,10 +2311,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2014,38 +2322,67 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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') &&
@@ -2056,7 +2393,21 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             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();
           }
         }
 
@@ -2066,10 +2417,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2081,7 +2432,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_FuchsTracker ();
             Depack_FuchsTracker ();
-            break;
           }
           /* Sound FX */
           if ( testSoundFX13() != BAD )
@@ -2090,7 +2440,43 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
 #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;
@@ -2105,7 +2491,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_UNIC_withID ();
             Depack_UNIC ();
-            break;
           }
         }
        /* Mugician */
@@ -2117,7 +2502,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           if ( testMUGICIAN() != BAD )
           {
             Rip_MUGICIAN ();
-            break;
           }
         }
         break;
@@ -2129,10 +2513,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
               ( 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 */
@@ -2140,51 +2524,24 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
 
@@ -2195,10 +2552,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
@@ -2225,7 +2582,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_PM18a ();
             Depack_PM18a ();
-            break;
           }
 
           /* Promizer 1.0c */
@@ -2233,9 +2589,7 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_PM10c ();
             Depack_PM10c ();
-            break;
           }
-          break;
         }
 
           /* promizer 2.0 ? */
@@ -2255,11 +2609,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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
@@ -2280,10 +2634,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
@@ -2307,10 +2661,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2318,10 +2672,10 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2334,14 +2688,13 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2353,9 +2706,42 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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;
@@ -2371,12 +2757,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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) &&
@@ -2384,14 +2769,12 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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 */
@@ -2406,13 +2789,13 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
              (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) &&
@@ -2448,11 +2831,33 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             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) )
@@ -2461,7 +2866,6 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
           {
             Rip_PHA ();
             Depack_PHA ();
-            break;
           }
         }
         break;
@@ -2490,10 +2894,11 @@ int prowizard_search (Uchar *in_data_p, int PW_in_size_p)
 
     } /* 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
index b582f851d31ebe1f9b93ac3614382b61bf12e3b0..32d037bf51542dcc4d4f4c1675de8e0c904b7dcf 100644 (file)
@@ -1,15 +1,15 @@
-/* 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;
 
@@ -24,6 +24,7 @@ short testAC1D ( void )
     return BAD;
   }
 
+
   /* test #4 */
   for ( PW_k = 0 ; PW_k < 31 ; PW_k ++ )
   {
@@ -62,44 +63,44 @@ void Rip_AC1D ( void )
   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);
@@ -118,7 +119,7 @@ void Depack_AC1D ( void )
   /*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 );
 
@@ -244,11 +245,11 @@ void Depack_AC1D ( void )
   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
+}
diff --git a/prowizard/rippers/AMF.c b/prowizard/rippers/AMF.c
new file mode 100644 (file)
index 0000000..2179241
--- /dev/null
@@ -0,0 +1,192 @@
+/* (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
index fea9b395b9e595cb960d3a480539c7040ea335ad..5d451680df36c9ee5783b5bef1cd97e0e08ae949 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testAmBk ( void )
+int16_t testAmBk ( void )
 {
   if (PW_i + 68 > PW_in_size)
   {
@@ -68,27 +68,29 @@ void Rip_AmBk ( void )
 */
 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)+
@@ -113,12 +115,13 @@ void Depack_AmBk ( void )
   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 );*/
@@ -129,58 +132,63 @@ void Depack_AmBk ( void )
   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 );*/
 
index b9899a41047684e1d75868d02e378767df950e6c..d020d159707ab389665c6a6e794b2cd4aa60a247 100644 (file)
@@ -5,7 +5,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testPPbk ( void )
+int16_t         testPPbk ( void )
 {
   PW_Start_Address = PW_i;
 
index 676fe2b389d35733ce82a4613e72ff939cf3f370..d0d8eda4601e9cf33a5c2871ab17afd0ca33feb2 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testBP ( void )
+int16_t         testBP ( void )
 {
   /* test 1 */
   if ( (PW_i < 26) || ((PW_Start_Address+512)>PW_in_size) )
@@ -39,18 +39,22 @@ short testBP ( void )
 
   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;
index 34127e2763ac5045e203d1a55557f3414c0f24f8..0edf2c37e3bfb894a12f4f1733d9cae7538d7673 100644 (file)
@@ -4,7 +4,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testBSIFutureComposer ( void )
+int16_t         testBSIFutureComposer ( void )
 {
   PW_Start_Address = PW_i;
 
index d096c904b036e1248a282c3d8c84eb26d41dc896..4d5d8594948d13b0fa3f06811431faaf0e3a4583 100644 (file)
@@ -2,14 +2,18 @@
 /* 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 )
@@ -91,7 +95,7 @@ short testByteKiller_13 ( void )
 
 
 
-short testByteKiller_20 ( void )
+int16_t         testByteKiller_20 ( void )
 {
   if ( test_1_start(127) == BAD )
   {
@@ -107,8 +111,6 @@ short testByteKiller_20 ( void )
        (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 ) ||
@@ -168,7 +170,7 @@ short testByteKiller_20 ( void )
 }
 
 
-short testByteKiller30 ( void )
+int16_t         testByteKiller30 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -238,7 +240,7 @@ short testByteKiller30 ( void )
   /* PW_l is the size of the pack */
 }
 
-short testbytekillerpro10 ( void )
+int16_t         testbytekillerpro10 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -307,12 +309,152 @@ short testbytekillerpro10 ( void )
 }
 
 
+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;
 
@@ -321,7 +463,7 @@ void Rip_ByteKiller ( void )
   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;
@@ -335,7 +477,7 @@ void Rip_ByteKiller ( void )
     /* 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);
@@ -389,8 +531,8 @@ void Rip_ByteKiller30 ( 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;
 
@@ -399,7 +541,7 @@ void Rip_ByteKiller30 ( void )
   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;
@@ -411,7 +553,7 @@ void Rip_ByteKiller30 ( void )
     /* 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);
@@ -434,8 +576,8 @@ void Rip_bytekillerpro10 ( 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;
 
@@ -444,7 +586,7 @@ void Rip_bytekillerpro10 ( void )
   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;
@@ -458,7 +600,7 @@ void Rip_bytekillerpro10 ( void )
     /* 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);
@@ -508,3 +650,101 @@ void Rip_bytekillerpro10 ( void )
     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" :) */
+}
index 60b8dc4ef2717625ee4087b9324001bfe2822c60..ce99a7e6e706f8001a493e7695df2a655c0ad748 100644 (file)
@@ -9,7 +9,7 @@
 #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) )
@@ -41,6 +41,8 @@ short testKRIS ( void )
 /*
  * 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 )
 {
@@ -52,7 +54,9 @@ 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 )
@@ -66,7 +70,7 @@ void Rip_KRIS ( void )
   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" :) */
 }
 
 
@@ -88,26 +92,28 @@ void Rip_KRIS ( void )
 
 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);
 
@@ -115,14 +121,13 @@ void Depack_KRIS ( void )
   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++ )
   {
@@ -165,7 +170,7 @@ void Depack_KRIS ( void )
   /* 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++ )
@@ -209,6 +214,12 @@ void Depack_KRIS ( void )
   }
 
   Max = c1;
+  c1 = 0x00;
+  while (i++<128)
+  {
+    fwrite (&c1,1,1,out);
+    Where += 8;
+  }
   /*printf ( "Number of patterns : %d\n" , Max );*/
 
   /* ptk ID */
@@ -228,6 +239,7 @@ void Depack_KRIS ( void )
     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++ )
     {
@@ -289,7 +301,7 @@ void Depack_KRIS ( void )
 
   fflush ( out );
   fclose ( out );
-/*  fclose ( debug );*/
+  /*fclose ( debug );*/
 
   printf ( "done\n" );
   return; /* useless ... but */
index 082fb7bebbf22b1d48eac80ff831eed289c63ee9..8754e59a715c7ebfacd5f9ba27a9d7e004b749ca 100644 (file)
 #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) +
@@ -93,8 +152,8 @@ void Rip_CrunchmaniaAddr ( 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;
 
@@ -103,7 +162,7 @@ void Rip_CrunchmaniaAddr ( void )
   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;
@@ -115,7 +174,7 @@ void Rip_CrunchmaniaAddr ( void )
     /* 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);
index 18dfdac1a258be3a13fecdcfaaa337649d39057f..654d687a4b75753e26668322d5b04377485743fb 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testcrunchmaniaSimple ( void )
+int16_t         testcrunchmaniaSimple ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -76,8 +76,8 @@ void Rip_CrunchmaniaSimple ( 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;
 
@@ -92,7 +92,7 @@ void Rip_CrunchmaniaSimple ( void )
             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;
@@ -109,7 +109,7 @@ void Rip_CrunchmaniaSimple ( void )
     /* 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);
@@ -119,7 +119,7 @@ void Rip_CrunchmaniaSimple ( void )
       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);
diff --git a/prowizard/rippers/DM1.c b/prowizard/rippers/DM1.c
new file mode 100644 (file)
index 0000000..b5e9ba6
--- /dev/null
@@ -0,0 +1,73 @@
+/*\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
index 208982c0d4cf44a4809fe845dec643b40cef09e2..c049adea690f76442466808f37bc00c9adef298b 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testDefjam32 ( void )
+int16_t         testDefjam32 ( void )
 {
   PW_Start_Address = PW_i-2;
 
@@ -55,6 +55,7 @@ short testDefjam32 ( void )
            in_data[PW_Start_Address+23] );
 
   PW_l += 692;
+  /*printf ( "testdefjam32():%ld (start:%ld)",PW_l,PW_Start_Address );*/
 
   if ( PW_i >= 32 )
   {
@@ -88,7 +89,7 @@ short testDefjam32 ( void )
 }
 
 
-short testDefjam32pro ( void )
+int16_t         testDefjam32pro ( void )
 {
 
   PW_Start_Address = PW_i;
@@ -151,7 +152,7 @@ short testDefjam32pro ( void )
 }
 
 
-short testDefjam32t ( void )
+int16_t         testDefjam32t ( void )
 {
 
   PW_Start_Address = PW_i;
@@ -217,8 +218,8 @@ void Rip_Defjam32 ( 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;
 
@@ -227,7 +228,7 @@ void Rip_Defjam32 ( void )
   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;
@@ -239,18 +240,12 @@ void Rip_Defjam32 ( void )
     /* 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 );
   }
index 03f8a03b8c4a44e710ba599daa0d31a953f625e8..14088ed5cdf38aaf5d4909fd5dbaa8d5f2be8105 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testDigiBooster17 ( void )
+int16_t         testDigiBooster17 ( void )
 {
   PW_Start_Address = PW_i;
 
index a41fc56c91a6f8486c144d8ce981f78c21085c68..002795e1c8ae8a7d983ef8959ecf43efd6b372b3 100644 (file)
@@ -12,7 +12,7 @@
 #include "extern.h"
 
 
-short testDI ( void )
+int16_t         testDI ( void )
 {
   /* test #1 */
   if ( PW_i < 17 )
@@ -165,25 +165,26 @@ void Rip_DI ( void )
  *   - 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);
@@ -191,9 +192,8 @@ void Depack_DI ( void )
   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;
@@ -203,78 +203,72 @@ void Depack_DI ( void )
                       (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) */
@@ -284,24 +278,24 @@ void Depack_DI ( void )
       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++];
index 82bcd7455de633ab84062533e2d42112d83fb96b..12b7840809569dead30cdbd2b96ed262d6e5a54a 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testDoubleAction10 ( void )
+int16_t         testDoubleAction10 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -74,7 +74,7 @@ void Rip_DoubleAction10 ( void )
 {
   /* PW_l is still the whole size */
 
-/*  Uchar * Amiga_EXE_Header_Block;*/
+/*  uint8_t * Amiga_EXE_Header_Block;*/
 
   OutputSize = PW_l;
 
@@ -82,7 +82,7 @@ void Rip_DoubleAction10 ( void )
   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; */
@@ -94,7 +94,7 @@ void Rip_DoubleAction10 ( void )
 
 /*     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
   {
index 2239c96cf5ce590792859da30e30d739ea307e45..23dd56694dbfe5aa18d7778fda6ba00bdb81f075 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testDragpack100 ( void )
+int16_t         testDragpack100 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -13,14 +13,14 @@ short testDragpack100 ( void )
        (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 );*/
@@ -73,8 +73,8 @@ void Rip_Dragpack100 ( 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;
 
@@ -83,7 +83,7 @@ void Rip_Dragpack100 ( void )
   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;
@@ -99,7 +99,7 @@ void Rip_Dragpack100 ( void )
     /* 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);
@@ -110,7 +110,7 @@ void Rip_Dragpack100 ( void )
   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 )
index 36f0288d3094b7af0f3855199843eebd8987f344..1104a2d4b9428e1dfe59c6b6de4de377386603db 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testDragpack252 ( void )
+int16_t         testDragpack252 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -75,8 +75,8 @@ void Rip_Dragpack252 ( 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;
 
@@ -86,7 +86,7 @@ void Rip_Dragpack252 ( void )
   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;
@@ -98,7 +98,7 @@ void Rip_Dragpack252 ( void )
     /* 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);
index 7475414eae2bca735900af0bb8718591da3fdd74..118b0e2a9456bf70506fc93aacfa6919e76037ee 100644 (file)
@@ -14,7 +14,7 @@
  * (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) )
@@ -188,20 +188,20 @@ void Rip_EUREKA ( void )
 
 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 */
@@ -227,7 +227,7 @@ void Depack_EUREKA ( void )
   /*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] = '.';
index 2e7c1d2c594abaad88db289e9c72167a61b27e0c..29a8b9443cf8b83dc632921405dd9cb45ea528de 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testFC_M ( void )
+int16_t         testFC_M ( void )
 {
   /* test 1 */
   PW_Start_Address = PW_i;
@@ -70,16 +70,16 @@ void Rip_FC_M ( void )
 */
 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 */
@@ -93,7 +93,7 @@ void Depack_FC_M ( void )
   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++ )
   {
@@ -111,7 +111,7 @@ void Depack_FC_M ( void )
   }
   /*printf ( "Whole sample size : %ld\n" , WholeSampleSize );*/
 
-  /* bypass "LONG" chunk */
+  /* bypass "int32_t   " chunk */
   Where += 4;
 
   /* read and write pattern table lenght */
index 1979e6f0f8d5fb21e52d052b199cd401871b8ab6..cefcf2f3f2829445ca665ed67cc91a92d2246946 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testXM ( void )
+int16_t         testXM ( void )
 {
   /* test #1 */
   PW_Start_Address = PW_i;
@@ -61,6 +61,7 @@ void Rip_XM ( void )
     /* 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);
   }
 
@@ -68,12 +69,14 @@ void Rip_XM ( void )
   /* 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++ )
     {
@@ -83,6 +86,7 @@ void Rip_XM ( void )
               (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 */
index 4dab2cb5f7ba6bbfe96b04ffa7167aabb612c1d8..2c5ff8af9affd15cfabe84e1693f00ad9478cfc8 100644 (file)
@@ -7,7 +7,7 @@
 
 
 
-short testFuchsTracker ( void )
+int16_t         testFuchsTracker ( void )
 {
   /* test #1 */
   if ( PW_i<192 )
@@ -79,7 +79,7 @@ short testFuchsTracker ( void )
 
   /* 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 )
@@ -131,13 +131,13 @@ void Rip_FuchsTracker ( void )
 
 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 )
@@ -146,11 +146,11 @@ void Depack_FuchsTracker ( void )
   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 );
 
@@ -240,8 +240,8 @@ void Depack_FuchsTracker ( void )
     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 );
   }
 
@@ -299,7 +299,7 @@ void Depack_FuchsTracker ( void )
  
   /* read pattern data */
   free ( Whatever );
-  Whatever = (Uchar *) malloc ( j );
+  Whatever = (uint8_t *) malloc ( j );
 
   /* convert shits */
   for ( i=0 ; i<j ; i+=4 )
index ce47e7ca0126125dbd437eae585e4e33e2774ea0..39e6cd0957bd5afe6b6c8a5e33daf1e41f7c0bc5 100644 (file)
@@ -11,7 +11,7 @@
 #include "extern.h"
 
 
-short testFC13 ( void )
+int16_t         testFC13 ( void )
 {
   PW_Start_Address = PW_i;
 
index 8e8cf824f4119fcc1c82c0734cb693c779e92aec..304593fc9397c8531f7a4461e022586ee929a9b1 100644 (file)
@@ -9,7 +9,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testFC14 ( void )
+int16_t         testFC14 ( void )
 {
   PW_Start_Address = PW_i;
 
index 84ae417dcc242a004f099af6f8f21afac697d73c..8cbff571355a45ef931edb9b58b2e37b595d5484 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testFUZZAC ( void )
+int16_t         testFUZZAC ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -93,17 +93,17 @@ void Rip_Fuzzac ( void )
 
 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 )
@@ -112,7 +112,7 @@ void Depack_Fuzzac ( void )
   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 */
@@ -120,7 +120,7 @@ void Depack_Fuzzac ( void )
   Where += 6;
 
   /* write title */
-  Whatever = (Uchar *) malloc (1024);
+  Whatever = (uint8_t *) malloc (1024);
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
index 86229dcc476a1f2a9a29d3c453888079c6b14695..70e4a19dde71c0b9691650898ed42cf93583004e 100644 (file)
@@ -5,8 +5,10 @@
 #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) )
@@ -16,6 +18,7 @@ short testGMC ( void )
   }
   PW_Start_Address = PW_i-7;
 
+
   /* samples descriptions */
   PW_WholeSampleSize=0;
   PW_j=0;
@@ -89,11 +92,27 @@ short testGMC ( void )
   {
     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 ... 
@@ -103,41 +122,41 @@ short testGMC ( void )
 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 )
@@ -181,21 +200,21 @@ void Rip_GMC ( void )
 
 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 */
@@ -270,6 +289,9 @@ void Depack_GMC ( void )
     {
       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;
index 89d6cbbf61960c8123296b217be4bdc8701029cb..bcb4b9609e5a176e24b0d729961a3c25fa8c2454 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testGNUPacker12 ( void )
+int16_t         testGNUPacker12 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -77,8 +77,8 @@ void Rip_GNUPacker12 ( 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;
 
@@ -87,7 +87,7 @@ void Rip_GNUPacker12 ( void )
   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;
@@ -99,7 +99,7 @@ void Rip_GNUPacker12 ( void )
     /* 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);
index f5965e08fb1a20a2a2bd47493dce60bd7ff39969..cc5e55e8b4a5027bac0bf05cc941efe42de602e8 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testGPMO ( void )
+int16_t         testGPMO ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -133,17 +133,17 @@ void Rip_GPMO ( void )
 
 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)*/
@@ -160,7 +160,7 @@ void Depack_GPMO ( void )
   Where += 952;
 
   /* write ID */
-  Whatever = (Uchar *) malloc (4);
+  Whatever = (uint8_t *) malloc (4);
   Whatever[0] = 'M';
   Whatever[1] = '.';
   Whatever[2] = 'K';
index 83e5c1d47804d9fcbb4385e08dc427568357d1ff..98cac488f89a7ac8bfb7c4c73dff02e2748cd509 100644 (file)
@@ -11,7 +11,7 @@
 #include "extern.h"
 
 
-short testGnuPlayer ( void )
+int16_t         testGnuPlayer ( void )
 {
   /* test #1 */
   if ( PW_i < 0x92 )
@@ -84,23 +84,23 @@ void Rip_GnuPlayer ( void )
 
 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" );*/
 
@@ -115,9 +115,9 @@ void Depack_GnuPlayer ( void )
   */
 
   /*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 );*/
@@ -127,57 +127,57 @@ void Depack_GnuPlayer ( void )
     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;
     }
   }
@@ -193,57 +193,57 @@ void Depack_GnuPlayer ( void )
     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;
     }
   }
@@ -252,15 +252,17 @@ void Depack_GnuPlayer ( void )
   /*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)];
@@ -269,11 +271,12 @@ void Depack_GnuPlayer ( void )
     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';
@@ -287,31 +290,41 @@ void Depack_GnuPlayer ( void )
 
   /* 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 );
 
diff --git a/prowizard/rippers/HCD.c b/prowizard/rippers/HCD.c
new file mode 100644 (file)
index 0000000..cfa4ff2
--- /dev/null
@@ -0,0 +1,161 @@
+/* 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
index 5262e27347de2424439fbb77054d3b3ccf840b1e..440f43e0cdd84f9ed69074c60f903be78d92da18 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testHQCCruncher2 ( void )
+int16_t         testHQCCruncher2 ( void )
 {
   PW_Start_Address = PW_i - 64;
 
@@ -80,8 +80,8 @@ void Rip_HQCCruncher2 ( 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;
 
@@ -95,7 +95,7 @@ void Rip_HQCCruncher2 ( void )
   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;
@@ -109,7 +109,7 @@ void Rip_HQCCruncher2 ( void )
     /* 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);
index 04c0e5f425d10170ea58003afc0f2d2b94b263c0..a387d1643b066fdac1ed98becae692f5e13422a2 100644 (file)
@@ -10,7 +10,7 @@
 #include "extern.h"
 
 
-short testHEATSEEKER ( void )
+int16_t         testHEATSEEKER ( void )
 {
   int nbr_notes=0;
 
@@ -176,13 +176,13 @@ void Rip_HEATSEEKER ( void )
 
 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 )
@@ -190,11 +190,11 @@ void Depack_HEATSEEKER ( void )
 
   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 );
 
diff --git a/prowizard/rippers/HighPresCr.c b/prowizard/rippers/HighPresCr.c
new file mode 100644 (file)
index 0000000..a7718aa
--- /dev/null
@@ -0,0 +1,127 @@
+/* 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
index 86febf4c3fb7d6e9f4bafff9811b1ff4bd58031a..e774b1e9a2ee20ad7c56a4c8ed102a1f1bdd1d09 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testHRT ( void )
+int16_t         testHRT ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -67,12 +67,12 @@ void Rip_HRT ( void )
 
 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 )
@@ -80,11 +80,11 @@ void Depack_HRT ( void )
 
   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++];
diff --git a/prowizard/rippers/IFF.c b/prowizard/rippers/IFF.c
new file mode 100644 (file)
index 0000000..cf798d3
--- /dev/null
@@ -0,0 +1,85 @@
+/* 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
diff --git a/prowizard/rippers/IT.c b/prowizard/rippers/IT.c
new file mode 100644 (file)
index 0000000..de4a1a9
--- /dev/null
@@ -0,0 +1,182 @@
+/* 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
index 1943f9bd133599ce3fb1df0f6f3cf273408ab382..7749b70d7d9ebdce16543acffe0233819290058e 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testJamCracker ( void )
+int16_t         testJamCracker ( void )
 {
   PW_Start_Address = PW_i;
 
index f1e3827ad9aa891bcf70d4bd4eb6f0318970b0b3..aea811ae2cc308c27669625b47ff40bf750563a5 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testKSM ( void )
+int16_t         testKSM ( void )
 {
   PW_Start_Address = PW_i;
   if ( (PW_Start_Address + 1536) > PW_in_size)
@@ -99,23 +99,23 @@ void Rip_KSM ( void )
 
 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 )
@@ -126,11 +126,11 @@ void Depack_KSM ( void )
 
   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 */
@@ -192,8 +192,8 @@ void Depack_KSM ( void )
       /* 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 );
     }
index 018a9458a359f7dc9b0f940ec04a30ac83d819eb..ec2e15f4eb94b973ef280b0189a9a6c0f680e886 100644 (file)
@@ -6,7 +6,7 @@
 
 
 /* valid for MMD0 & MMD1 */
-short testMMD0 ( void )
+int16_t         testMMD0 ( void )
 {
   PW_Start_Address = PW_i;
   if ( (PW_Start_Address + 52) > PW_in_size )
index 7fa7ee15c71868b1a65f448c1082903988dac3c8..375d67be099096c5ec02e493642f3eab0c9d42d2 100644 (file)
@@ -12,7 +12,7 @@
 #include "extern.h"
 
 
-short testMOD ( int nbrchannels )
+int16_t         testMOD ( int nbrchannels )
 {
   /* test 1 */
   if ( PW_i < 1080 )
index d74cfe84ce819bc8acb08b2f1941286a6bb58af2..6eef700162d4843fcf8cfc7e27255f23c4560121 100644 (file)
@@ -4,7 +4,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testMasterCruncher30addr ( void )
+int16_t         testMasterCruncher30addr ( void )
 {
 
   PW_Start_Address = PW_i;
@@ -82,7 +82,7 @@ void Rip_MasterCruncher30addr ( void )
 {
   /* PW_l is still the whole size */
 
-  Uchar * Amiga_EXE_Header_Block;
+  uint8_t * Amiga_EXE_Header_Block;
 
   OutputSize = PW_l;
 
@@ -91,7 +91,7 @@ void Rip_MasterCruncher30addr ( void )
   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;
index 66a0e265f96307229ed7b936177ba10ab057444a..8a8b5da77e97e3b6cc0aad7d201e017b175d172b 100644 (file)
@@ -7,7 +7,7 @@
 
 
 
-short testMaxPacker12 ( void )
+int16_t         testMaxPacker12 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -85,8 +85,8 @@ void Rip_MaxPacker12 ( 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;
 
@@ -95,7 +95,7 @@ void Rip_MaxPacker12 ( void )
   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;
@@ -107,7 +107,7 @@ void Rip_MaxPacker12 ( void )
     /* 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);
index 9ac929b65e34478677f60eab4e2e325dcf2eb1c6..c0640d58e511d773343bfcaba7ca6cb737adabb4 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testMegaCruncherObj ( void )
+int16_t         testMegaCruncherObj ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -81,8 +81,8 @@ void Rip_MegaCruncherObj ( 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;
 
@@ -91,7 +91,7 @@ void Rip_MegaCruncherObj ( void )
   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;
@@ -105,7 +105,7 @@ void Rip_MegaCruncherObj ( void )
     /* 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);
index cb32efdc5e559f68b665aa8d60f80c5935deb59a..f91bd682fab12d5d9f6b41020e8999757da7596b 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testMegaCruncher10 ( void )
+int16_t         testMegaCruncher10 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -73,7 +73,7 @@ short testMegaCruncher10 ( void )
 }
 
 
-short testMegaCruncher12 ( void )
+int16_t         testMegaCruncher12 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -145,8 +145,8 @@ void Rip_MegaCruncher ( 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;
 
@@ -155,7 +155,7 @@ void Rip_MegaCruncher ( void )
   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;
@@ -169,7 +169,7 @@ void Rip_MegaCruncher ( void )
     /* 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);
index 39e4589fc06450d7cc0f502b22c9a19b1ff93dde..4b64cd5f8cedcbe6af2d77e5ed7bbe04032d9eb5 100644 (file)
 #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))
   {
@@ -34,7 +36,7 @@ short testMP_noID ( void )
 
     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; 
     }
   }
@@ -61,15 +63,14 @@ short testMP_noID ( void )
       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;
 
@@ -84,9 +85,14 @@ short testMP_noID ( void )
   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;
@@ -97,16 +103,19 @@ short testMP_noID ( void )
       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;
   }
 
@@ -118,7 +127,7 @@ short testMP_noID ( void )
           +(((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;
     }
   }
@@ -127,7 +136,7 @@ short testMP_noID ( void )
 }
 
 
-short testMP_withID ( void )
+int16_t         testMP_withID ( void )
 {
   /* test #1 */
   PW_Start_Address = PW_i;
@@ -249,61 +258,68 @@ void Rip_MP_withID ( void )
  * 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) )
@@ -312,13 +328,12 @@ void Depack_MP ( void )
     /*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 );
 
index 954c396b390b6c023022e7884717eab3141055ae..732d780c3a82ae3f303cb1cdb261a12f1737cc87 100644 (file)
@@ -4,7 +4,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testMUGICIAN ( void )
+int16_t         testMUGICIAN ( void )
 {
   if ( PW_i<2 )
   {
index d58d572881f6abb5faa95b9f18ea2a7dd8439862..5f30d6d50609655a4d8f4626264362b7b7cc88ab 100644 (file)
@@ -5,7 +5,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testNoisepacker3 ( void )
+int16_t         testNoisepacker3 ( void )
 {
   if ( PW_i < 9 )
   {
@@ -210,30 +210,33 @@ void Rip_Noisepacker3 ( void )
 */
 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 */
@@ -241,7 +244,7 @@ void Depack_Noisepacker3 ( void )
   /*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 );*/
 
@@ -335,6 +338,7 @@ void Depack_Noisepacker3 ( void )
   /* 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++ )
     {
@@ -352,10 +356,14 @@ void Depack_Noisepacker3 ( void )
         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;
@@ -392,6 +400,7 @@ void Depack_Noisepacker3 ( void )
         }
         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 */
       }
@@ -411,6 +420,7 @@ void Depack_Noisepacker3 ( void )
 
   Crap ( "  NoisePacker v3  " , BAD , BAD , out );
 
+/*  fclose (DEBUG);*/
   fclose ( out );
 
   printf ( "done\n" );
index 38ac7d4a1a589f4c37d21c491bfd65bb080efc21..9a9a361a0d3baa2d86e25ed10d6a08d91e46ee13 100644 (file)
@@ -10,7 +10,7 @@
 #include "extern.h"
 
 
-short testNewtron ( void )
+int16_t         testNewtron ( void )
 {
   /* test #1 */
   if ( (PW_i < 7) || ((PW_i+373+1024+2)>PW_in_size))
@@ -134,19 +134,19 @@ void Rip_Newtron ( void )
 
 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 */
index a8d7eef0bb3014aa5bf8de0cf97bce9a7cdad63f..7393c97fdc2d19e65226cb23b4bc327be62bb3f3 100644 (file)
@@ -1,5 +1,44 @@
 /*
  * 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() */
@@ -9,8 +48,10 @@
 #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))
@@ -25,10 +66,10 @@ short testNewtronOld ( void )
     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 */
@@ -56,7 +97,7 @@ short testNewtronOld ( void )
     return BAD;
   }
 
-  /* test #4 */
+  /* test #4 - patternlist size */
   PW_l = in_data[PW_Start_Address+3];
   if ( (PW_l > 0x7f) || (PW_l == 0x00) )
   {
@@ -102,12 +143,18 @@ short testNewtronOld ( void )
   /* 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;
@@ -145,30 +192,30 @@ void Rip_NewtronOld ( void )
  *
  * 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;
@@ -179,41 +226,44 @@ void Depack_NewtronOld ( void )
   
   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;
index 15d471aa76c0909ecc6375d3e47c39b13a881090..84359dcba7c133bf4da34f655c3fac272417a06f 100644 (file)
@@ -8,7 +8,7 @@
 
 /* Noise from Heaven Chipdisk (21 oct 2001) by Iris */
 
-short testNFH ( void )
+int16_t         testNFH ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -119,12 +119,12 @@ void Rip_NFH ( void )
 */
 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);
@@ -132,7 +132,7 @@ void Depack_NFH ( void )
   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 */
@@ -148,7 +148,7 @@ void Depack_NFH ( void )
   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';
index 5a3396b81d6a1fe69f955e605aff4202c3b198eb..1518eb40b277e4a21d2a7c11c6e8afb2dcbe2840 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testNoisepacker1 ( void )
+int16_t         testNoisepacker1 ( void )
 {
   if ( PW_i < 15 )
   {
@@ -170,19 +170,19 @@ void Rip_Noisepacker1 ( void )
 */
 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 )
@@ -192,11 +192,11 @@ void Depack_Noisepacker1 ( void )
 
   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;
index 3243d04dc318dcc2eac20ddbfaa22dce5068eed2..37b34f9bb8ddc5b7829793058334e7b09996f7e3 100644 (file)
@@ -5,7 +5,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testNoisepacker2 ( void )
+int16_t         testNoisepacker2 ( void )
 {
   if ( PW_i < 15 )
   {
@@ -88,7 +88,7 @@ short testNoisepacker2 ( void )
   /* 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;
   }
 
@@ -114,7 +114,7 @@ short testNoisepacker2 ( void )
   /* 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;
   }
 
@@ -132,7 +132,7 @@ short testNoisepacker2 ( void )
   {
     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 )
@@ -143,7 +143,7 @@ short testNoisepacker2 ( void )
     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);
@@ -187,20 +187,20 @@ void Rip_Noisepacker2 ( void )
 */
 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 )
@@ -210,7 +210,7 @@ void Depack_Noisepacker2 ( void )
 
   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 */
@@ -218,7 +218,7 @@ void Depack_Noisepacker2 ( void )
   /*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 );
 
@@ -271,6 +271,8 @@ void Depack_Noisepacker2 ( void )
 
   /* 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;
index f292b9cc0b68dd8845d462d7c922d81f0a415947..1bd1cf37956277a8b9f9fb15ae121f55a1bec77c 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testNoiserunner ( void )
+int16_t         testNoiserunner ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -135,13 +135,13 @@ void Rip_Noiserunner ( void )
 
 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 )
@@ -149,10 +149,10 @@ void Depack_Noiserunner ( void )
 
   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 */
@@ -233,8 +233,8 @@ void Depack_Noiserunner ( void )
     /* 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 */
index 5081767ec3415efaf03b63d68e64da06c3b2e4a9..b889189536f336b9093f1f91386060786a801243 100644 (file)
-/* (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
diff --git a/prowizard/rippers/Perfsong.c b/prowizard/rippers/Perfsong.c
new file mode 100644 (file)
index 0000000..053fe60
--- /dev/null
@@ -0,0 +1,342 @@
+/* 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
index 6c3e0bcc62867f67ca0715a046f480daa27f8768..661a2651ac485b41fcbb2d0b56427ebbb5504ee2 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testPHA ( void )
+int16_t         testPHA ( void )
 {
   /* test #1 */
   if ( PW_i < 11 )
@@ -141,23 +141,23 @@ void Rip_PHA ( void )
 */
 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 )
@@ -168,16 +168,16 @@ void Depack_PHA ( void )
   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 );
@@ -190,7 +190,7 @@ void Depack_PHA ( void )
     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 */
@@ -223,11 +223,11 @@ void Depack_PHA ( void )
   /* 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 );
 
 
index ba63fae9a7e3ade1b8cf4880da327212b296a373..5c45ae53088a16006e2b7ddfb4b3be060065a2ab 100644 (file)
@@ -10,7 +10,7 @@
 #include "extern.h"
 
 
-short testPolka ( void )
+int16_t         testPolka ( void )
 {
   /* test #1 */
   if ( (PW_i < 0x438) || ((PW_i+0x830)>PW_in_size))
@@ -117,12 +117,12 @@ void Rip_Polka ( void )
 
 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];
 
@@ -131,7 +131,7 @@ void Depack_Polka ( void )
 
   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 */
index 1da5f6377471838ef655112320de4fdcca68d202..5ba981eb1b2b0057db16e7a0c43df67a9430ad53 100644 (file)
@@ -10,7 +10,7 @@
 
 
 /* Power Music */
-short testPM ( void )
+int16_t         testPM ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -80,17 +80,17 @@ void Rip_PM ( void )
 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 */
index 337ce95ab35c7199f29dac85e4ed8da69daff53c..db80ede4a7b7f551d581d1b5ad46ad988482c8aa 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testPowerpacker23 ( void )
+int16_t         testPowerpacker23 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -81,7 +81,7 @@ void Rip_Powerpacker23 ( void )
   /* PW_l is still the whole size */
 
 
-  Uchar * Amiga_EXE_Header_Block;
+  uint8_t * Amiga_EXE_Header_Block;
 
   OutputSize = PW_l;
 
@@ -90,7 +90,7 @@ void Rip_Powerpacker23 ( void )
   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;
index 3adf3d716b08b438ce6ee9a498f70502fd4fb9a1..16317472e5d38e796f3aa8f771d938df7770031f 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testPowerpacker30 ( void )
+int16_t         testPowerpacker30 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -80,7 +80,7 @@ void Rip_Powerpacker30 ( void )
   /* PW_l is still the whole size */
 
 
-  Uchar * Amiga_EXE_Header_Block;
+  uint8_t * Amiga_EXE_Header_Block;
 
   OutputSize = PW_l;
 
@@ -89,7 +89,7 @@ void Rip_Powerpacker30 ( void )
   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;
index 8732e957cf13a1a9eb2344622c52048468de1d15..e510aa3bebb0d4f25adb3064c99c4747c94c82df 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testPowerpacker4lib ( void )
+int16_t         testPowerpacker4lib ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -80,8 +80,8 @@ void Rip_Powerpacker4lib ( 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;
 
@@ -90,7 +90,7 @@ void Rip_Powerpacker4lib ( void )
   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;
@@ -104,7 +104,7 @@ void Rip_Powerpacker4lib ( void )
     /* 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);
index 4aab0abfa6fc8a464bc173f196590f42f35ec144..dec037893cc1a2bb718d9f27761811c517415f37 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testPowerpacker40 ( void )
+int16_t         testPowerpacker40 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -93,7 +93,7 @@ void Rip_Powerpacker40 ( void )
   /* PW_l is still the whole size */
 
 
-  Uchar * Amiga_EXE_Header_Block;
+  uint8_t * Amiga_EXE_Header_Block;
 
   OutputSize = PW_l;
 
@@ -102,7 +102,7 @@ void Rip_Powerpacker40 ( void )
   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;
index 6d2bfc7782788370aa7ccfe703f11127f719c050..dda7d83833d29bbf07509ee111b721b79227dcbb 100644 (file)
@@ -6,8 +6,11 @@
 #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))
@@ -25,6 +28,7 @@ short testPP10 ( void )
   }
 
   /* test #2 */
+  /* various test about sample headers */
   PW_WholeSampleSize = 0;
   for ( PW_j=0 ; PW_j<31 ; PW_j++ )
   {
@@ -79,6 +83,7 @@ short testPP10 ( void )
     }
   }
 
+  /* test if sample data is too small */
   if ( PW_WholeSampleSize <= 2 )
   {
 /*printf ( "#2,4 (start:%ld)\n" , PW_Start_Address );*/
@@ -87,25 +92,37 @@ short testPP10 ( void )
   /* 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 );*/
@@ -114,10 +131,15 @@ short testPP10 ( void )
   /* 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))
@@ -153,7 +175,7 @@ void Rip_PP10 ( void )
   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" :) */
 }
 
 
@@ -176,22 +198,22 @@ void Rip_PP10 ( void )
 
 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 );
 
@@ -273,8 +295,6 @@ void Depack_PP10 ( void )
     j--;
     l++;
   }
-  if ( l != Header[950] )
-    l -= 1;
 
 
   /* write ptk's ID */
@@ -300,13 +320,13 @@ void Depack_PP10 ( void )
     }
     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];
index aa7f4cfa12092c448c14c3c0346f4bb946499e70..eb1a4f157b28e1a16a424168a698e9725a6423b4 100644 (file)
 #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;
@@ -119,7 +124,7 @@ void Rip_PP21 ( void )
   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" :) */
 }
 
 
@@ -146,13 +151,13 @@ void Rip_PP21 ( void )
 
 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;*/
 
@@ -160,12 +165,12 @@ void Depack_PP21 ( void )
     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 );
 
@@ -195,7 +200,7 @@ void Depack_PP21 ( void )
   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) +
@@ -287,13 +292,13 @@ void Depack_PP21 ( void )
     }
     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)];
index 8ba5aa4827174cf50a403f2cd1fa56adb032bdff..0b3607cf950ff24e52c279026b426dafe47ae57d 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testPP30 ( void )
+int16_t         testPP30 ( void )
 {
   /* test #1 */
   if ( (PW_i < 3) || ((PW_i+891)>=PW_in_size))
@@ -158,7 +158,7 @@ void Rip_PP30 ( void )
   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" :) */
 }
 
 
@@ -183,24 +183,24 @@ void Rip_PP30 ( void )
 
 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 );
 
@@ -308,13 +308,13 @@ void Depack_PP30 ( void )
     }
     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];
index db70b5898d3eca7757354001a8ed83f15470d199..1b39ce88e30dac95e0d7eebe8e2f036fa442dc0e 100644 (file)
@@ -12,7 +12,7 @@ bugfix : test #5 was fake since first pat addy can be != $00000000
 #include "extern.h"
 
 
-short testPM01 ( void )
+int16_t         testPM01 ( void )
 {
   /* test #1 */
   if ( (PW_i < 3) || ((PW_Start_Address + 766)>PW_in_size) )
@@ -163,17 +163,17 @@ void Rip_PM01 ( void )
 */
 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"
@@ -186,11 +186,11 @@ void Depack_PM01 ( void )
   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 );
@@ -261,8 +261,8 @@ void Depack_PM01 ( void )
 
   /* 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 )
index 199cd962b35297856df8e3b9b5858b10fe89389f..c8197c51694592cd8ea1e08d6cbc2674e36faaea 100644 (file)
@@ -7,7 +7,7 @@
 
 
 
-short testPM10c ( void )
+int16_t         testPM10c ( void )
 {
   /* test 1 */
   if ( (PW_Start_Address + 4452) > PW_in_size )
@@ -78,7 +78,10 @@ void Rip_PM10c ( void )
  *
  * 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
@@ -88,25 +91,25 @@ void Rip_PM10c ( void )
 
 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"
@@ -120,15 +123,14 @@ void Depack_PM10c ( void )
   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;
@@ -136,9 +138,16 @@ void Depack_PM10c ( void )
   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 */
@@ -165,7 +174,7 @@ void Depack_PM10c ( void )
   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 )
   {
@@ -180,8 +189,8 @@ void Depack_PM10c ( void )
 
   /* 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];
 
@@ -189,7 +198,7 @@ void Depack_PM10c ( void )
 
   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 )
@@ -251,30 +260,38 @@ void Depack_PM10c ( void )
   /* 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 );
 
index 5ad64b78763a42d2edc28af61193936a8e8ef470..8919d04708639c70935cb11c1dff1462f3239951 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testPMZ ( void )
+int16_t         testPMZ ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -17,10 +17,10 @@ short testPMZ ( void )
   }
 
   /* 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];
@@ -81,7 +81,7 @@ void Rip_PM18a ( void )
  *
  * 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
@@ -92,28 +92,28 @@ void Rip_PM18a ( void )
 
 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);
@@ -121,14 +121,14 @@ void Depack_PM18a ( void )
   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 );*/
@@ -161,7 +161,7 @@ void Depack_PM18a ( void )
   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;*/
@@ -177,17 +177,22 @@ void Depack_PM18a ( void )
     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 )
   {
@@ -197,19 +202,30 @@ void Depack_PM18a ( void )
       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 )
   {
@@ -217,6 +233,7 @@ void Depack_PM18a ( void )
     {
       Read_Pats_Address[c1] = j;
       /*fprintf ( info, " -> new pattern %2d (addy :%ld)\n", c1, j+5226 );*/
+      fflush (stdout);
       c1 += 0x01;
     }
 
@@ -226,7 +243,7 @@ void Depack_PM18a ( void )
     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 )
@@ -272,7 +289,7 @@ void Depack_PM18a ( void )
   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;
index 8b37c5dcc334005d6c6d1d8e99912b5b33fe738c..83c68a46ebf64988a31cb71f99a5e89041e56afb 100644 (file)
@@ -1,5 +1,4 @@
 
-
 /* testPM2() */
 /* Rip_PM20() */
 /* Depack_PM20() */
@@ -8,7 +7,7 @@
 #include "extern.h"
 
 
-short testPM2 ( void )
+int16_t         testPM2 ( void )
 {
   PW_Start_Address = PW_i;
   /* test 1 */
@@ -82,22 +81,22 @@ void Rip_PM20 ( void )
 
 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 )
@@ -105,14 +104,14 @@ void Depack_PM20 ( void )
 
   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 */
@@ -151,7 +150,7 @@ void Depack_PM20 ( void )
   {
     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 */
@@ -196,7 +195,7 @@ void Depack_PM20 ( void )
   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 )
   {
@@ -212,8 +211,8 @@ void Depack_PM20 ( void )
   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];
 
@@ -222,7 +221,7 @@ void Depack_PM20 ( void )
 
 
   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 */
index 14c65930edd0410a459ffd6a461b760235eedcc7..b4aae2dd2d218f1f5f0e934a206cd74dfa0a84c4 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testPM40 ( void )
+int16_t         testPM40 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -70,7 +70,7 @@ void Rip_PM40 ( void )
   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" :) */
 }
 
 
@@ -81,6 +81,8 @@ void Rip_PM40 ( void )
  *
  * Converts PM40 packed MODs back to PTK MODs
  *
+ * 20100112 - complete rewrite
+ *
 */
 
 #define ON  0
@@ -92,371 +94,175 @@ void Rip_PM40 ( void )
 
 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 */
index b406188d014e077e6101e57bb765666c439a8ed9..5fbbae5dafaa9da1fdd4ea37953594b93f839c4c 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testPRUN1 ( void )
+int16_t         testPRUN1 ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -27,6 +27,26 @@ short testPRUN1 ( void )
   {
     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;
 }
 
@@ -34,9 +54,6 @@ short testPRUN1 ( void )
 
 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 )
@@ -48,7 +65,7 @@ void Rip_PRUN1 ( void )
   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 */
 }
 
 
@@ -64,12 +81,12 @@ void Rip_PRUN1 ( void )
 */
 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);
@@ -77,7 +94,7 @@ void Depack_PRUN1 ( void )
   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 */
@@ -96,7 +113,7 @@ void Depack_PRUN1 ( void )
   Where += 952;
 
   /* write ID */
-  Whatever = (Uchar *) malloc (4);
+  Whatever = (uint8_t *) malloc (4);
   Whatever[0] = 'M';
   Whatever[1] = '.';
   Whatever[2] = 'K';
index a1ee420dd63d3cb971607468b2cdd658ad4fd82a..420be88ed5e9bd720f6a606971fc836d1d22116f 100644 (file)
@@ -6,7 +6,7 @@
 #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];
@@ -52,7 +52,7 @@ void Rip_PRUN2 ( void )
   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" :) */
 }
 
 
@@ -69,7 +69,7 @@ void Rip_PRUN2 ( void )
  *
  * 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 !.
@@ -78,12 +78,12 @@ void Rip_PRUN2 ( void )
 
 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);
@@ -91,10 +91,10 @@ void Depack_PRUN2 ( void )
   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 );
index 94fc7af3e2bf4eff2c47a5a34bbeea416d073c94..dea820d61880e1f4d4b4d634fe098425437ba9c4 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testQuadraComposer ( void )
+int16_t         testQuadraComposer ( void )
 {
   /* test #1 */
   if ( PW_i < 8 )
@@ -69,22 +69,22 @@ void Rip_QuadraComposer ( void )
 */
 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 )
@@ -92,7 +92,7 @@ void Depack_QuadraComposer ( void )
 
   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" );
 
 
@@ -123,7 +123,7 @@ void Depack_QuadraComposer ( void )
   /*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++ )
index 911b3ec9084823c6e0c9628f4762431a243870ef..265738bbaa7dd3d447bf71d43f845967cc9b14d3 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testRelokIt10 ( void )
+int16_t         testRelokIt10 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -77,8 +77,8 @@ void Rip_RelokIt10 ( 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;
 
@@ -87,7 +87,7 @@ void Rip_RelokIt10 ( void )
   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;
@@ -101,7 +101,7 @@ void Rip_RelokIt10 ( void )
     /* 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);
diff --git a/prowizard/rippers/S3M.c b/prowizard/rippers/S3M.c
new file mode 100644 (file)
index 0000000..ea2ebb1
--- /dev/null
@@ -0,0 +1,130 @@
+/* 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
diff --git a/prowizard/rippers/SA.c b/prowizard/rippers/SA.c
new file mode 100644 (file)
index 0000000..42ccafd
--- /dev/null
@@ -0,0 +1,369 @@
+/*\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
index 2736111250cb04405e8bcb82e432eda744c2b877..abac92a2179a96fa6214effddec73433cd061525 100644 (file)
@@ -11,7 +11,7 @@
 #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) )
@@ -72,25 +72,25 @@ void Rip_SGT ( void )
 
 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);
@@ -117,7 +117,7 @@ void Depack_SGT ( void )
 
 /*  debug = fopen ( "debug" , "w+b" );*/
 
-  Whatever = (Uchar *) malloc (1024);
+  Whatever = (uint8_t *) malloc (1024);
   BZERO (Whatever , 1024);
   /* title */
   fwrite ( &Whatever[0] , 20 , 1 , out );
@@ -144,7 +144,6 @@ void Depack_SGT ( void )
     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;
@@ -152,20 +151,17 @@ void Depack_SGT ( void )
     /* 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);
@@ -189,7 +185,7 @@ void Depack_SGT ( void )
   {
     /* 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);
index 30224247e06d215fa9c003626d7e7624f077f8ba..945b131000f45c5afa16b5556734216cb800d798 100644 (file)
@@ -14,7 +14,7 @@
 #include "extern.h"
 
 
-short testSKYT ( void )
+int16_t         testSKYT ( void )
 {
   /* test 1 */
   if ( PW_i < 256 )
@@ -89,13 +89,13 @@ void Rip_SKYT ( void )
 
 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);
@@ -103,11 +103,11 @@ void Depack_SKYT ( void )
   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 );
 
@@ -205,7 +205,6 @@ void Depack_SKYT ( void )
   /* 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++)
@@ -215,7 +214,7 @@ void Depack_SKYT ( void )
     }
     for (k=0;k<4;k++) /* loop on 4 tracks' refs*/
     {
-      long d;
+      int32_t d;
 
       /* empty track */
       if (ReadTrkPat[j][k] == 0xffffffff)
diff --git a/prowizard/rippers/SlamPacker.c b/prowizard/rippers/SlamPacker.c
new file mode 100644 (file)
index 0000000..b5a0ded
--- /dev/null
@@ -0,0 +1,283 @@
+/* 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
index 316685946d51d86c13bbc1950fc4085fc76de473..2c8dbb8331d762a43e0db1b68adab55da5533ada 100644 (file)
@@ -6,7 +6,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testSoundFX13 ( void )
+int16_t         testSoundFX13 ( void )
 {
   /* test 1 */
   if ( PW_i < 0x3C )
@@ -157,23 +157,23 @@ void Rip_SoundFX13 ( void )
 
 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 );
@@ -225,7 +225,7 @@ void Depack_SoundFX13 ( void )
     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++ )
@@ -269,7 +269,7 @@ void Depack_SoundFX13 ( void )
 
   /* pattern data */
   fseek ( in , 0x294 , 0 );
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   for ( i=0 ; i<=Max ; i++ )
   {
     BZERO ( Whatever , 1024 );
@@ -330,7 +330,7 @@ void Depack_SoundFX13 ( void )
 
 
   /* sample data */
-  Whatever = (Uchar *) malloc ( WholeSampleSize );
+  Whatever = (uint8_t *) malloc ( WholeSampleSize );
   BZERO ( Whatever , WholeSampleSize );
   fread ( Whatever , WholeSampleSize , 1 , in );
   fwrite ( Whatever , WholeSampleSize , 1 , out );
index 9d6c2a022910b506efcb2fd9d1ce62498d7ccb18..3846b3fd88a8b35b2f65f176fe57fac5737f201b 100644 (file)
@@ -5,7 +5,10 @@
 #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 ? */
@@ -24,9 +27,9 @@ short testSoundTracker ( void )
     /* 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;
 
@@ -44,7 +47,7 @@ short testSoundTracker ( void )
       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 );*/
@@ -94,8 +97,9 @@ short testSoundTracker ( void )
     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];
@@ -106,17 +110,6 @@ short testSoundTracker ( void )
     }
   }
   /* 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;
 
@@ -129,18 +122,29 @@ short testSoundTracker ( void )
   }
   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;                                         
index 5986c62ba4c1e41afe309622f4296395ea271fa0..8d19a5afe1aca8d69ebf12d5756815afaab875b9 100644 (file)
@@ -9,7 +9,7 @@
 
 
 /* Soundtracker 2.6 & IceTracker 1.0 */
-short testSTK26 ( void )
+int16_t         testSTK26 ( void )
 {
   /* test 1 */
   if ( PW_i < 1464 )
@@ -79,16 +79,16 @@ void Rip_STK26 ( void )
 */
 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" );
 
 
@@ -101,7 +101,7 @@ void Depack_STK26 ( void )
   /*  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 )
index 69a1e702c44ef01737bf880a07ffbd94e64d0a77..c5e74d4c345cfff90e7ade58be6c2712ccc5be1f 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testSpikeCruncher ( void )
+int16_t         testSpikeCruncher ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -81,7 +81,7 @@ void Rip_SpikeCruncher ( void )
   /* PW_l is still the whole size */
 
 
-  Uchar * Amiga_EXE_Header_Block;
+  uint8_t * Amiga_EXE_Header_Block;
 
   OutputSize = PW_l;
 
@@ -90,7 +90,7 @@ void Rip_SpikeCruncher ( void )
   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;
index fa16dbf84075b20b578bd99d27eeefad8479a916..f483cea63319ac1bdeef86c011d2075a7e28b339 100644 (file)
@@ -11,7 +11,7 @@
 #include "extern.h"
 
 
-short testSTARPACK ( void )
+int16_t         testSTARPACK ( void )
 {
   /* test 1 */
   if ( (PW_i < 23) || ((PW_i+269-23)>=PW_in_size) )
@@ -29,7 +29,7 @@ short testSTARPACK ( void )
 /*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;
@@ -205,17 +205,17 @@ void Rip_STARPACK ( void )
 */
 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 )
@@ -223,11 +223,11 @@ void Depack_STARPACK ( void )
 
   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 */
@@ -281,7 +281,7 @@ void Depack_STARPACK ( void )
 
   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 )
@@ -320,7 +320,7 @@ void Depack_STARPACK ( void )
     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 );
index eda25009d435c45edda903887f3d9242475b7f76..5f4c7c2780b47b62eb52335064f2c66523d636c6 100644 (file)
@@ -4,13 +4,13 @@
 
 
 /* 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;
 
@@ -107,19 +107,19 @@ void Rip_STIM ( void )
 
 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 )
@@ -131,11 +131,11 @@ void Depack_STIM ( void )
   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 );
 
index ceb6a2b8aa1adc776ae2c60ccbf71f26077f6c78..14019f25fff64542979f4ac662412ddbd61ee10b 100644 (file)
-/* 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
index 4ec78521ba030c584131e5ec0d9cfa9c69aa15a6..116eeda8cb398db6bc92ff741d35de55ceadd5c1 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testStoneCracker270 ( void )
+int16_t         testStoneCracker270 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -83,8 +83,8 @@ void Rip_StoneCracker270 ( 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;
 
@@ -93,7 +93,7 @@ void Rip_StoneCracker270 ( void )
   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;
@@ -105,7 +105,7 @@ void Rip_StoneCracker270 ( void )
     /* 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);
index 4300ec143e61b76f18787902bb69a69d8be00d3e..b0786f04b1e549d5608ad687f7092affb27cb907 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testSTC299 ( void )
+int16_t         testSTC299 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -81,8 +81,8 @@ void Rip_STC299 ( 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;
 
@@ -91,7 +91,7 @@ void Rip_STC299 ( void )
   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;
@@ -103,7 +103,7 @@ void Rip_STC299 ( void )
     /* 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);
index b8fe468ec1108bae9347efcba42230d922e5ffa7..e42031a8e3e66fb53f8c6af8882127b19cb8c8ac 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testSTC299b ( void )
+int16_t         testSTC299b ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -80,8 +80,8 @@ void Rip_STC299b ( 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;
 
@@ -90,7 +90,7 @@ void Rip_STC299b ( void )
   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;
@@ -102,7 +102,7 @@ void Rip_STC299b ( void )
     /* 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);
index 981d9c6b1f7d2a48aada7cbabb063187b8126b61..da936274c865fec10afd25cef0c133f3e35e41ab 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testSTC299d ( void )
+int16_t         testSTC299d ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -80,8 +80,8 @@ void Rip_STC299d ( 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;
 
@@ -90,7 +90,7 @@ void Rip_STC299d ( void )
   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;
@@ -102,7 +102,7 @@ void Rip_STC299d ( void )
     /* 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);
index bbbc41b4a2d7a788cff2067f779c420dc19cd46a..3e0564762ebd9d8c6a1b49260809d001b8327cbe 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testSTC300 ( void )
+int16_t         testSTC300 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -81,8 +81,8 @@ void Rip_STC300 ( 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;
 
@@ -91,7 +91,7 @@ void Rip_STC300 ( void )
   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;
@@ -103,7 +103,7 @@ void Rip_STC300 ( void )
     /* 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);
index 6fe800f171bae2b1870b59644341fe74fc701cba..43643054f171c2b3b48f50246a05f01c97dd5d75 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testSTC310 ( void )
+int16_t         testSTC310 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -79,8 +79,8 @@ void Rip_STC310 ( 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;
 
@@ -89,7 +89,7 @@ void Rip_STC310 ( void )
   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;
@@ -101,7 +101,7 @@ void Rip_STC310 ( void )
     /* 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);
index 5cc235f528fb674dd4632331eeebdcb42b8c2cba..a9d8bd6f5c2c86a04f563ebda9f2f0efb19e2c75 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testSuperCruncher27 ( void )
+int16_t         testSuperCruncher27 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -80,7 +80,7 @@ void Rip_SuperCruncher27 ( void )
 {
   /* PW_l is still the whole size */
 
-  Uchar * Amiga_EXE_Header_Block;
+  uint8_t * Amiga_EXE_Header_Block;
 
   OutputSize = PW_l;
 
@@ -89,7 +89,7 @@ void Rip_SuperCruncher27 ( void )
   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;
index 15a7f95c2c6742dd2e622b2d1454570106f08315..0efbed6543ef2d8d2c9c1e152155ebeb50875664 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testSyncroPacker ( void )
+int16_t         testSyncroPacker ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -49,7 +49,7 @@ short testSyncroPacker ( void )
 
   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;
     
   }
@@ -93,8 +93,8 @@ void Rip_SyncroPacker ( 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;
 
@@ -103,7 +103,7 @@ void Rip_SyncroPacker ( void )
   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;
@@ -115,7 +115,7 @@ void Rip_SyncroPacker ( void )
     /* 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);
diff --git a/prowizard/rippers/THX.c b/prowizard/rippers/THX.c
new file mode 100644 (file)
index 0000000..4a39f31
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * 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 */
+}
+
index 5b692fbd366ea2352ea4a2a5d4ef1e5c20f16c95..a093ecf2390f6dea77fe891f7b6baeb2afd5dd58 100644 (file)
@@ -7,7 +7,7 @@
 
 
 
-short testTMK ( void )
+int16_t         testTMK ( void )
 {
   /* test 1 */
   PW_Start_Address = PW_i;
@@ -120,23 +120,23 @@ void Rip_TMK ( void )
 
 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);
@@ -146,11 +146,11 @@ void Depack_TMK ( void )
 
   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 */
@@ -166,7 +166,7 @@ void Depack_TMK ( void )
   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++ )
@@ -222,7 +222,7 @@ void Depack_TMK ( void )
   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);*/
 
@@ -252,7 +252,7 @@ void Depack_TMK ( void )
   /*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);
@@ -315,7 +315,7 @@ void Depack_TMK ( void )
 
   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++ )
@@ -349,6 +349,5 @@ void Depack_TMK ( void )
   /*fclose ( info );*/
 
   printf ( "done\n" );
-  free( samplesizes );
   return; /* useless ... but */
 }
index c30575253e7f10a991fcaaf4a869e4d426b7058e..fb77768c0de9629fe54ce4ebdcaf4d698d2ad198 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testTNMCruncher11 ( void )
+int16_t         testTNMCruncher11 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -88,8 +88,8 @@ void Rip_TNMCruncher11 ( void )
   /* 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;
 
@@ -98,7 +98,7 @@ void Rip_TNMCruncher11 ( void )
   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;
@@ -112,13 +112,13 @@ void Rip_TNMCruncher11 ( void )
     /* 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);
index 6d8e41953211e77365cff8026bb178bc2ff548c5..e420aaea488cdcc9b61811a85b1132fe5abaf457 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testTetrapack102 ( void )
+int16_t         testTetrapack102 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -71,14 +71,77 @@ short testTetrapack102 ( void )
 }
 
 
+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;
 
@@ -87,7 +150,7 @@ void Rip_Tetrapack102 ( void )
   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;
@@ -99,7 +162,7 @@ void Rip_Tetrapack102 ( void )
     /* 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);
@@ -116,3 +179,47 @@ void Rip_Tetrapack102 ( void )
   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;
+}
index 70f48413c77d584bd2d9915c1bb1da8dfdd31105..5515cacd6faeea8bcd05222c09244cde9bbf8c24 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testTetrapack_2_1 ( void )
+int16_t         testTetrapack_2_1 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -76,8 +76,8 @@ void Rip_Tetrapack_2_1 ( 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;
 
@@ -86,7 +86,7 @@ void Rip_Tetrapack_2_1 ( void )
   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;
@@ -98,7 +98,7 @@ void Rip_Tetrapack_2_1 ( void )
     /* 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);
@@ -113,5 +113,5 @@ void Rip_Tetrapack_2_1 ( void )
   }
   
   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 */
 }
index 662cb1cdaa1bfb35c2afb6c54f5b5792992e225f..2b50b43b0b8216d5bf12f6f16bc7ad0deda12b06 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testTetrapack_2_2 ( void )
+int16_t         testTetrapack_2_2 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -102,8 +102,8 @@ void Rip_Tetrapack_2_2 ( 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;
 
@@ -112,7 +112,7 @@ void Rip_Tetrapack_2_2 ( void )
   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;
@@ -124,7 +124,7 @@ void Rip_Tetrapack_2_2 ( void )
     /* 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);
@@ -139,5 +139,5 @@ void Rip_Tetrapack_2_2 ( void )
   }
   
   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" :) */
 }
index 35af53b59dc2d05d94ff60d6bfea8602b57b3e80..85486b55d01f92d192ceb817e30b2d91f9a74850 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testTheDarkDemon ( void )
+int16_t         testTheDarkDemon ( void )
 {
   /* test #1 */
   if ( PW_i < 137 )
@@ -43,6 +43,13 @@ short testTheDarkDemon ( void )
     /* 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 )
     {
@@ -217,16 +224,16 @@ void Rip_TheDarkDemon ( void )
 
 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 )
@@ -237,11 +244,11 @@ void Depack_TheDarkDemon ( void )
   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 );
 
@@ -289,8 +296,8 @@ void Depack_TheDarkDemon ( void )
     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 );
index e004d85f795758f8137248135e36188a300f99a1..698f9015d29f977ccb02d786b7eefb5f5f0bbf30 100644 (file)
@@ -55,23 +55,23 @@ void Rip_P22A ( void )
 
 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 )
@@ -84,7 +84,7 @@ void Depack_P22 ( void )
 
   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" );*/
 
@@ -129,7 +129,7 @@ void Depack_P22 ( void )
 
 
   /* write title */
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
@@ -165,8 +165,8 @@ void Depack_P22 ( void )
     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 );
index 436bb99fce718032f21b1c746814a74a146d7f3f..81a30a9638e0c08675470670b7fbe53a735154aa 100644 (file)
@@ -55,23 +55,23 @@ void Rip_P30A ( void )
 */
 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 )
@@ -84,7 +84,7 @@ void Depack_P30 ( void )
 
   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" );*/
@@ -130,7 +130,7 @@ void Depack_P30 ( void )
 
 
   /* write title */
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
@@ -166,8 +166,8 @@ void Depack_P30 ( void )
     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 );
index 2ca9cb18698ab12dc302c49d374c23b7f85637bf..bf4573a6ffa419eba3e7ff4fe0e7576aac554674 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testP40A ( void )
+int16_t         testP40A ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -156,22 +156,22 @@ void Rip_P40B ( void )
 */
 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 )
@@ -184,7 +184,7 @@ void Depack_P40 ( void )
 
   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 */
@@ -228,7 +228,7 @@ void Depack_P40 ( void )
 
 
   /* write title */
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
@@ -264,8 +264,8 @@ void Depack_P40 ( void )
     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 );
@@ -356,8 +356,8 @@ void Depack_P40 ( void )
             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;
@@ -369,7 +369,7 @@ void Depack_P40 ( void )
 
           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-- )
@@ -413,8 +413,8 @@ void Depack_P40 ( void )
               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;
@@ -426,7 +426,7 @@ void Depack_P40 ( void )
 
             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-- )
index 8c132db08291c9d54783771a08f8f43de446661c..996d8dc81d42f724634468093969032a3026ce69 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testP41A ( void )
+int16_t         testP41A ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -70,19 +70,34 @@ short testP41A ( void )
 
 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;
@@ -120,22 +135,22 @@ void Rip_P41A ( void )
 */
 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 )
@@ -148,7 +163,7 @@ void Depack_P41A ( void )
 
   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 */
@@ -190,9 +205,19 @@ void Depack_P41A ( void )
                          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 );
 
@@ -204,7 +229,7 @@ void Depack_P41A ( void )
         (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 );
@@ -217,7 +242,7 @@ void Depack_P41A ( void )
     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 );
@@ -228,8 +253,8 @@ void Depack_P41A ( void )
     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 );
@@ -320,8 +345,8 @@ void Depack_P41A ( void )
             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;
@@ -333,7 +358,7 @@ void Depack_P41A ( void )
 
           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-- )
@@ -377,8 +402,8 @@ void Depack_P41A ( void )
               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;
@@ -390,7 +415,7 @@ void Depack_P41A ( void )
 
             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-- )
index dcd74df4577b5332ad98968aec1397bee1f95d70..dc3c780397d8293834bf8c2bd78f6246db02dbba 100644 (file)
@@ -10,7 +10,7 @@
 #include "extern.h"
 
 
-short testP50A ( void )
+int16_t         testP50A ( void )
 {
   int nbr_notes=0;
   if ( PW_i < 7 )
@@ -35,6 +35,8 @@ short testP50A ( void )
     /*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 );*/
@@ -89,6 +91,13 @@ short testP50A ( void )
       }
     }
   }
+  
+  /* 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];
@@ -276,25 +285,25 @@ void Rip_P50A ( void )
 
 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 )
@@ -308,7 +317,7 @@ void Depack_P50A ( void )
 
   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 */
@@ -329,7 +338,7 @@ void Depack_P50A ( void )
   Nbr_Sample &= 0x3F;
 
   /* write title */
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
@@ -380,8 +389,8 @@ void Depack_P50A ( void )
 
     /* 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 );
 
index 9ce658e0673f98c826113d38ba8a78387d0d428f..35cec5a19a533c52def1aab7cbbee72bb5502f2c 100644 (file)
@@ -8,7 +8,7 @@
 #include "extern.h"
 
 
-short testP60A_nopack ( void )
+int16_t         testP60A_nopack ( void )
 {
   int nbr_notes=0;
   if ( PW_i < 7 )
@@ -205,7 +205,7 @@ short testP60A_nopack ( void )
 /******************/
 /* packed samples */
 /******************/
-short testP60A_pack ( void )
+int16_t         testP60A_pack ( void )
 {
   if ( PW_i < 11 )
   {
@@ -406,7 +406,7 @@ void Rip_P60A ( void )
   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" :) */
 }
 
 
@@ -434,28 +434,28 @@ void Rip_P60A ( void )
 
 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 )
@@ -474,7 +474,7 @@ void Depack_P60A ( void )
 
   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 */
@@ -503,7 +503,7 @@ void Depack_P60A ( void )
   Nbr_Sample &= 0x3F;
 
   /* write title */
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
@@ -517,6 +517,7 @@ void Depack_P60A ( void )
     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];
@@ -531,6 +532,7 @@ void Depack_P60A ( void )
       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 );
@@ -561,8 +563,8 @@ void Depack_P60A ( void )
 
     /* 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 );
 
index 8ad3f95d62ac8490ce247705322450725388faf3..360967ed63ef5419762bc08c353f953b1d3e0d1c 100644 (file)
@@ -8,7 +8,7 @@
 #include "extern.h"
 
 
-short testP61A_nopack ( void )
+int16_t         testP61A_nopack ( void )
 {
   if ( PW_i < 7 )
   {
@@ -267,7 +267,7 @@ short testP61A_nopack ( void )
 /******************/
 /* packed samples */
 /******************/
-short testP61A_pack ( void )
+int16_t         testP61A_pack ( void )
 {
   if ( PW_i < 11 )
   {
@@ -570,29 +570,29 @@ void Rip_P61A ( void )
 
 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 )
@@ -611,7 +611,7 @@ void Depack_P61A ( void )
 
   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 */
@@ -648,7 +648,7 @@ void Depack_P61A ( void )
   }
 
   /* write title */
-  Whatever = (Uchar *) malloc ( 1024 );
+  Whatever = (uint8_t *) malloc ( 1024 );
   BZERO ( Whatever , 1024 );
   fwrite ( Whatever , 20 , 1 , out );
 
@@ -706,8 +706,8 @@ void Depack_P61A ( void )
 
     /* 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 );
 
index c2d7a71bc4cb4d12f078a30f99d0939ea626441d..140910eefcff53e264bd63a01d232989a2593639 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testTimeCruncher17 ( void )
+int16_t         testTimeCruncher17 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -79,8 +79,8 @@ void Rip_TimeCruncher17 ( 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;
 
@@ -89,7 +89,7 @@ void Rip_TimeCruncher17 ( void )
   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;
@@ -103,7 +103,7 @@ void Rip_TimeCruncher17 ( void )
     /* 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);
index 0b68d65e49591efd0e7f9dd38239a38757957c71..6792f87ec95ddcdb2ec8b62ddf3601dfa4f56b8f 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testTitanicsPlayer ( void )
+int16_t         testTitanicsPlayer ( void )
 {
   if ( PW_i < 7 )
     return BAD;
@@ -58,6 +58,11 @@ short testTitanicsPlayer ( void )
       /*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)
@@ -99,10 +104,10 @@ short testTitanicsPlayer ( void )
 
 
 /* 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)
@@ -110,6 +115,9 @@ int _cdecl cmplong(const void * a, const void * b)
   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 )
 {
@@ -148,18 +156,18 @@ 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 )
@@ -171,11 +179,11 @@ void Depack_TitanicsPlayer ( void )
 
   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 );
 
@@ -224,11 +232,11 @@ void Depack_TitanicsPlayer ( void )
   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++)
   {
@@ -272,7 +280,7 @@ void Depack_TitanicsPlayer ( void )
  
       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;
index 86da8b195171aec045df7841108543ffbeedbefc..5ebf56530d9a9838ae6dd90dcb76fddfa10a851c 100644 (file)
@@ -6,7 +6,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testTP1 ( void )
+int16_t         testTP1 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -119,19 +119,19 @@ void Rip_TP1 ( void )
 
 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);
@@ -141,11 +141,11 @@ void Depack_TP1 ( void )
 
   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 );
 
@@ -261,7 +261,7 @@ void Depack_TP1 ( void )
     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 */
index da57d903b54cc1a570561f5d5d11cbd8feec7fc1..749ef05d3ef317d23bd178443cd5483075116fdc 100644 (file)
@@ -12,7 +12,7 @@
 #include "extern.h"
 
 
-short testTP2 ( void )
+int16_t         testTP2 ( void )
 {
   if ( (in_data[PW_i+4] != '_') ||
        (in_data[PW_i+5] != 'T') ||
@@ -196,19 +196,19 @@ void Rip_TP2 ( void )
 
 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);
@@ -219,7 +219,7 @@ void Depack_TP2 ( void )
   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");*/
 
@@ -233,7 +233,7 @@ void Depack_TP2 ( void )
   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++ )
   {
index ebf9bc79538fc739626630b3776e712e3a2a3cd3..08c46df70d0eeadac049797e1341282f52af6fe9 100644 (file)
@@ -7,7 +7,7 @@
 #include "extern.h"
 
 
-short testTP3 ( void )
+int16_t         testTP3 ( void )
 {
 
   PW_Start_Address = PW_i;
@@ -28,7 +28,7 @@ short testTP3 ( void )
   {
     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;
     }
   }
@@ -189,17 +189,17 @@ void Rip_TP3 ( void )
 
 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);
@@ -209,7 +209,7 @@ void Depack_TP3 ( void )
 
   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 */
@@ -223,7 +223,7 @@ void Depack_TP3 ( void )
   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++ )
   {
index 925f3218689ddad11a99912d8082405efee375c8..f49d594bdf4f7ef26d92e7963f527453bc2915a3 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testTreasure ( void )
+int16_t         testTreasure ( void )
 {
 
   PW_Start_Address = PW_i;
@@ -192,17 +192,17 @@ void Rip_Tre( void )
 
 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);
@@ -226,7 +226,7 @@ void Depack_TP3 ( void )
   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++ )
   {
index d060c35b328a48e958e63bfab9605232d92dd8e7..c599645a8fca39f1ef77e1ee37912ba5510dd26d 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testTryIt101 ( void )
+int16_t         testTryIt101 ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -84,8 +84,8 @@ void Rip_TryIt101 ( 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;
 
@@ -95,7 +95,7 @@ void Rip_TryIt101 ( void )
   {
     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;
@@ -107,7 +107,7 @@ void Rip_TryIt101 ( void )
     /* 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);
index d2f1c2ce64556471f1cc149cfdb3c48ba4ad1bb1..f04f764c6ac1cc09099476521b0f5acf2bff9f3a 100644 (file)
@@ -5,7 +5,7 @@
 #include "globals.h"
 #include "extern.h"
 
-short testTurboSqueezer61 ( void )
+int16_t         testTurboSqueezer61 ( void )
 {
 
   PW_Start_Address = PW_i;
@@ -83,8 +83,8 @@ void Rip_TurboSqueezer61 ( 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;
 
@@ -93,7 +93,7 @@ void Rip_TurboSqueezer61 ( void )
   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;
@@ -106,7 +106,7 @@ void Rip_TurboSqueezer61 ( void )
     /* 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);
@@ -118,7 +118,7 @@ void Rip_TurboSqueezer61 ( void )
            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);
index 4a181d93c5a833b893dfadf0815398338497f1a4..777f4e3a6d4efab780d8bd36bbda75e15e9714cb 100644 (file)
@@ -15,7 +15,7 @@
 #include "extern.h"
 
 
-short testUNIC_withID ( void )
+int16_t         testUNIC_withID ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -109,7 +109,7 @@ short testUNIC_withID ( void )
 }
 
 
-short testUNIC_withemptyID ( void )
+int16_t         testUNIC_withemptyID ( void )
 {
   /* test 1 */
   if ( (PW_i < 45) || ((PW_i-45+1084)>=PW_in_size) )
@@ -270,7 +270,7 @@ short testUNIC_withemptyID ( void )
 
 
 
-short testUNIC_noID ( void )
+int16_t         testUNIC_noID ( void )
 {
   /* test 1 */
   if ( (PW_i < 45) || ((PW_i-45+1083)>=PW_in_size) )
@@ -494,17 +494,17 @@ void Rip_UNIC_noID ( void )
 
 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);
@@ -512,7 +512,7 @@ void Depack_UNIC ( void )
   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 */
@@ -529,19 +529,28 @@ void Depack_UNIC ( void )
     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++];
index fb1d1eab0eea764e76ace3f9fc2a718a89018dcf..0a16c6826e1f8799304442b820c72c2b4ca6a87d 100644 (file)
@@ -10,7 +10,7 @@
 #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 */
@@ -186,13 +186,13 @@ void Rip_UNIC2 ( void )
 
 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);
@@ -200,11 +200,11 @@ void Depack_UNIC2 ( void )
   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 );
 
index 4bfe0759d95a420e667fd6f90cc1d51fb87c9173..35b139f31b3140be2960d5cc82f2cf247853438e 100644 (file)
-/* 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
index 52b5851c9ad8f04b38073849098c15dc0ac08a8a..858cd80fb05bae2a5df6532d36a295fb448345ea 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testWN ( void )
+int16_t         testWN ( void )
 {
   /* test 1 */
   if ( PW_i < 1080 )
@@ -63,11 +63,11 @@ void Rip_WN ( void )
 
 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);
@@ -75,7 +75,7 @@ void Depack_WN ( void )
   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 */
@@ -96,7 +96,7 @@ void Depack_WN ( void )
   Where += 129;
 
   /* write ptk's ID */
-  Whatever = (Uchar *) malloc (5);
+  Whatever = (uint8_t *) malloc (5);
   Whatever[0] = 'M';
   Whatever[1] = '.';
   Whatever[2] = 'K';
index c9cb037d7c1a61322c14b940de1c137966ac33af..aebbc8dac4d1270128994cc313b2388a677f63b3 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testXANN ( void )
+int16_t         testXANN ( void )
 {
   /* test 1 */
   if ( PW_i < 3 )
@@ -146,14 +146,14 @@ void Rip_XANN ( void )
 
 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);
@@ -161,11 +161,11 @@ void Depack_XANN ( void )
   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 );
 
@@ -202,8 +202,8 @@ void Depack_XANN ( void )
     /* 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 */
index cfe15748dc97d695a5760c126bd87f2b434fc34e..f91b1f3645b58d590ce45fd31708cf738f76173e 100644 (file)
@@ -6,7 +6,7 @@
 #include "extern.h"
 
 
-short testZEN ( void )
+int16_t testZEN ( void )
 {
   /* test #1 */
   if ( PW_i<9 )
@@ -151,18 +151,18 @@ void Rip_ZEN ( void )
 
 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);
@@ -172,7 +172,7 @@ void Depack_ZEN ( void )
 
   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 */
@@ -190,7 +190,7 @@ void Depack_ZEN ( void )
   /*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 );
 
@@ -229,8 +229,8 @@ void Depack_ZEN ( void )
     /* 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 */
diff --git a/prowizard/rippers/bnr.c b/prowizard/rippers/bnr.c
new file mode 100644 (file)
index 0000000..922c208
--- /dev/null
@@ -0,0 +1,214 @@
+/* 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
index 9e5d5864c9f0d67e50636e50e58608e21ec52f88..6dee130f733313c0f60154b899009c53ba05f063 100644 (file)
@@ -5,7 +5,7 @@
 #include "extern.h"
 
 
-short testArcDDataCruncher ( void )
+int16_t         testArcDDataCruncher ( void )
 {
   PW_Start_Address = PW_i;
   if ( (PW_Start_Address + 12) > PW_in_size )
@@ -45,7 +45,8 @@ short testArcDDataCruncher ( void )
 }
 
 
-short testCRND ( void )
+/* reminder : PW_l must get the packed size */
+int16_t        testCRND ( void )
 {
   PW_Start_Address = PW_i;
 
@@ -62,3 +63,33 @@ short testCRND ( void )
 
   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;
+}
diff --git a/prowizard/rippers/mosh.c b/prowizard/rippers/mosh.c
new file mode 100644 (file)
index 0000000..328b138
--- /dev/null
@@ -0,0 +1,185 @@
+/* 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
diff --git a/prowizard/rippers/okta.c b/prowizard/rippers/okta.c
new file mode 100644 (file)
index 0000000..b6d369b
--- /dev/null
@@ -0,0 +1,141 @@
+/* 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
diff --git a/prowizard/rippers/pmd3.c b/prowizard/rippers/pmd3.c
new file mode 100644 (file)
index 0000000..bff21c6
--- /dev/null
@@ -0,0 +1,310 @@
+/* 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
diff --git a/prowizard/rippers/sidmon1.c b/prowizard/rippers/sidmon1.c
new file mode 100644 (file)
index 0000000..8ca535e
--- /dev/null
@@ -0,0 +1,157 @@
+/*\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
diff --git a/prowizard/rippers/sidmon2.c b/prowizard/rippers/sidmon2.c
new file mode 100644 (file)
index 0000000..ead2986
--- /dev/null
@@ -0,0 +1,82 @@
+/*\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
index 9e45d4da515b15e45f0a561a92f6e54a709dd313..8adcfe1b4e03ef02747d575370ae190ec180b3b6 100644 (file)
-/* (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
diff --git a/prowizard/rippers/struggle.c b/prowizard/rippers/struggle.c
new file mode 100644 (file)
index 0000000..bafb966
--- /dev/null
@@ -0,0 +1,199 @@
+/* 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