Subversion Repositories nw_plus

Compare Revisions

Ignore whitespace Rev 1 → Rev HEAD

/nw_plus/nwl1.mhk
File deleted
/nw_plus/nwl2.mhk
File deleted
/nw_plus/nwl3.mhk
File deleted
/nw_plus/nwl4.mhk
File deleted
/nw_plus/nwl5.mhk
File deleted
/nw_plus/nwl6.mhk
File deleted
/nw_plus/nwl7.mhk
File deleted
/nw_plus/nwl8.mhk
File deleted
/nw_plus/NWinter+_License.txt
File deleted
/nw_plus/nwl1.ips
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/nwl2.ips
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/nwl3.ips
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/nwl4.ips
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/nwl5.ips
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/nwl6.ips
File deleted
\ No newline at end of file
/nw_plus/nwl7.ips
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/nwl8.ips
File deleted
\ No newline at end of file
/nw_plus/nwl1demo.mhk
File deleted
/nw_plus/NW_Mapster32.bat
File deleted
\ No newline at end of file
/nw_plus/_nwzoo.mhk
File deleted
/nw_plus/NWinter+_Linux_MacOSX.txt
File deleted
/nw_plus/NWinter.bat
1,51 → 1,105
@echo off
@color 0C
color 0C
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
pushd "%~dp0"
set startdir=%cd%
 
:restart
title Duke: Nuclear Winter Plus Batch Launcher
title Duke: Nuclear Winter Plus Launcher
if "%editor%"=="1" title Duke: Nuclear Winter Plus Editor Launcher
 
set dir=%cd%
set nwver=30
set hrp=
set hrpu=
set exedir=%startdir%
set addondir=%startdir%
set addonhrpdir=%startdir%
 
set exename=eduke32
set exeproper=EDuke32
set action=playing
 
if "%editor%"=="1" (
set exename=mapster32
set exeproper=Mapster32
set action=editing
)
 
set addonver=r005
 
:title
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Duke: Nuclear Winter Plus º
echo ÈÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍͼ
echo ³ By Hendricks266 ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Duke: Nuclear Winter Plus Batch Launcher º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍͼ
echo ³ By Hendricks266 ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo.
echo You are playing Simply Silly Software's Duke: Nuclear Winter with the various
echo You are %action% Simply Silly Software's Duke: Nuclear Winter with the various
echo enhancements of Duke: Nuclear Winter Plus, maintained by Hendricks266.
echo.
 
 
if "%xxx%"=="1" echo Using XXX mode.
if "%dp%"=="1" echo Using Duke Plus by DeeperThought.
if "%debug%"=="1" echo Using debug mode.
 
if "%debug%"=="1" echo DEBUG: Command Line Input: %*
 
:recheck
if not exist eduke32.exe goto eduke32check
:eduke32check_done
if exist NWDuke.rt_ del /f /q NWDuke.rt_
if exist NWSanta.grp del /f /q NWSanta.grp
if not exist %exename%.exe goto execheck
:execheck_done
set exedir=%cd%
if "%debug%"=="1" echo DEBUG: %exeproper% Directory: "%exedir%"
 
if not exist nw_plus\ goto nodir
if not exist duke3d.grp Warning: You don't have Duke3D.grp in your directory.
if exist NWINTER.GRP move NWINTER.GRP nw_plus\
cd nw_plus
if not exist NWINTER.GRP goto nonwgrp
:nonwgrp_done
if not exist nwflag%nwver%.h266 goto extract
if not exist nwl1.map goto extract
if not exist nwl2.map goto extract
if not exist nwl3.map goto extract
if not exist nwl4.map goto extract
if not exist nwl5.map goto extract
if not exist nwl6.map goto extract
if not exist nwl7.map goto extract
if not exist nwl8.map goto extract
cd ..
if not exist duke3d.grp echo Warning: You don't have Duke3D.grp in your directory.
 
if exist nwinter\ set addonhrpdir=%cd%
:addondircheck
 
chdir nw_plus
set addondir=%cd%
if exist nwinter\ set addonhrpdir=%cd%
if exist nw_plus\ goto addondircheck
if "%debug%"=="1" echo DEBUG: NW+ Directory: "%addondir%".
if "%debug%"=="1" echo DEBUG: NWHRP Directory: "%addonhrpdir%".
 
set kextract=%addondir%\utils\windows\win32\kextract.exe
if "%debug%"=="1" set kextract=%addondir%\utils\windows\win32\kextract.debug.exe
set bspatch=%addondir%\utils\windows\win32\bspatch.exe
set sha1sum=%addondir%\utils\windows\win32\sha1sum.exe
 
if "%nwgrpname%"=="" set nwgrpname=nwinter.grp
if not exist "%exedir%\%nwgrpname%" if not exist "%addondir%\%nwgrpname%" if exist "%exedir%\nwinter_demo.grp" set nwgrpname=nwinter_demo.grp
if not exist "%exedir%\%nwgrpname%" if not exist "%addondir%\%nwgrpname%" if exist "%addondir%\nwinter_demo.grp" set nwgrpname=nwinter_demo.grp
if not exist "%exedir%\%nwgrpname%" if not exist "%addondir%\%nwgrpname%" goto nonwgrp
 
if exist nwinter.grp ren nwinter.grp nwinter.grp
call :grpchecksum
:nonwgrp_return
if not "%version%"=="demo" (
if not exist nwl1.map goto mapextract
if not exist nwl2.map goto mapextract
if not exist nwl3.map goto mapextract
if not exist nwl4.map goto mapextract
if not exist nwl5.map goto mapextract
if not exist nwl6.map goto mapextract
if not exist nwl7.map goto mapextract
if not exist nwl8.map goto mapextract
if not exist nwflag_%addonver%.h266 goto updateextract
)
 
 
 
 
chdir /d "%exedir%"
echo.
echo To switch your character, open the console (~) and type one of the following:
echo Duke: "setvar skin 0".
echo Santa: "setvar skin 1".
echo.
echo.
echo.
echo.
echo.
echo.
 
:init
pause
54,27 → 108,98
 
:check
 
if exist duke3d_hrp.zip set hrp=/gduke3d_hrp.zip
if exist hrp_update.zip set hrpu=/ghrp_update.zip
 
echo.
echo Launching Duke Nukem 3D . . .
echo Thanks for playing!
echo Thanks for %action%!
echo.
echo Please leave this window open for the entire duration of your game.
echo It will close automatically.
 
::if exist *.art ren *.art *.abk
if "%editor%"=="1" (
type "%exedir%\names.h" > "%exedir%\NWNames.h"
echo. >> "%exedir%\NWNames.h"
type "%addondir%\NWNames.def" >> "%exedir%\NWNames.h"
)
 
eduke32 /xNWEDuke.con /hnwinter.def /jnw_plus /gNWINTER.GRP %hrp% %hrpu% %*
:arguments
set args=
if exist "%exedir%\HRP\" set args=%args% -j HRP
if exist "%exedir%\polymer_hrp\" set args=%args% -j polymer_hrp
if exist "%exedir%\duke3d_voxel.zip" set args=%args% -g duke3d_voxel.zip
if exist "%exedir%\duke3d_hrp.zip" set args=%args% -g duke3d_hrp.zip
if exist "%exedir%\hrp_update.zip" set args=%args% -g hrp_update.zip
if exist "%exedir%\maphacks.zip" set args=%args% -g maphacks.zip
if exist "%exedir%\eduke32_mus.zip" set args=%args% -g eduke32_mus.zip
if exist "%addondir%" if not "%addondir%"=="%exedir%" set args=%args% -j "%addondir:\=/%"
if exist "%addonhrpdir%" if not "%addonhrpdir%"=="%exedir%" if not "%addonhrpdir%"=="%addondir%" set args=%args% -j "%addonhrpdir:\=/%"
set args=%args% -g %nwgrpname% -h nwinter.def -x NWEDuke.con
if "%editor%"=="1" set args=%args% -namesfile NWNames.h
if "%dp%"=="1" set args=%args% -h nw_dp.def -x NWDP.con
if "%xxx%"=="1" if exist "%exedir%\xxx_lite.zip" set args=%args% -g xxx_lite.zip
if "%xxx%"=="1" if exist "%exedir%\xxx_lite\" set args=%args% -j xxx_lite
if "%xxx%"=="1" if exist "%exedir%\xxx_pack.zip" set args=%args% -g xxx_pack.zip
if "%xxx%"=="1" if exist "%exedir%\xxx_pack\" set args=%args% -j xxx_pack
if "%xxx%"=="1" set args=%args% -h nw_xxx.def
if "%xxx%"=="1" if "%dp%"=="1" set args=%args% -h nw_dp_xxx.def -x NWDPXXX.con
set args=%args% %*
if "%dp%"=="1" set args=%args% -j DukePlus
 
::if exist *.abk ren *.abk *.art
set exe=%exename%
if "%debug%"=="1" set exe=%exename%.debug
 
if exist %exe%.bat (
if "%debug%"=="1" echo DEBUG: Final Command Line: call %exe%.bat %args%
call %exe%.bat %args%
) else (
if "%debug%"=="1" echo DEBUG: Final Command Line: start %exe%.exe %args%
start %exe%.exe %args%
)
 
set svnpath=0
if "%svnpath%"=="0" if exist "%startdir%\svn\bin\svn.exe" set svnpath=%startdir%\svn\bin
if "%svnpath%"=="0" if exist "%exedir%\svn\bin\svn.exe" set svnpath=%exedir%\svn\bin
if "%svnpath%"=="0" if exist "%ProgramFiles%\SlikSvn\bin\svn.exe" set svnpath=%ProgramFiles%\SlikSvn\bin
if "%svnpath%"=="0" if exist "%ProgramFiles(x86)%\SlikSvn\bin\svn.exe" set svnpath=%ProgramFiles(x86)%\SlikSvn\bin
if "%svnpath%"=="0" if exist "%ProgramFiles%\Subversion\bin\svn.exe" set svnpath=%ProgramFiles%\Subversion\bin
if "%svnpath%"=="0" if exist "%ProgramFiles(x86)%\Subversion\bin\svn.exe" set svnpath=%ProgramFiles(x86)%\Subversion\bin
if "%svnpath%"=="0" if exist "%ProgramFiles%\TortoiseSVN\bin\svn.exe" set svnpath=%ProgramFiles%\TortoiseSVN\bin
if "%svnpath%"=="0" if exist "%ProgramFiles(x86)%\TortoiseSVN\bin\svn.exe" set svnpath=%ProgramFiles(x86)%\TortoiseSVN\bin
if "%svnpath%"=="0" for %%S in (svn.exe) do if exist "%%~dp$PATH:S" set svnpath=%%~dp$PATH:S
 
chdir /d "%addondir%"
if not "%svnpath%"=="0" call :svn_action
chdir /d "%addonhrpdir%"
if not "%svnpath%"=="0" call :svn_action
 
goto end
 
:svn_action
set PATH=%PATH%;%svnpath%
for /f "delims=" %%a in ('svnversion.exe .') do @set oldrev=%%a
if "%oldrev%"=="exported" goto :eof
if "%oldrev%"=="Unversioned directory" goto :eof
"svn.exe" update
for /f "delims=" %%a in ('svnversion.exe .') do @set rev=%%a
set oldrev=%oldrev:M=%
set oldrev=%oldrev:S=%
set oldrev=%oldrev:P=%
set rev=%rev:M=%
set rev=%rev:S=%
set rev=%rev:P=%
if %rev% EQU %oldrev% goto :eof
set /a oldrev=%oldrev% + 1
echo.
"svn.exe" log -r %oldrev%:%rev%
echo.
pause
goto :eof
 
:nonwgrp
set megaton=Steam\SteamApps\common\Duke Nukem 3D\gameroot\addons\nwinter.grp
if exist "%ProgramFiles%\%megaton%" copy "%ProgramFiles%\%megaton%" .\ && call :conprotect && goto nonwgrp_done
if exist "%ProgramFiles(x86)%\%megaton%" copy "%ProgramFiles(x86)%\%megaton%" .\ && call :conprotect && goto nonwgrp_done
echo.
echo Error: You don't have NWINTER.GRP in your directory.
 
 
:retry
echo.
set cddrive=
84,42 → 209,92
if '%cddrive%'=='' goto cdno
if not exist %cddrive%:\ goto cdno
if not exist %cddrive%:\* goto cdno
if not exist %cddrive%:\GAMEDATA\NWINTER.GRP goto cdw
copy %cddrive%:GAMEDATA\NWINTER.GRP .\
pause
if exist %cddrive%:\GAMEDATA\NWINTER.GRP copy %cddrive%:\GAMEDATA\NWINTER.GRP .\nwinter.grp && goto nonwgrp_done
if exist %cddrive%:\NWINTER\GAMEDATA\NWINTER.GRP copy %cddrive%:\NWINTER\GAMEDATA\NWINTER.GRP .\nwinter.grp && goto nonwgrp_done
if exist %cddrive%:\NW\GAMEDATA\NWINTER.GRP copy %cddrive%:\NW\GAMEDATA\NWINTER.GRP .\nwinter.grp && goto nonwgrp_done
goto cdwrong
 
:nonwgrp_done
echo.
if exist nwinter.grp (
type NWINTRO.TXT
echo.
pause
goto nonwgrp_done
call :grpchecksum
call :grpchecksum_results
goto nonwgrp_return
)
if not exist nwinter.grp (
echo Installation Error!
echo Contact Hendricks266 for help.
echo.
pause
goto end
)
 
:grpchecksum
if not exist "%sha1sum%" (
echo "%sha1sum%" not found.
goto :eof
)
pushd .
if exist "%addondir%\%nwgrpname%" chdir /d %addondir%
if exist "%exedir%\%nwgrpname%" chdir /d %exedir%
echo a6728f621f121f9db02ee67c39efdbb5eea95711 *%nwgrpname% | "%sha1sum%" --status --check -
if "%ERRORLEVEL%"=="0" set version=full&& popd && goto :eof
if "%ERRORLEVEL%"=="1" echo 1b33b2cbb7101b5b18b15855392f55575413ecc3 *%nwgrpname% | "%sha1sum%" --status --check -
if "%ERRORLEVEL%"=="0" set version=demo&& popd && goto :eof
if "%ERRORLEVEL%"=="1" set version=unknown
popd
goto :eof
 
:grpchecksum_results
if "%version%"=="full" echo NWINTER.GRP checksum verified.
if "%version%"=="demo" echo NWINTER.GRP (demo version) checksum verified.
if "%version%"=="unknown" echo NWINTER.GRP checksum does not match. You may have a bad copy.
echo.
goto :eof
 
:cdno
echo '%cddrive%' is not valid. Please try again.
goto retry
 
:cdw
:cdwrong
echo '%cddrive%' is not the correct disc. Please try again.
goto retry
 
:mapextract
echo Extracted maps not found or patched. Proceeding to installation.
goto extract
 
:updateextract
echo Map patch update required. Proceeding to installation.
goto extract
 
:extract
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Duke: Nuclear Winter Plus Installation º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍͼ
echo ³ By Hendricks266 ³
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Installation º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
if not exist nwl1.ips goto noips
if not exist nwl2.ips goto noips
if not exist nwl3.ips goto noips
if not exist nwl4.ips goto noips
if not exist nwl5.ips goto noips
if not exist nwl6.ips goto noips
if not exist nwl7.ips goto noips
if not exist nwl8.ips goto noips
if exist nwl*.map del /f /q nwl*.map
if exist ..\nwl*.map del /f /q ..\nwl*.map
utils\windows\win32\kextract.exe NWINTER.GRP E2L*.MAP
call :grpchecksum
call :grpchecksum_results
if not exist nwl1.patch goto nopatch
if not exist nwl2.patch goto nopatch
if not exist nwl3.patch goto nopatch
if not exist nwl4.patch goto nopatch
if not exist nwl5.patch goto nopatch
if not exist nwl6.patch goto nopatch
if not exist nwl7.patch goto nopatch
if not exist nwl8.patch goto nopatch
mkdir nw_preserve
if exist nwl*.map move /y nwl*.map nw_preserve\
if exist "%exedir%\nwl*.map" move /y "%exedir%\nwl*.map" nw_preserve\
:: TODO: eliminate the need for the if exist checks; tighten up path handling
set grp=nwinter.grp
if exist "%addondir%\%nwgrpname%" set grp=%addondir%\%nwgrpname%
if exist "%exedir%\%nwgrpname%" set grp=%exedir%\%nwgrpname%
"%kextract%" "%grp%" E2L*.MAP
ren E2L1.MAP nwl1.map
ren E2L2.MAP nwl2.map
ren E2L3.MAP nwl3.map
134,31 → 309,23
echo Map patching will now begin.
echo.
pause
echo
utils\windows\win32\uips.exe a nwl1.ips nwl1.map
utils\windows\win32\uips.exe a nwl2.ips nwl2.map
utils\windows\win32\uips.exe a nwl3.ips nwl3.map
utils\windows\win32\uips.exe a nwl4.ips nwl4.map
utils\windows\win32\uips.exe a nwl5.ips nwl5.map
utils\windows\win32\uips.exe a nwl6.ips nwl6.map
utils\windows\win32\uips.exe a nwl7.ips nwl7.map
utils\windows\win32\uips.exe a nwl8.ips nwl8.map
echo.
"%bspatch%" nwl1.map nwl1.map nwl1.patch
"%bspatch%" nwl2.map nwl2.map nwl2.patch
"%bspatch%" nwl3.map nwl3.map nwl3.patch
"%bspatch%" nwl4.map nwl4.map nwl4.patch
"%bspatch%" nwl5.map nwl5.map nwl5.patch
"%bspatch%" nwl6.map nwl6.map nwl6.patch
"%bspatch%" nwl7.map nwl7.map nwl7.patch
"%bspatch%" nwl8.map nwl8.map nwl8.patch
if exist nwpatch*.h266 del /f /q nwpatch*.h266
if exist nwflag*.h266 del /f /q nwflag*.h266
echo Do not delete this file! You will be force to reinstall NW+ and repatch the maps. >nwflag%nwver%.h266
attrib +r nwflag%nwver%.h266
del /f /q nwl1.ips
del /f /q nwl2.ips
del /f /q nwl3.ips
del /f /q nwl4.ips
del /f /q nwl5.ips
del /f /q nwl6.ips
del /f /q nwl7.ips
del /f /q nwl8.ips
echo Do not delete this file! You will be forced to reinstall NW+ and repatch the maps. >nwflag_%addonver%.h266
attrib +r nwflag_%addonver%.h266
echo.
echo Patching complete!
:scanning
cd ..
chdir "%exedir%"
echo.
echo Scanning directory for potential problems.
if exist nwl1.mhk goto mhkfound
182,6 → 349,11
if exist TILES014.ART goto artfound
if exist TILES015.ART goto artfound
:artfound_done
call :checksum c6b8ca33ea6a2ec46b8dfeca4f9a3d5e078d0789 NWACTOR.CON "NWINTER file detected and neutralized:"
call :checksum fdb91aa2912f16232ed9020a7d8ec35834ef58c8 NWDEFS.CON "NWINTER file detected and neutralized:"
call :checksum 2bb2ddc7319e0935569b724f3c67cb953fdb79d6 NWINTER.CON "NWINTER file detected and neutralized:"
call :checksum 5ae347733be1f87f35d1930186de1ed764f4682f NWSNOW.CON "NWINTER file detected and neutralized:"
call :checksum 5df8b3b4216dcfdb8bc0adf6241f8a893eacfd98 NWUSER.CON "NWINTER file detected and neutralized:"
if exist NWinter.con goto confound
if exist NWActor.con goto confound
if exist NWDefs.con goto confound
192,13 → 364,36
if exist NWSnow.con goto confound
if exist NWUser.con goto confound
:confound_done
call :conprotect
chdir /d "%addondir%"
echo.
pause
goto restart
 
:noips
:conprotect
pushd "%exedir%"
if not exist GAME.CON "%kextract%" DUKE3D.GRP GAME.CON
if not exist DEFS.CON "%kextract%" DUKE3D.GRP DEFS.CON
if not exist USER.CON "%kextract%" DUKE3D.GRP USER.CON
popd
goto :eof
 
:checksum
if not exist "%sha1sum%" (
echo "%sha1sum%" not found.
goto :eof
)
if not exist "%~2" goto :eof
echo %~1 *%~2 | "%sha1sum%" --status --check -
if "%ERRORLEVEL%"=="0" (
ren "%~2" "NWOld_%addonver%_%~nx2"
echo %~3 %~nx2
)
goto :eof
 
:nopatch
echo.
echo Error: You don't have all the *.ips files in your directory.
echo Error: You don't have all the *.patch files in your directory.
echo Aborting installation.
echo Map patching is required for NW+ to function correctly.
echo.
209,7 → 404,7
echo.
echo Problematic .mhk files have been found in your directory.
echo Unless you have knowingly made a modification to NW's map hacks,
echo the presence of these files in your EDuke32 directory will
echo the presence of these files in your %exeproper% directory will
echo cause NW+ to function incorrectly.
echo.
echo nwl1.mhk
228,7 → 423,7
echo.
echo Problematic .art files have been found in your directory.
echo Unless you have knowingly made a modification to NW's art,
echo the presence of these files in your EDuke32 directory will
echo the presence of these files in your %exeproper% directory will
echo cause NW+ to function incorrectly.
echo.
echo TILES005.ART
246,7 → 441,7
echo.
echo Problematic .con files have been found in your directory.
echo Unless you have knowingly made a modification to NW's programming,
echo the presence of these files in your EDuke32 directory will
echo the presence of these files in your %exeproper% directory will
echo cause NW+ to function incorrectly.
echo.
echo NWinter.con
260,7 → 455,7
echo NWSnow.con
echo.
echo IF THESE ARE THE ORIGINAL NUCLEAR WINTER CON FILES, OR THEY COME FROM
echo AN OUTDATED VERSION OF NW+, REMOVE THEM FROM YOUR EDUKE32 DIRECTORY
echo AN OUTDATED VERSION OF NW+, REMOVE THEM FROM YOUR %exeproper% DIRECTORY
echo IMMEDIATELY!
echo NW+ uses modified .con files to fix programming errors created by
echo the original programmers. Due to improvements made to the levels,
267,34 → 462,15
echo NW+ will have major errors if the included .con files are not used.
goto confound_done
 
:eduke32check
if exist eduke32.bat goto eduke32check_done
if exist ..\eduke32.exe (
cd ..
goto recheck
)
if exist ..\..\eduke32.exe (
cd ..\..
goto recheck
)
if exist ..\..\..\eduke32.exe (
cd ..\..\..
goto recheck
)
if exist ..\eduke32.bat (
cd ..
goto eduke32check_done
)
if exist ..\..\eduke32.bat (
cd ..\..
goto eduke32check_done
)
if exist ..\..\..\eduke32.bat (
cd ..\..\..
goto eduke32check_done
)
echo Warning: You don't have EDuke32 in your directory.
goto eduke32check_done
:execheck
if exist %exename%.bat goto execheck_done
if exist %exename%.exe goto recheck
set prevdir=%cd%
if not "%cd%"=="%cd:~0,3%" chdir ..
if not "%cd%"=="%prevdir%" goto execheck
echo Warning: You don't have %exeproper% in your directory.
chdir /d "%startdir%"
goto execheck_done
 
:nodir
echo.
305,11 → 481,10
goto end
 
:end
set hrp=
set hrpu=
if "%debug%"=="1" echo.
if "%debug%"=="1" pause
echo.
@color 07
@title %ComSpec%
cd %dir%
@echo on
goto :eof
popd
endlocal
title %ComSpec%
color 07
/nw_plus/nwuninst.bat
1,3 → 1,5
@echo off
 
echo You are about to delete all files relevant to NW+.
echo Continue?
echo.
/nw_plus/NWinter.con
9,29 → 9,33
--------------------------------------------------------------------------------
*/
 
definecheat 14 endepisode
definecheat 15 endlevel
definecheat 25 endvolume
 
include NWDefs.con
include NWUser.con
 
setgamename Duke: Nuclear Winter
 
gamevar owner 0 2
gamevar temp2 0 2
gamevar temp3 0 2
gamevar temp4 0 2
gamevar ptemp 0 1
gamevar musicchange 0 1
gamevar skin 0 1
gamevar nw_picnum 0 2
gamevar nw_temp 0 2
gamevar nw_tempb 0 2
gamevar nw_x 0 2
gamevar nw_y 0 2
gamevar nw_z 0 2
 
gamevar nw_owner 0 2
gamevar nw_temp2 0 2
gamevar nw_temp3 0 2
// gamevar nw_temp4 0 0
// gamevar nw_ptemp 0 1
gamevar nw_holodukeid 0 1
gamevar nw_musicchange 0 1
gamevar skin DUKE 132097 // do not reset flag enabled
 
gamevar LOGO_FLAGS 767 0 // default; TEN screen reenabled
 
state cutsceneambience
getactor[THISACTOR].lotag temp
getactor[THISACTOR].lotag nw_temp
 
switch temp
switch nw_temp
 
case WIND_AMBIENCE
case WIND_REPEAT
46,8 → 50,8
ends
 
onevent EVENT_LOADACTOR
getactor[THISACTOR].picnum picnum
switch picnum
getactor[THISACTOR].picnum nw_picnum
switch nw_picnum
 
case SNOWYDOORSHOCK
spritepal 30
71,7 → 75,7
break
 
case JETPACK
ifspritepal 21 setvar temp 1
ifspritepal 21 setvar nw_temp 1
spritepal 0
break
 
84,7 → 88,7
 
case XMASPRESENT
case XMASPRESENT2
getactor[THISACTOR].hitag temp
getactor[THISACTOR].hitag nw_temp
setactor[THISACTOR].hitag 0
break
 
91,7 → 95,14
endswitch
endevent
 
onevent EVENT_SPAWN
getactor[THISACTOR].owner nw_owner
getactor[THISACTOR].picnum nw_picnum
endevent
 
onevent EVENT_EGS
getactor[THISACTOR].picnum nw_picnum
 
ifactor APLAYER setactor[THISACTOR].mdflags 16
ifactor DUKETORSO setactor[THISACTOR].mdflags 16
ifactor DUKEGUN setactor[THISACTOR].mdflags 16
102,18 → 113,18
{
sizeat 8 8
 
setvar temp3 0
randvar temp3 2047
setactor[THISACTOR].ang temp3
setvar nw_temp3 0
randvar nw_temp3 2047
setactor[THISACTOR].ang nw_temp3
 
setvar temp2 -2047
randvar temp2 2047
setvar nw_temp2 -2047
randvar nw_temp2 2047
 
/*
setvar temp3 0
ifrnd 128 addvar temp3 4
ifrnd 128 addvar temp3 8
setactor[THISACTOR].cstat temp3
setvar nw_temp3 0
ifrnd 128 addvar nw_temp3 4
ifrnd 128 addvar nw_temp3 8
setactor[THISACTOR].cstat nw_temp3
*/
}
endevent
193,6 → 204,15
killit
}
else
ifactor CHANDELIER
{
sound GLASS_BREAKING
debris SCRAP3 3
debris SCRAP4 4
lotsofglass 10
killit
}
else
ifactor TREEWITHSOMETHING
{
sound GLASS_HEAVYBREAK
233,6 → 253,8
 
useractor notenemy SNOWGIB WEAK state nwbreakobject enda
 
useractor notenemy CHANDELIER WEAK state nwbreakobject enda
 
useractor notenemy TREEWITHSOMETHING TOUGH state nwbreakobject enda
 
actor JETPACK
248,10 → 270,11
ifpinventory GET_JETPACK JETPACK_AMOUNT
ifcanseetarget
{
ifvare temp 1
ifvare nw_temp 1
{
addinventory GET_JETPACK JETPACK_NEAR_EMPTY
quote 125
redefinequote 122 This jetpack is almost empty!
quote 122
}
else
{
272,22 → 295,22
 
 
state nwbabecode
getactor[THISACTOR].cstat temp
ifvarand temp 1 nullop else addvar temp 1
ifactor HALFBITCH { ifvarand temp 128 nullop else addvar temp 128 }
ifvarand temp 256 nullop else addvar temp 256
getactor[THISACTOR].cstat nw_temp
ifvarand nw_temp 1 nullop else addvar nw_temp 1
ifactor HALFBITCH { ifvarand nw_temp 128 nullop else addvar nw_temp 128 }
ifvarand nw_temp 256 nullop else addvar nw_temp 256
 
getuserdef .lockout temp2
ifvare temp2 1
getuserdef .lockout nw_temp2
ifvare nw_temp2 1
{
ifvarand temp 32768 nullop else addvar temp 32768
ifvarand nw_temp 32768 nullop else addvar nw_temp 32768
}
else
// {
ifvarand temp 32768 subvar temp 32768
ifvarand nw_temp 32768 subvar nw_temp 32768
// }
 
setactor[THISACTOR].cstat temp
setactor[THISACTOR].cstat nw_temp
 
 
 
530,28 → 553,28
{
ifvare LEVEL 2
{
getactor[THISACTOR].sectnum temp
switch temp
getactor[THISACTOR].sectnum nw_temp
switch nw_temp
case 220 case 221
ifvarn musicchange 1
ifvarn nw_musicchange 1
{
starttrack 12 // doom
setvar musicchange 1
setvar nw_musicchange 1
}
break
case 563 case 564 case 565 case 566 case 567
ifvarn musicchange 2
ifvarn nw_musicchange 2
{
starttrack 13 // mario
setvar musicchange 2
setvar nw_musicchange 2
}
break
case 192 case 193 case 194 case 195 case 196 case 197 case 198 case 237 case 238 case 239 case 240
case 166 case 167 case 172 case 173 case 174 case 176 case 179
ifvarn musicchange 0
ifvarn nw_musicchange 0
{
starttrack 2 // level music
setvar musicchange 0
starttrackvar LEVEL // level music
setvar nw_musicchange 0
}
break
endswitch
559,9 → 582,44
}
ends
 
// Flying Frosty
 
/*
action ACOMMBREETH 0 3 5 1 40
action ACOMMFROZEN 0 1 5
action ACOMMSPIN -5 1 5 1 12
action ACOMMGET 0 3 5 1 30
action ACOMMSHOOT 20 1 5 1 35
action ACOMMABOUTTOSHOOT 20 1 5 1 30
action ACOMMDYING 30 8 1 1 12
action ACOMMDEAD 38 1 1 1 1
 
 
move COMMGETUPVELS 128 -64
move COMMGETVELS 128 64
move COMMSLOW 64 24
move COMMSTOPPED
 
ai AICOMMWAIT ACOMMBREETH COMMSTOPPED faceplayerslow
ai AICOMMGET ACOMMGET COMMGETVELS seekplayer
ai AICOMMSHOOT ACOMMSHOOT COMMSTOPPED faceplayerslow
ai AICOMMABOUTTOSHOOT ACOMMABOUTTOSHOOT COMMSTOPPED faceplayerslow
ai AICOMMSPIN ACOMMSPIN COMMGETVELS spin
ai AICOMMDYING ACOMMDYING COMMSTOPPED faceplayer
ai AICOMMSHRUNK ACOMMGET COMMSLOW furthestdir
ai AICOMMGROW ACOMMGET COMMSTOPPED furthestdir
*/
 
move COMMGETUPVELSNW 128 -64
move COMMGETVELSNW 128 64
move COMMSLOWNW 64 24
move COMMSTOPPEDNW
 
action ACOMMSPINNW 0 1 5 1 12
action ACOMMSHOOTNW 20 1 5 1 16 // this is custom to shorten the delay between firing freezeblasts
 
ai AICOMMSPINNW ACOMMSPINNW COMMGETVELS spin
ai AICOMMSPINNW ACOMMSPINNW COMMGETVELSNW spin
ai AICOMMSHOOTNW ACOMMSHOOTNW COMMSTOPPEDNW faceplayerslow
 
state checkcommhitstate
 
670,7 → 728,7
break
}
ifai 0
ai AICOMMSHOOT
ai AICOMMSHOOTNW
else
ifai AICOMMWAIT
{
696,7 → 754,7
ifactioncount 2
{
ifcansee
ai AICOMMSHOOT
ai AICOMMSHOOTNW
else
{
ai AICOMMGET
706,7 → 764,7
ifrnd 32 soundonce COMM_ATTACK
}
else
ifai AICOMMSHOOT
ifai AICOMMSHOOTNW
{
ifcanshoottarget
{
713,12 → 771,17
ifcount 12
ifrnd 16
ai AICOMMWAIT
ifactioncount 1
{
shoot FREEZEBLAST
resetactioncount
}
 
getplayer[THISACTOR].i nw_temp
getactor[nw_temp].pal nw_temp
ifvare nw_temp 1 // if player is frozen
ai AICOMMGET
}
else
ai AICOMMGET
744,11 → 807,22
ifrnd 4
operate
ifpdistl 1024
{
ifp palive
{
// sound COMM_SPIN
ai AICOMMSPINNW
break
{
sound COMM_SPIN
ai AICOMMSPINNW
break
}
getplayer[THISACTOR].i nw_temp
getactor[nw_temp].pal nw_temp
ifvare nw_temp 1 // if player is frozen
{
sound COMM_SPIN
ai AICOMMSPINNW
break
}
}
 
ifcansee
770,10 → 844,17
{
ifpdistl 1280
{
addphealth CAPTSPINNINGPLAYER
sound DUKE_GRUNT
palfrom 32
16 resetcount
setvar nw_tempb CAPTSPINNINGPLAYER
mulvar nw_tempb -1
// addphealth CAPTSPINNINGPLAYER
getplayer[THISACTOR].i nw_temp
setactor[nw_temp].htextra nw_tempb
setactor[nw_temp].htpicnum KNEE
setactor[nw_temp].htowner THISACTOR
 
globalsound DUKE_GRUNT
palfrom 32 16
resetcount
}
else
ifpdistg 2300
818,6 → 899,8
}
enda
 
// Frosted Battle Mobile
 
move TANKSTOPNW
 
useractor enemy TANK TANKSTRENGTH
946,22 → 1029,35
// -----------------------------------------------------------------------------
 
onevent EVENT_GAME
ifactor APLAYER state nwl3surprise
ifactor APLAYER
{
state nwl3surprise
getplayer[THISACTOR].holoduke_on nw_holodukeid
ifvarg nw_holodukeid -1
setactor[nw_holodukeid].mdflags 16
// addlogvar skin
}
ifactor FRAMEEFFECT1
ifspawnedby APLAYER
setactor[THISACTOR].mdflags 16
 
/*
ifactor MONEY
{
setactor[THISACTOR].mdflags 16
getactor[THISACTOR].owner owner
switch owner
// getactor[THISACTOR].owner nw_owner
switch nw_owner
case SNOW case SNOWFLAKE case SNOWMAKER case SNOWMAKERNOMOVE
getactor[THISACTOR].x x
getactor[THISACTOR].y y
getactor[THISACTOR].z z
getactor[THISACTOR].x nw_x
getactor[THISACTOR].y nw_y
getactor[THISACTOR].z nw_z
 
updatesectorz x y z temp
ifvarn temp -1 getflorzofslope temp x y temp2 else killit
updatesectorz nw_x nw_y nw_z nw_temp
ifvarn nw_temp -1 getflorzofslope nw_temp nw_x nw_y nw_temp2 else killit
 
ifvarvare z temp2 killit
ifvarvare nw_z nw_temp2 killit
break
endswitch
}
968,17 → 1064,15
*/
endevent
 
onevent EVENT_ANIMATESPRITES // This is a hell of a mess because putting get/settspr in states throws warnings, and I don't want that.
getactor[THISACTOR].picnum picnum
getactor[THISACTOR].owner owner
onevent EVENT_ANIMATESPRITES
 
ifvare picnum DOORSHOCK
ifvare nw_picnum DOORSHOCK
{
ifspritepal 30 settspr[THISACTOR].tsprpicnum 3656
ifvare VOLUME 1 ifvare LEVEL 2 settspr[THISACTOR].tsprpicnum 3656
break
}
ifvare picnum SNOWFLAKE
ifvare nw_picnum SNOWFLAKE
{
settspr[THISACTOR].tsprpicnum SNOW
settspr[THISACTOR].tsprxrepeat 4
986,9 → 1080,9
break
}
/*
ifvare picnum MONEY
ifvare nw_picnum MONEY
{
switch owner
switch nw_owner
case SNOW case SNOWFLAKE case SNOWMAKER case SNOWMAKERNOMOVE
settspr[THISACTOR].tsprpicnum SNOW
break
995,95 → 1089,75
endswitch
}
*/
getplayervar[THISACTOR].skin temp
ifvare temp 1
{
getplayer[THISACTOR].i temp2
gettspr[temp2].tsprpicnum temp3
ifvarl temp3 1544 addvar temp3 4096
settspr[temp2].tsprpicnum temp3
settspr[temp2].tsprpal 10
switch nw_picnum
case APLAYER
ifvare skin SANTA
{
gettspr[THISACTOR].tsprpicnum nw_temp3
ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
settspr[THISACTOR].tsprpicnum nw_temp3
 
ifvare picnum DUKETORSO
{
getactor[owner].picnum temp2
ifvare temp2 APLAYER
{
gettspr[THISACTOR].tsprpicnum temp3
addvar temp3 2456
settspr[THISACTOR].tsprpicnum temp3
break
}
}
ifvare picnum DUKEGUN
{
getactor[owner].picnum temp2
ifvare temp2 APLAYER
{
gettspr[THISACTOR].tsprpicnum temp3
addvar temp3 2456
settspr[THISACTOR].tsprpicnum temp3
break
}
}
ifvare picnum DUKELEG
{
getactor[owner].picnum temp2
ifvare temp2 APLAYER settspr[THISACTOR].tsprpal 30
break
}
}
ifvarg nw_holodukeid -1
{
gettspr[nw_holodukeid].tsprpicnum nw_temp3
ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
settspr[nw_holodukeid].tsprpicnum nw_temp3
}
}
break
case FRAMEEFFECT1
ifvare skin SANTA
ifspawnedby APLAYER
{
gettspr[THISACTOR].tsprpicnum nw_temp3
ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
settspr[THISACTOR].tsprpicnum nw_temp3
}
break
case DUKETORSO
case DUKEGUN
getactor[nw_owner].picnum nw_temp2
ifvare nw_temp2 SOBBOTWALK
{
gettspr[THISACTOR].tsprpicnum nw_temp3
addvar nw_temp3 2456
settspr[THISACTOR].tsprpicnum nw_temp3
}
ifvare nw_temp2 SOBBOTFLY
{
gettspr[THISACTOR].tsprpicnum nw_temp3
addvar nw_temp3 2456
settspr[THISACTOR].tsprpicnum nw_temp3
}
ifvare nw_temp2 APLAYER
{
ifvare skin SANTA
{
gettspr[THISACTOR].tsprpicnum nw_temp3
addvar nw_temp3 2456
settspr[THISACTOR].tsprpicnum nw_temp3
}
}
break
 
ifvare picnum DUKETORSO
case DUKELEG
getactor[nw_owner].picnum nw_temp2
ifvare nw_temp2 SOBBOTWALK settspr[THISACTOR].tsprpal 30
ifvare nw_temp2 SOBBOTFLY settspr[THISACTOR].tsprpal 30
ifvare nw_temp2 APLAYER ifvare skin SANTA settspr[THISACTOR].tsprpal 30
break
endswitch
 
ifvare nw_picnum APLAYER // this fixes the bug with the misplaced TV screen tiles
{
getactor[owner].picnum temp2
ifvare temp2 SOBBOTWALK
{
gettspr[THISACTOR].tsprpicnum temp3
addvar temp3 2456
settspr[THISACTOR].tsprpicnum temp3
break
}
ifvare temp2 SOBBOTFLY
{
gettspr[THISACTOR].tsprpicnum temp3
addvar temp3 2456
settspr[THISACTOR].tsprpicnum temp3
break
}
}
ifvare picnum DUKEGUN
{
getactor[owner].picnum temp2
ifvare temp2 SOBBOTWALK
{
gettspr[THISACTOR].tsprpicnum temp3
addvar temp3 2456
settspr[THISACTOR].tsprpicnum temp3
break
}
ifvare temp2 SOBBOTFLY
{
gettspr[THISACTOR].tsprpicnum temp3
addvar temp3 2456
settspr[THISACTOR].tsprpicnum temp3
break
}
}
ifvare picnum DUKELEG
{
getactor[owner].picnum temp2
ifvare temp2 SOBBOTWALK settspr[THISACTOR].tsprpal 30
ifvare temp2 SOBBOTFLY settspr[THISACTOR].tsprpal 30
break
}
ifvare picnum APLAYER
{
gettspr[THISACTOR].tsprpicnum temp
switch temp
gettspr[THISACTOR].tsprpicnum nw_temp
switch nw_temp
case 1470 case 1471 case 1472 case 1473 case 1474
subvar temp 5
settspr[THISACTOR].tsprpicnum temp
subvar nw_temp 5
settspr[THISACTOR].tsprpicnum nw_temp
break
endswitch
}
1093,63 → 1167,98
 
 
useractor notenemy NWEFFECTOR 0
cstat 32768
// sizeat 1 1
cstat 32768
// sizeat 1 1
 
ifspritepal 31
{
getplayer[THISACTOR].cursectnum temp3
switch temp3
case 60 case 61 case 62 case 63
case 86 case 87
case 299 case 300 case 301 case 302 case 303 case 304 case 305 case 306 case 307 case 308 case 309
case 310 case 311 case 312 case 313 case 314 case 315 case 316 case 317
soundonce PHONE_RING
ifspritepal 31 // phone ringing effect
{
/*
getplayer[THISACTOR].cursectnum nw_temp3
switch nw_temp3
case 60 case 61 case 62 case 63
case 86 case 87
case 299 case 300 case 301 case 302 case 303 case 304 case 305 case 306 case 307 case 308 case 309
case 310 case 311 case 312 case 313 case 314 case 315 case 316 case 317
soundonce PHONE_RING
break
endswitch
 
ifpdistl RETRIEVEDISTANCE
default
stopsound PHONE_RING
break
endswitch
*/
 
ifpdistl 8192 // 4096
soundonce PHONE_RING
ifpdistg 16384
stopsound PHONE_RING
 
ifpdistl RETRIEVEDISTANCE
ifp pfacing
ifhitspace
ifvare temp2 0
{
setvar temp 0
setvar temp2 1
}
ifhitspace
ifvare nw_temp2 0
{
setvar nw_temp 0
setvar nw_temp2 1
setvar nw_temp3 0
setvar nw_tempb 0
}
 
ifvare temp2 1
{
addvar temp 1
ifvare nw_temp2 1
{
addvar nw_temp 1
 
stopsound PHONE_RING
ifvare temp 1 sound PHONE_PICKUP
else ifvare temp 39
{
setvar tempb 0
randvar tempb 3
switch tempb
case 0 sound LOWANG1 break
case 1 sound LOWANG2 break
case 2 sound LOWANG3 break
case 3 sound LOWANG4 break
endswitch
}
else ifvare temp 195 sound PHONE_HANGUP
else ifvare temp 247
{
setvar temp2 0
setvar temp 0
}
}
}
stopsound PHONE_RING
ifvare nw_temp 1
sound PHONE_PICKUP
else ifvare nw_temp 30
{
setvar nw_tempb 0
randvar nw_tempb 3
 
switch nw_tempb
case 0
sound LOWANG1
setvar nw_temp3 57
break
case 1
sound LOWANG2
setvar nw_temp3 124
break
case 2
sound LOWANG3
setvar nw_temp3 121
break
case 3
sound LOWANG4
setvar nw_temp3 156
break
endswitch
 
addvar nw_temp3 60
setvar nw_tempb 0
}
else ifvarvare nw_temp nw_temp3
{
sound PHONE_HANGUP
setvarvar nw_tempb nw_temp3
addvar nw_tempb 150
}
else ifvarvare nw_temp nw_tempb
{
setvar nw_temp2 0
setvar nw_temp 0
}
}
}
enda
 
useractor notenemy 3831 0
// cstat 32768
sizeat 12 13
getactor[THISACTOR].sectnum temp
getplayer[THISACTOR].cursectnum temp2
ifvarvare temp temp2
getactor[THISACTOR].sectnum nw_temp
getplayer[THISACTOR].cursectnum nw_temp2
ifvarvare nw_temp nw_temp2
{
setuserdef[THISACTOR].volume_number 1
endofgame 13
1184,19 → 1293,10
define title_zoom 32768
 
onevent EVENT_DISPLAYMENU
// getplayer[THISACTOR].gm temp
// ifvarand temp 4 nullop else
// getplayer[THISACTOR].gm nw_temp
// ifvarand nw_temp 4 nullop else
// {
rotatesprite title_x1 title_y title_zoom 0 3838 0 0 0 0 0 xdim ydim
rotatesprite title_x2 title_y title_zoom 0 3839 0 0 0 0 0 xdim ydim
rotatesprite title_x1 title_y title_zoom 0 3838 0 0 256 0 0 xdim ydim
rotatesprite title_x2 title_y title_zoom 0 3839 0 0 512 0 0 xdim ydim
// }
endevent
 
/*
onevent EVENT_DISPLAYTITLE
rotatesprite title_x1 title_y title_zoom 0 3838 0 0 0 0 0 xdim ydim
rotatesprite title_x2 title_y title_zoom 0 3839 0 0 0 0 0 xdim ydim
endevent
*/
 
 
/nw_plus/NWUser.con
19,7 → 19,6
 
define JETPACK_NEAR_EMPTY 160
 
definequote 125 This jetpack is almost empty!
 
definevolumename 0 Nuclear Winter Demo
definevolumename 1 Nuclear Winter
54,6 → 53,8
 
music 3 NW1.MID NW2.MID NW3.MID NW4.MID NW5.MID NW2.MID NW7.MID
 
definesound BONUSMUSIC bonus.voc 0 0 255 3 0 // needs bit 2 for NWL7
 
definesound FLY_BY flyby.voc 0 0 0 0 0
definesound DUKETALKTOBOSS nwinter/sounds/blank.ogg 0 0 255 12 0
definesound BOSSTALKTODUKE nwinter/sounds/blank.ogg 0 0 255 12 0
118,7 → 119,7
definesound SANTA_TRASH9 422.voc 0 0 254 20 100
 
definesound PHONE_RING fonering.voc 0 0 100 3 0
definesound RIP_PAPER rippaper.voc 0 0 255 20 100
definesound RIP_PAPER rippaper.voc -64 64 250 20 0
 
definesound SQUISH2 squish.voc -128 0 2 0 0
definesound WIND2 wind2.voc 0 0 0 2 0
132,10 → 133,10
definesound FEMALECAROL jingle2.voc 0 0 0 0 0
definesound FEMALECAROL_DEAD scream2.voc 0 0 0 0 0
 
definesound LOWANG1 nwinter/sounds/jg41075.voc 0 0 253 0 -2048
definesound LOWANG2 nwinter/sounds/jg42004.voc 0 0 253 0 -2048
definesound LOWANG3 nwinter/sounds/jg42019.voc 0 0 253 0 -2048
definesound LOWANG4 nwinter/sounds/jg42021.voc 0 0 253 0 -2048
definesound LOWANG1 nwinter/sounds/jg41075.voc 0 0 253 0 -2048 // 1.887 sec, 57 tics
definesound LOWANG2 nwinter/sounds/jg42004.voc 0 0 253 0 -2048 // 4.124 sec, 124 tics
definesound LOWANG3 nwinter/sounds/jg42019.voc 0 0 253 0 -2048 // 4.013 sec, 121 tics
definesound LOWANG4 nwinter/sounds/jg42021.voc 0 0 253 0 -2048 // 5.173 sec, 156 tics
 
definesound PHONE_PICKUP nwinter/sounds/phone-pick-up-1.wav 0 0 100 2 0
definesound PHONE_HANGUP nwinter/sounds/phone-hang-up-1.wav 0 0 100 2 0
/nw_plus/nwl2.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/kextract.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/nw_plus/utils/windows/win32/kgroup.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/nw_plus/utils/windows/win32/kextract.debug.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/kgroup.debug.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/wget.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/sha384sum.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/sha1sum.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/sha224sum.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/sha512sum.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/md5sum.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/sha256sum.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/bspatch.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32/bsdiff.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/utils/windows/win32
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/windows
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/source/kextract/compile.sh
File deleted
/nw_plus/utils/source/kextract/get.sh
File deleted
/nw_plus/utils/source/buildtools/get.sh
0,0 → 1,4
#!/bin/bash
echo "The source for the buildtools is part of EDuke32."
echo "This script will check out EDuke32 from its SVN."
svn co http://svn.eduke32.com/eduke32
/nw_plus/utils/source/buildtools/compile.sh
0,0 → 1,8
#!/bin/bash
echo "Before compiling the utilities, you must follow the directions to compile EDuke32."
echo "http://wiki.eduke32.com/wiki/Building_EDuke32_on_Linux"
echo "After that is all done, you must make EDuke32, then change to the build directory and make that too."
echo "This script will do that here."
cd polymer/eduke32/build/
make
ls
/nw_plus/utils/source/wget/links.txt
0,0 → 1,0
http://users.ugent.be/~bpuype/wget/
/nw_plus/utils/source/wget
Property changes:
Added: bugtraq:number
+true
\ No newline at end of property
/nw_plus/utils/source/sums611/COPYING
0,0 → 1,674
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
 
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
 
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
 
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
 
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
 
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
 
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
 
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
 
The precise terms and conditions for copying, distribution and
modification follow.
 
TERMS AND CONDITIONS
 
0. Definitions.
 
"This License" refers to version 3 of the GNU General Public License.
 
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
 
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
 
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
 
A "covered work" means either the unmodified Program or a work based
on the Program.
 
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
 
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
 
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
 
1. Source Code.
 
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
 
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
 
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
 
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
 
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
 
The Corresponding Source for a work in source code form is that
same work.
 
2. Basic Permissions.
 
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
 
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
 
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
 
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
 
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
 
4. Conveying Verbatim Copies.
 
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
 
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
 
5. Conveying Modified Source Versions.
 
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
 
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
 
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
 
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
 
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
 
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
 
6. Conveying Non-Source Forms.
 
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
 
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
 
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
 
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
 
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
 
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
 
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
 
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
 
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
 
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
 
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
 
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
 
7. Additional Terms.
 
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
 
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
 
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
 
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
 
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
 
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
 
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
 
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
 
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
 
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
 
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
 
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
 
8. Termination.
 
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
 
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
 
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
 
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
 
9. Acceptance Not Required for Having Copies.
 
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
 
10. Automatic Licensing of Downstream Recipients.
 
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
 
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
 
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
 
11. Patents.
 
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
 
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
 
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
 
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
 
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
 
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
 
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
 
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
 
12. No Surrender of Others' Freedom.
 
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
 
13. Use with the GNU Affero General Public License.
 
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
 
14. Revised Versions of this License.
 
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
 
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
 
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
 
15. Disclaimer of Warranty.
 
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 
16. Limitation of Liability.
 
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
 
17. Interpretation of Sections 15 and 16.
 
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
 
END OF TERMS AND CONDITIONS
 
How to Apply These Terms to Your New Programs
 
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
 
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
 
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Also add information on how to contact you by electronic and paper mail.
 
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
 
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
 
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
 
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
 
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
/nw_plus/utils/source/sums611/README
0,0 → 1,0
Files compiled by Nagy Ferenc László (nfl at nfllab dot com) from GNU coreutils 6.11 source, fetched from http://gd.tuwien.ac.at/gnu/gnusrc/coreutils/coreutils-6.11.tar.gz.
/nw_plus/utils/source/sums611/links.txt
0,0 → 1,3
http://blog.nfllab.com/archives/152-Win32-native-md5sum,-sha1sum,-sha256sum-etc..html
http://www.nfllab.com/sums/coreutils-6.11.tar.gz
http://www.nfllab.com/sums/sums611.zip
/nw_plus/utils/source/sums611
Property changes:
Added: bugtraq:number
+true
\ No newline at end of property
/nw_plus/utils/source/bsdiff-4.3/win32/bsdiff.dsp
0,0 → 1,136
# Microsoft Developer Studio Project File - Name="bsdiff" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
 
# TARGTYPE "Win32 (x86) Console Application" 0x0103
 
CFG=bsdiff - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "bsdiff.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "bsdiff.mak" CFG="bsdiff - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "bsdiff - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "bsdiff - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
 
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
 
!IF "$(CFG)" == "bsdiff - Win32 Release"
 
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
 
!ELSEIF "$(CFG)" == "bsdiff - Win32 Debug"
 
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
 
!ENDIF
 
# Begin Target
 
# Name "bsdiff - Win32 Release"
# Name "bsdiff - Win32 Debug"
# Begin Group "Source Files"
 
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
 
SOURCE=.\blocksort.c
# End Source File
# Begin Source File
 
SOURCE=.\bsdiff.cpp
# End Source File
# Begin Source File
 
SOURCE=.\bzlib.c
# End Source File
# Begin Source File
 
SOURCE=.\compress.c
# End Source File
# Begin Source File
 
SOURCE=.\crctable.c
# End Source File
# Begin Source File
 
SOURCE=.\decompress.c
# End Source File
# Begin Source File
 
SOURCE=.\huffman.c
# End Source File
# Begin Source File
 
SOURCE=.\randtable.c
# End Source File
# End Group
# Begin Group "Header Files"
 
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
 
SOURCE=.\bzlib.h
# End Source File
# Begin Source File
 
SOURCE=.\bzlib_private.h
# End Source File
# End Group
# Begin Group "Resource Files"
 
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project
/nw_plus/utils/source/bsdiff-4.3/win32/LICENSE
0,0 → 1,121
BSD Protection License
February 2002
 
Preamble
--------
 
The Berkeley Software Distribution ("BSD") license has proven very effective
over the years at allowing for a wide spread of work throughout both
commercial and non-commercial products. For programmers whose primary
intention is to improve the general quality of available software, it is
arguable that there is no better license than the BSD license, as it
permits improvements to be used wherever they will help, without idealogical
or metallic constraint.
 
This is of particular value to those who produce reference implementations
of proposed standards: The case of TCP/IP clearly illustrates that freely
and universally available implementations leads the rapid acceptance of
standards -- often even being used instead of a de jure standard (eg, OSI
network models).
 
With the rapid proliferation of software licensed under the GNU General
Public License, however, the continued success of this role is called into
question. Given that the inclusion of a few lines of "GPL-tainted" work
into a larger body of work will result in restricted distribution -- and
given that further work will likely build upon the "tainted" portions,
making them difficult to remove at a future date -- there are inevitable
circumstances where authors would, in order to protect their goal of
providing for the widespread usage of their work, wish to guard against
such "GPL-taint".
 
In addition, one can imagine that companies which operate by producing and
selling (possibly closed-source) code would wish to protect themselves
against the rise of a GPL-licensed competitor. While under existing
licenses this would mean not releasing their code under any form of open
license, if a license existed under which they could incorporate any
improvements back into their own (commercial) products then they might be
far more willing to provide for non-closed distribution.
 
For the above reasons, we put forth this "BSD Protection License": A
license designed to retain the freedom granted by the BSD license to use
licensed works in a wide variety of settings, both non-commercial and
commercial, while protecting the work from having future contributors
restrict that freedom.
 
The precise terms and conditions for copying, distribution, and
modification follow.
 
BSD PROTECTION LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
----------------------------------------------------------------
 
0. Definitions.
a) "Program", below, refers to any program or work distributed under
the terms of this license.
b) A "work based on the Program", below, refers to either the Program
or any derivative work under copyright law.
c) "Modification", below, refers to the act of creating derivative works.
d) "You", below, refers to each licensee.
 
1. Scope.
This license governs the copying, distribution, and modification of the
Program. Other activities are outside the scope of this license; The
act of running the Program is not restricted, and the output from the
Program is covered only if its contents constitute a work based on the
Program.
 
2. Verbatim copies.
You may copy and distribute verbatim copies of the Program as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice; keep
intact all the notices that refer to this License and to the absence of
any warranty; and give any other recipients of the Program a copy of this
License along with the Program.
 
3. Modification and redistribution under closed license.
You may modify your copy or copies of the Program, and distribute
the resulting derivative works, provided that you meet the
following conditions:
a) The copyright notice and disclaimer on the Program must be reproduced
and included in the source code, documentation, and/or other materials
provided in a manner in which such notices are normally distributed.
b) The derivative work must be clearly identified as such, in order that
it may not be confused with the original work.
c) The license under which the derivative work is distributed must
expressly prohibit the distribution of further derivative works.
 
4. Modification and redistribution under open license.
You may modify your copy or copies of the Program, and distribute
the resulting derivative works, provided that you meet the
following conditions:
a) The copyright notice and disclaimer on the Program must be reproduced
and included in the source code, documentation, and/or other materials
provided in a manner in which such notices are normally distributed.
b) You must clearly indicate the nature and date of any changes made
to the Program. The full details need not necessarily be included in
the individual modified files, provided that each modified file is
clearly marked as such and instructions are included on where the
full details of the modifications may be found.
c) You must cause any work that you distribute or publish, that in whole
or in part contains or is derived from the Program or any part
thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
 
5. Implied acceptance.
You may not copy or distribute the Program or any derivative works except
as expressly provided under this license. Consequently, any such action
will be taken as implied acceptance of the terms of this license.
 
6. NO WARRANTY.
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
/nw_plus/utils/source/bsdiff-4.3/win32/bzlib_private.h
0,0 → 1,503
 
/*-------------------------------------------------------------*/
/*--- Private header file for the library. ---*/
/*--- bzlib_private.h ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#ifndef _BZLIB_PRIVATE_H
#define _BZLIB_PRIVATE_H
 
#include <stdlib.h>
 
#ifndef BZ_NO_STDIO
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#endif
 
#include "bzlib.h"
 
 
 
/*-- General stuff. --*/
 
#define BZ_VERSION "1.0.4, 20-Dec-2006"
 
typedef char Char;
typedef unsigned char Bool;
typedef unsigned char UChar;
typedef int Int32;
typedef unsigned int UInt32;
typedef short Int16;
typedef unsigned short UInt16;
 
#define True ((Bool)1)
#define False ((Bool)0)
 
#ifndef __GNUC__
#define __inline__ /* */
#endif
 
#ifndef BZ_NO_STDIO
 
extern void BZ2_bz__AssertH__fail ( int errcode );
#define AssertH(cond,errcode) \
{ if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
 
#if BZ_DEBUG
#define AssertD(cond,msg) \
{ if (!(cond)) { \
fprintf ( stderr, \
"\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
exit(1); \
}}
#else
#define AssertD(cond,msg) /* */
#endif
 
#define VPrintf0(zf) \
fprintf(stderr,zf)
#define VPrintf1(zf,za1) \
fprintf(stderr,zf,za1)
#define VPrintf2(zf,za1,za2) \
fprintf(stderr,zf,za1,za2)
#define VPrintf3(zf,za1,za2,za3) \
fprintf(stderr,zf,za1,za2,za3)
#define VPrintf4(zf,za1,za2,za3,za4) \
fprintf(stderr,zf,za1,za2,za3,za4)
#define VPrintf5(zf,za1,za2,za3,za4,za5) \
fprintf(stderr,zf,za1,za2,za3,za4,za5)
 
#else
 
extern void bz_internal_error ( int errcode );
#define AssertH(cond,errcode) \
{ if (!(cond)) bz_internal_error ( errcode ); }
#define AssertD(cond,msg) do { } while (0)
#define VPrintf0(zf) do { } while (0)
#define VPrintf1(zf,za1) do { } while (0)
#define VPrintf2(zf,za1,za2) do { } while (0)
#define VPrintf3(zf,za1,za2,za3) do { } while (0)
#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0)
#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
 
#endif
 
 
#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
 
 
/*-- Header bytes. --*/
 
#define BZ_HDR_B 0x42 /* 'B' */
#define BZ_HDR_Z 0x5a /* 'Z' */
#define BZ_HDR_h 0x68 /* 'h' */
#define BZ_HDR_0 0x30 /* '0' */
/*-- Constants for the back end. --*/
 
#define BZ_MAX_ALPHA_SIZE 258
#define BZ_MAX_CODE_LEN 23
 
#define BZ_RUNA 0
#define BZ_RUNB 1
 
#define BZ_N_GROUPS 6
#define BZ_G_SIZE 50
#define BZ_N_ITERS 4
 
#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
 
 
 
/*-- Stuff for randomising repetitive blocks. --*/
 
extern Int32 BZ2_rNums[512];
 
#define BZ_RAND_DECLS \
Int32 rNToGo; \
Int32 rTPos \
 
#define BZ_RAND_INIT_MASK \
s->rNToGo = 0; \
s->rTPos = 0 \
 
#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
 
#define BZ_RAND_UPD_MASK \
if (s->rNToGo == 0) { \
s->rNToGo = BZ2_rNums[s->rTPos]; \
s->rTPos++; \
if (s->rTPos == 512) s->rTPos = 0; \
} \
s->rNToGo--;
 
 
 
/*-- Stuff for doing CRCs. --*/
 
extern UInt32 BZ2_crc32Table[256];
 
#define BZ_INITIALISE_CRC(crcVar) \
{ \
crcVar = 0xffffffffL; \
}
 
#define BZ_FINALISE_CRC(crcVar) \
{ \
crcVar = ~(crcVar); \
}
 
#define BZ_UPDATE_CRC(crcVar,cha) \
{ \
crcVar = (crcVar << 8) ^ \
BZ2_crc32Table[(crcVar >> 24) ^ \
((UChar)cha)]; \
}
 
 
 
/*-- States and modes for compression. --*/
 
#define BZ_M_IDLE 1
#define BZ_M_RUNNING 2
#define BZ_M_FLUSHING 3
#define BZ_M_FINISHING 4
 
#define BZ_S_OUTPUT 1
#define BZ_S_INPUT 2
 
#define BZ_N_RADIX 2
#define BZ_N_QSORT 12
#define BZ_N_SHELL 18
#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
 
 
 
 
/*-- Structure holding all the compression-side stuff. --*/
 
typedef
struct {
/* pointer back to the struct bz_stream */
bz_stream* strm;
 
/* mode this stream is in, and whether inputting */
/* or outputting data */
Int32 mode;
Int32 state;
 
/* remembers avail_in when flush/finish requested */
UInt32 avail_in_expect;
 
/* for doing the block sorting */
UInt32* arr1;
UInt32* arr2;
UInt32* ftab;
Int32 origPtr;
 
/* aliases for arr1 and arr2 */
UInt32* ptr;
UChar* block;
UInt16* mtfv;
UChar* zbits;
 
/* for deciding when to use the fallback sorting algorithm */
Int32 workFactor;
 
/* run-length-encoding of the input */
UInt32 state_in_ch;
Int32 state_in_len;
BZ_RAND_DECLS;
 
/* input and output limits and current posns */
Int32 nblock;
Int32 nblockMAX;
Int32 numZ;
Int32 state_out_pos;
 
/* map of bytes used in block */
Int32 nInUse;
Bool inUse[256];
UChar unseqToSeq[256];
 
/* the buffer for bit stream creation */
UInt32 bsBuff;
Int32 bsLive;
 
/* block and combined CRCs */
UInt32 blockCRC;
UInt32 combinedCRC;
 
/* misc administratium */
Int32 verbosity;
Int32 blockNo;
Int32 blockSize100k;
 
/* stuff for coding the MTF values */
Int32 nMTF;
Int32 mtfFreq [BZ_MAX_ALPHA_SIZE];
UChar selector [BZ_MAX_SELECTORS];
UChar selectorMtf[BZ_MAX_SELECTORS];
 
UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
/* second dimension: only 3 needed; 4 makes index calculations faster */
UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
 
}
EState;
 
 
 
/*-- externs for compression. --*/
 
extern void
BZ2_blockSort ( EState* );
 
extern void
BZ2_compressBlock ( EState*, Bool );
 
extern void
BZ2_bsInitWrite ( EState* );
 
extern void
BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
 
extern void
BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
 
 
 
/*-- states for decompression. --*/
 
#define BZ_X_IDLE 1
#define BZ_X_OUTPUT 2
 
#define BZ_X_MAGIC_1 10
#define BZ_X_MAGIC_2 11
#define BZ_X_MAGIC_3 12
#define BZ_X_MAGIC_4 13
#define BZ_X_BLKHDR_1 14
#define BZ_X_BLKHDR_2 15
#define BZ_X_BLKHDR_3 16
#define BZ_X_BLKHDR_4 17
#define BZ_X_BLKHDR_5 18
#define BZ_X_BLKHDR_6 19
#define BZ_X_BCRC_1 20
#define BZ_X_BCRC_2 21
#define BZ_X_BCRC_3 22
#define BZ_X_BCRC_4 23
#define BZ_X_RANDBIT 24
#define BZ_X_ORIGPTR_1 25
#define BZ_X_ORIGPTR_2 26
#define BZ_X_ORIGPTR_3 27
#define BZ_X_MAPPING_1 28
#define BZ_X_MAPPING_2 29
#define BZ_X_SELECTOR_1 30
#define BZ_X_SELECTOR_2 31
#define BZ_X_SELECTOR_3 32
#define BZ_X_CODING_1 33
#define BZ_X_CODING_2 34
#define BZ_X_CODING_3 35
#define BZ_X_MTF_1 36
#define BZ_X_MTF_2 37
#define BZ_X_MTF_3 38
#define BZ_X_MTF_4 39
#define BZ_X_MTF_5 40
#define BZ_X_MTF_6 41
#define BZ_X_ENDHDR_2 42
#define BZ_X_ENDHDR_3 43
#define BZ_X_ENDHDR_4 44
#define BZ_X_ENDHDR_5 45
#define BZ_X_ENDHDR_6 46
#define BZ_X_CCRC_1 47
#define BZ_X_CCRC_2 48
#define BZ_X_CCRC_3 49
#define BZ_X_CCRC_4 50
 
 
 
/*-- Constants for the fast MTF decoder. --*/
 
#define MTFA_SIZE 4096
#define MTFL_SIZE 16
 
 
 
/*-- Structure holding all the decompression-side stuff. --*/
 
typedef
struct {
/* pointer back to the struct bz_stream */
bz_stream* strm;
 
/* state indicator for this stream */
Int32 state;
 
/* for doing the final run-length decoding */
UChar state_out_ch;
Int32 state_out_len;
Bool blockRandomised;
BZ_RAND_DECLS;
 
/* the buffer for bit stream reading */
UInt32 bsBuff;
Int32 bsLive;
 
/* misc administratium */
Int32 blockSize100k;
Bool smallDecompress;
Int32 currBlockNo;
Int32 verbosity;
 
/* for undoing the Burrows-Wheeler transform */
Int32 origPtr;
UInt32 tPos;
Int32 k0;
Int32 unzftab[256];
Int32 nblock_used;
Int32 cftab[257];
Int32 cftabCopy[257];
 
/* for undoing the Burrows-Wheeler transform (FAST) */
UInt32 *tt;
 
/* for undoing the Burrows-Wheeler transform (SMALL) */
UInt16 *ll16;
UChar *ll4;
 
/* stored and calculated CRCs */
UInt32 storedBlockCRC;
UInt32 storedCombinedCRC;
UInt32 calculatedBlockCRC;
UInt32 calculatedCombinedCRC;
 
/* map of bytes used in block */
Int32 nInUse;
Bool inUse[256];
Bool inUse16[16];
UChar seqToUnseq[256];
 
/* for decoding the MTF values */
UChar mtfa [MTFA_SIZE];
Int32 mtfbase[256 / MTFL_SIZE];
UChar selector [BZ_MAX_SELECTORS];
UChar selectorMtf[BZ_MAX_SELECTORS];
UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
 
Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
Int32 minLens[BZ_N_GROUPS];
 
/* save area for scalars in the main decompress code */
Int32 save_i;
Int32 save_j;
Int32 save_t;
Int32 save_alphaSize;
Int32 save_nGroups;
Int32 save_nSelectors;
Int32 save_EOB;
Int32 save_groupNo;
Int32 save_groupPos;
Int32 save_nextSym;
Int32 save_nblockMAX;
Int32 save_nblock;
Int32 save_es;
Int32 save_N;
Int32 save_curr;
Int32 save_zt;
Int32 save_zn;
Int32 save_zvec;
Int32 save_zj;
Int32 save_gSel;
Int32 save_gMinlen;
Int32* save_gLimit;
Int32* save_gBase;
Int32* save_gPerm;
 
}
DState;
 
 
 
/*-- Macros for decompression. --*/
 
#define BZ_GET_FAST(cccc) \
s->tPos = s->tt[s->tPos]; \
cccc = (UChar)(s->tPos & 0xff); \
s->tPos >>= 8;
 
#define BZ_GET_FAST_C(cccc) \
c_tPos = c_tt[c_tPos]; \
cccc = (UChar)(c_tPos & 0xff); \
c_tPos >>= 8;
 
#define SET_LL4(i,n) \
{ if (((i) & 0x1) == 0) \
s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
}
 
#define GET_LL4(i) \
((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
 
#define SET_LL(i,n) \
{ s->ll16[i] = (UInt16)(n & 0x0000ffff); \
SET_LL4(i, n >> 16); \
}
 
#define GET_LL(i) \
(((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
 
#define BZ_GET_SMALL(cccc) \
cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \
s->tPos = GET_LL(s->tPos);
 
 
/*-- externs for decompression. --*/
 
extern Int32
BZ2_indexIntoF ( Int32, Int32* );
 
extern Int32
BZ2_decompress ( DState* );
 
extern void
BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
Int32, Int32, Int32 );
 
 
#endif
 
 
/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
 
#ifdef BZ_NO_STDIO
#ifndef NULL
#define NULL 0
#endif
#endif
 
 
/*-------------------------------------------------------------*/
/*--- end bzlib_private.h ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bspatch.1
0,0 → 1,59
.\"-
.\" Copyright 2003-2005 Colin Percival
.\" All rights reserved
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted providing that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.1,v 1.1 2005/08/06 01:59:06 cperciva Exp $
.\"
.Dd May 18, 2003
.Dt BSPATCH 1
.Os FreeBSD
.Sh NAME
.Nm bspatch
.Nd apply a patch built with bsdiff(1)
.Sh SYNOPSIS
.Nm
.Ao Ar oldfile Ac Ao Ar newfile Ac Ao Ar patchfile Ac
.Sh DESCRIPTION
.Nm
generates
.Ao Ar newfile Ac
from
.Ao Ar oldfile Ac
and
.Ao Ar patchfile Ac
where
.Ao Ar patchfile Ac
is a binary patch built by bsdiff(1).
.Pp
.Nm
uses memory equal to the size of
.Ao Ar oldfile Ac
plus the size of
.Ao Ar newfile Ac ,
but can tolerate a very small working set without a dramatic loss
of performance.
.Sh SEE ALSO
.Xr bsdiff 1
.Sh AUTHORS
.An Colin Percival Aq cperciva@freebsd.org
/nw_plus/utils/source/bsdiff-4.3/win32/blocksort.c
0,0 → 1,1094
 
/*-------------------------------------------------------------*/
/*--- Block sorting machinery ---*/
/*--- blocksort.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#include "bzlib_private.h"
 
/*---------------------------------------------*/
/*--- Fallback O(N log(N)^2) sorting ---*/
/*--- algorithm, for repetitive blocks ---*/
/*---------------------------------------------*/
 
/*---------------------------------------------*/
static
__inline__
void fallbackSimpleSort ( UInt32* fmap,
UInt32* eclass,
Int32 lo,
Int32 hi )
{
Int32 i, j, tmp;
UInt32 ec_tmp;
 
if (lo == hi) return;
 
if (hi - lo > 3) {
for ( i = hi-4; i >= lo; i-- ) {
tmp = fmap[i];
ec_tmp = eclass[tmp];
for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
fmap[j-4] = fmap[j];
fmap[j-4] = tmp;
}
}
 
for ( i = hi-1; i >= lo; i-- ) {
tmp = fmap[i];
ec_tmp = eclass[tmp];
for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
fmap[j-1] = fmap[j];
fmap[j-1] = tmp;
}
}
 
 
/*---------------------------------------------*/
#define fswap(zz1, zz2) \
{ Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
 
#define fvswap(zzp1, zzp2, zzn) \
{ \
Int32 yyp1 = (zzp1); \
Int32 yyp2 = (zzp2); \
Int32 yyn = (zzn); \
while (yyn > 0) { \
fswap(fmap[yyp1], fmap[yyp2]); \
yyp1++; yyp2++; yyn--; \
} \
}
 
 
#define fmin(a,b) ((a) < (b)) ? (a) : (b)
 
#define fpush(lz,hz) { stackLo[sp] = lz; \
stackHi[sp] = hz; \
sp++; }
 
#define fpop(lz,hz) { sp--; \
lz = stackLo[sp]; \
hz = stackHi[sp]; }
 
#define FALLBACK_QSORT_SMALL_THRESH 10
#define FALLBACK_QSORT_STACK_SIZE 100
 
 
static
void fallbackQSort3 ( UInt32* fmap,
UInt32* eclass,
Int32 loSt,
Int32 hiSt )
{
Int32 unLo, unHi, ltLo, gtHi, n, m;
Int32 sp, lo, hi;
UInt32 med, r, r3;
Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
 
r = 0;
 
sp = 0;
fpush ( loSt, hiSt );
 
while (sp > 0) {
 
AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );
 
fpop ( lo, hi );
if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
fallbackSimpleSort ( fmap, eclass, lo, hi );
continue;
}
 
/* Random partitioning. Median of 3 sometimes fails to
avoid bad cases. Median of 9 seems to help but
looks rather expensive. This too seems to work but
is cheaper. Guidance for the magic constants
7621 and 32768 is taken from Sedgewick's algorithms
book, chapter 35.
*/
r = ((r * 7621) + 1) % 32768;
r3 = r % 3;
if (r3 == 0) med = eclass[fmap[lo]]; else
if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
med = eclass[fmap[hi]];
 
unLo = ltLo = lo;
unHi = gtHi = hi;
 
while (1) {
while (1) {
if (unLo > unHi) break;
n = (Int32)eclass[fmap[unLo]] - (Int32)med;
if (n == 0) {
fswap(fmap[unLo], fmap[ltLo]);
ltLo++; unLo++;
continue;
};
if (n > 0) break;
unLo++;
}
while (1) {
if (unLo > unHi) break;
n = (Int32)eclass[fmap[unHi]] - (Int32)med;
if (n == 0) {
fswap(fmap[unHi], fmap[gtHi]);
gtHi--; unHi--;
continue;
};
if (n < 0) break;
unHi--;
}
if (unLo > unHi) break;
fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
}
 
AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
 
if (gtHi < ltLo) continue;
 
n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
 
n = lo + unLo - ltLo - 1;
m = hi - (gtHi - unHi) + 1;
 
if (n - lo > hi - m) {
fpush ( lo, n );
fpush ( m, hi );
} else {
fpush ( m, hi );
fpush ( lo, n );
}
}
}
 
#undef fmin
#undef fpush
#undef fpop
#undef fswap
#undef fvswap
#undef FALLBACK_QSORT_SMALL_THRESH
#undef FALLBACK_QSORT_STACK_SIZE
 
 
/*---------------------------------------------*/
/* Pre:
nblock > 0
eclass exists for [0 .. nblock-1]
((UChar*)eclass) [0 .. nblock-1] holds block
ptr exists for [0 .. nblock-1]
 
Post:
((UChar*)eclass) [0 .. nblock-1] holds block
All other areas of eclass destroyed
fmap [0 .. nblock-1] holds sorted order
bhtab [ 0 .. 2+(nblock/32) ] destroyed
*/
 
#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
#define WORD_BH(zz) bhtab[(zz) >> 5]
#define UNALIGNED_BH(zz) ((zz) & 0x01f)
 
static
void fallbackSort ( UInt32* fmap,
UInt32* eclass,
UInt32* bhtab,
Int32 nblock,
Int32 verb )
{
Int32 ftab[257];
Int32 ftabCopy[256];
Int32 H, i, j, k, l, r, cc, cc1;
Int32 nNotDone;
Int32 nBhtab;
UChar* eclass8 = (UChar*)eclass;
 
/*--
Initial 1-char radix sort to generate
initial fmap and initial BH bits.
--*/
if (verb >= 4)
VPrintf0 ( " bucket sorting ...\n" );
for (i = 0; i < 257; i++) ftab[i] = 0;
for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i];
for (i = 1; i < 257; i++) ftab[i] += ftab[i-1];
 
for (i = 0; i < nblock; i++) {
j = eclass8[i];
k = ftab[j] - 1;
ftab[j] = k;
fmap[k] = i;
}
 
nBhtab = 2 + (nblock / 32);
for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
for (i = 0; i < 256; i++) SET_BH(ftab[i]);
 
/*--
Inductively refine the buckets. Kind-of an
"exponential radix sort" (!), inspired by the
Manber-Myers suffix array construction algorithm.
--*/
 
/*-- set sentinel bits for block-end detection --*/
for (i = 0; i < 32; i++) {
SET_BH(nblock + 2*i);
CLEAR_BH(nblock + 2*i + 1);
}
 
/*-- the log(N) loop --*/
H = 1;
while (1) {
 
if (verb >= 4)
VPrintf1 ( " depth %6d has ", H );
 
j = 0;
for (i = 0; i < nblock; i++) {
if (ISSET_BH(i)) j = i;
k = fmap[i] - H; if (k < 0) k += nblock;
eclass[k] = j;
}
 
nNotDone = 0;
r = -1;
while (1) {
 
/*-- find the next non-singleton bucket --*/
k = r + 1;
while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
if (ISSET_BH(k)) {
while (WORD_BH(k) == 0xffffffff) k += 32;
while (ISSET_BH(k)) k++;
}
l = k - 1;
if (l >= nblock) break;
while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
if (!ISSET_BH(k)) {
while (WORD_BH(k) == 0x00000000) k += 32;
while (!ISSET_BH(k)) k++;
}
r = k - 1;
if (r >= nblock) break;
 
/*-- now [l, r] bracket current bucket --*/
if (r > l) {
nNotDone += (r - l + 1);
fallbackQSort3 ( fmap, eclass, l, r );
 
/*-- scan bucket and generate header bits-- */
cc = -1;
for (i = l; i <= r; i++) {
cc1 = eclass[fmap[i]];
if (cc != cc1) { SET_BH(i); cc = cc1; };
}
}
}
 
if (verb >= 4)
VPrintf1 ( "%6d unresolved strings\n", nNotDone );
 
H *= 2;
if (H > nblock || nNotDone == 0) break;
}
 
/*--
Reconstruct the original block in
eclass8 [0 .. nblock-1], since the
previous phase destroyed it.
--*/
if (verb >= 4)
VPrintf0 ( " reconstructing block ...\n" );
j = 0;
for (i = 0; i < nblock; i++) {
while (ftabCopy[j] == 0) j++;
ftabCopy[j]--;
eclass8[fmap[i]] = (UChar)j;
}
AssertH ( j < 256, 1005 );
}
 
#undef SET_BH
#undef CLEAR_BH
#undef ISSET_BH
#undef WORD_BH
#undef UNALIGNED_BH
 
 
/*---------------------------------------------*/
/*--- The main, O(N^2 log(N)) sorting ---*/
/*--- algorithm. Faster for "normal" ---*/
/*--- non-repetitive blocks. ---*/
/*---------------------------------------------*/
 
/*---------------------------------------------*/
static
__inline__
Bool mainGtU ( UInt32 i1,
UInt32 i2,
UChar* block,
UInt16* quadrant,
UInt32 nblock,
Int32* budget )
{
Int32 k;
UChar c1, c2;
UInt16 s1, s2;
 
AssertD ( i1 != i2, "mainGtU" );
/* 1 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 2 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 3 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 4 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 5 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 6 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 7 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 8 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 9 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 10 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 11 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
/* 12 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
i1++; i2++;
 
k = nblock + 8;
 
do {
/* 1 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 2 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 3 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 4 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 5 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 6 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 7 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
/* 8 */
c1 = block[i1]; c2 = block[i2];
if (c1 != c2) return (c1 > c2);
s1 = quadrant[i1]; s2 = quadrant[i2];
if (s1 != s2) return (s1 > s2);
i1++; i2++;
 
if (i1 >= nblock) i1 -= nblock;
if (i2 >= nblock) i2 -= nblock;
 
k -= 8;
(*budget)--;
}
while (k >= 0);
 
return False;
}
 
 
/*---------------------------------------------*/
/*--
Knuth's increments seem to work better
than Incerpi-Sedgewick here. Possibly
because the number of elems to sort is
usually small, typically <= 20.
--*/
static
Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
9841, 29524, 88573, 265720,
797161, 2391484 };
 
static
void mainSimpleSort ( UInt32* ptr,
UChar* block,
UInt16* quadrant,
Int32 nblock,
Int32 lo,
Int32 hi,
Int32 d,
Int32* budget )
{
Int32 i, j, h, bigN, hp;
UInt32 v;
 
bigN = hi - lo + 1;
if (bigN < 2) return;
 
hp = 0;
while (incs[hp] < bigN) hp++;
hp--;
 
for (; hp >= 0; hp--) {
h = incs[hp];
 
i = lo + h;
while (True) {
 
/*-- copy 1 --*/
if (i > hi) break;
v = ptr[i];
j = i;
while ( mainGtU (
ptr[j-h]+d, v+d, block, quadrant, nblock, budget
) ) {
ptr[j] = ptr[j-h];
j = j - h;
if (j <= (lo + h - 1)) break;
}
ptr[j] = v;
i++;
 
/*-- copy 2 --*/
if (i > hi) break;
v = ptr[i];
j = i;
while ( mainGtU (
ptr[j-h]+d, v+d, block, quadrant, nblock, budget
) ) {
ptr[j] = ptr[j-h];
j = j - h;
if (j <= (lo + h - 1)) break;
}
ptr[j] = v;
i++;
 
/*-- copy 3 --*/
if (i > hi) break;
v = ptr[i];
j = i;
while ( mainGtU (
ptr[j-h]+d, v+d, block, quadrant, nblock, budget
) ) {
ptr[j] = ptr[j-h];
j = j - h;
if (j <= (lo + h - 1)) break;
}
ptr[j] = v;
i++;
 
if (*budget < 0) return;
}
}
}
 
 
/*---------------------------------------------*/
/*--
The following is an implementation of
an elegant 3-way quicksort for strings,
described in a paper "Fast Algorithms for
Sorting and Searching Strings", by Robert
Sedgewick and Jon L. Bentley.
--*/
 
#define mswap(zz1, zz2) \
{ Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
 
#define mvswap(zzp1, zzp2, zzn) \
{ \
Int32 yyp1 = (zzp1); \
Int32 yyp2 = (zzp2); \
Int32 yyn = (zzn); \
while (yyn > 0) { \
mswap(ptr[yyp1], ptr[yyp2]); \
yyp1++; yyp2++; yyn--; \
} \
}
 
static
__inline__
UChar mmed3 ( UChar a, UChar b, UChar c )
{
UChar t;
if (a > b) { t = a; a = b; b = t; };
if (b > c) {
b = c;
if (a > b) b = a;
}
return b;
}
 
#define mmin(a,b) ((a) < (b)) ? (a) : (b)
 
#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
stackHi[sp] = hz; \
stackD [sp] = dz; \
sp++; }
 
#define mpop(lz,hz,dz) { sp--; \
lz = stackLo[sp]; \
hz = stackHi[sp]; \
dz = stackD [sp]; }
 
 
#define mnextsize(az) (nextHi[az]-nextLo[az])
 
#define mnextswap(az,bz) \
{ Int32 tz; \
tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
 
 
#define MAIN_QSORT_SMALL_THRESH 20
#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
#define MAIN_QSORT_STACK_SIZE 100
 
static
void mainQSort3 ( UInt32* ptr,
UChar* block,
UInt16* quadrant,
Int32 nblock,
Int32 loSt,
Int32 hiSt,
Int32 dSt,
Int32* budget )
{
Int32 unLo, unHi, ltLo, gtHi, n, m, med;
Int32 sp, lo, hi, d;
 
Int32 stackLo[MAIN_QSORT_STACK_SIZE];
Int32 stackHi[MAIN_QSORT_STACK_SIZE];
Int32 stackD [MAIN_QSORT_STACK_SIZE];
 
Int32 nextLo[3];
Int32 nextHi[3];
Int32 nextD [3];
 
sp = 0;
mpush ( loSt, hiSt, dSt );
 
while (sp > 0) {
 
AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );
 
mpop ( lo, hi, d );
if (hi - lo < MAIN_QSORT_SMALL_THRESH ||
d > MAIN_QSORT_DEPTH_THRESH) {
mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
if (*budget < 0) return;
continue;
}
 
med = (Int32)
mmed3 ( block[ptr[ lo ]+d],
block[ptr[ hi ]+d],
block[ptr[ (lo+hi)>>1 ]+d] );
 
unLo = ltLo = lo;
unHi = gtHi = hi;
 
while (True) {
while (True) {
if (unLo > unHi) break;
n = ((Int32)block[ptr[unLo]+d]) - med;
if (n == 0) {
mswap(ptr[unLo], ptr[ltLo]);
ltLo++; unLo++; continue;
};
if (n > 0) break;
unLo++;
}
while (True) {
if (unLo > unHi) break;
n = ((Int32)block[ptr[unHi]+d]) - med;
if (n == 0) {
mswap(ptr[unHi], ptr[gtHi]);
gtHi--; unHi--; continue;
};
if (n < 0) break;
unHi--;
}
if (unLo > unHi) break;
mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
}
 
AssertD ( unHi == unLo-1, "mainQSort3(2)" );
 
if (gtHi < ltLo) {
mpush(lo, hi, d+1 );
continue;
}
 
n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
 
n = lo + unLo - ltLo - 1;
m = hi - (gtHi - unHi) + 1;
 
nextLo[0] = lo; nextHi[0] = n; nextD[0] = d;
nextLo[1] = m; nextHi[1] = hi; nextD[1] = d;
nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
 
if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
 
AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
 
mpush (nextLo[0], nextHi[0], nextD[0]);
mpush (nextLo[1], nextHi[1], nextD[1]);
mpush (nextLo[2], nextHi[2], nextD[2]);
}
}
 
#undef mswap
#undef mvswap
#undef mpush
#undef mpop
#undef mmin
#undef mnextsize
#undef mnextswap
#undef MAIN_QSORT_SMALL_THRESH
#undef MAIN_QSORT_DEPTH_THRESH
#undef MAIN_QSORT_STACK_SIZE
 
 
/*---------------------------------------------*/
/* Pre:
nblock > N_OVERSHOOT
block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
((UChar*)block32) [0 .. nblock-1] holds block
ptr exists for [0 .. nblock-1]
 
Post:
((UChar*)block32) [0 .. nblock-1] holds block
All other areas of block32 destroyed
ftab [0 .. 65536 ] destroyed
ptr [0 .. nblock-1] holds sorted order
if (*budget < 0), sorting was abandoned
*/
 
#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
#define SETMASK (1 << 21)
#define CLEARMASK (~(SETMASK))
 
static
void mainSort ( UInt32* ptr,
UChar* block,
UInt16* quadrant,
UInt32* ftab,
Int32 nblock,
Int32 verb,
Int32* budget )
{
Int32 i, j, k, ss, sb;
Int32 runningOrder[256];
Bool bigDone[256];
Int32 copyStart[256];
Int32 copyEnd [256];
UChar c1;
Int32 numQSorted;
UInt16 s;
if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" );
 
/*-- set up the 2-byte frequency table --*/
for (i = 65536; i >= 0; i--) ftab[i] = 0;
 
j = block[0] << 8;
i = nblock-1;
for (; i >= 3; i -= 4) {
quadrant[i] = 0;
j = (j >> 8) | ( ((UInt16)block[i]) << 8);
ftab[j]++;
quadrant[i-1] = 0;
j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
ftab[j]++;
quadrant[i-2] = 0;
j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
ftab[j]++;
quadrant[i-3] = 0;
j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
ftab[j]++;
}
for (; i >= 0; i--) {
quadrant[i] = 0;
j = (j >> 8) | ( ((UInt16)block[i]) << 8);
ftab[j]++;
}
 
/*-- (emphasises close relationship of block & quadrant) --*/
for (i = 0; i < BZ_N_OVERSHOOT; i++) {
block [nblock+i] = block[i];
quadrant[nblock+i] = 0;
}
 
if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" );
 
/*-- Complete the initial radix sort --*/
for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
 
s = block[0] << 8;
i = nblock-1;
for (; i >= 3; i -= 4) {
s = (s >> 8) | (block[i] << 8);
j = ftab[s] -1;
ftab[s] = j;
ptr[j] = i;
s = (s >> 8) | (block[i-1] << 8);
j = ftab[s] -1;
ftab[s] = j;
ptr[j] = i-1;
s = (s >> 8) | (block[i-2] << 8);
j = ftab[s] -1;
ftab[s] = j;
ptr[j] = i-2;
s = (s >> 8) | (block[i-3] << 8);
j = ftab[s] -1;
ftab[s] = j;
ptr[j] = i-3;
}
for (; i >= 0; i--) {
s = (s >> 8) | (block[i] << 8);
j = ftab[s] -1;
ftab[s] = j;
ptr[j] = i;
}
 
/*--
Now ftab contains the first loc of every small bucket.
Calculate the running order, from smallest to largest
big bucket.
--*/
for (i = 0; i <= 255; i++) {
bigDone [i] = False;
runningOrder[i] = i;
}
 
{
Int32 vv;
Int32 h = 1;
do h = 3 * h + 1; while (h <= 256);
do {
h = h / 3;
for (i = h; i <= 255; i++) {
vv = runningOrder[i];
j = i;
while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
runningOrder[j] = runningOrder[j-h];
j = j - h;
if (j <= (h - 1)) goto zero;
}
zero:
runningOrder[j] = vv;
}
} while (h != 1);
}
 
/*--
The main sorting loop.
--*/
 
numQSorted = 0;
 
for (i = 0; i <= 255; i++) {
 
/*--
Process big buckets, starting with the least full.
Basically this is a 3-step process in which we call
mainQSort3 to sort the small buckets [ss, j], but
also make a big effort to avoid the calls if we can.
--*/
ss = runningOrder[i];
 
/*--
Step 1:
Complete the big bucket [ss] by quicksorting
any unsorted small buckets [ss, j], for j != ss.
Hopefully previous pointer-scanning phases have already
completed many of the small buckets [ss, j], so
we don't have to sort them at all.
--*/
for (j = 0; j <= 255; j++) {
if (j != ss) {
sb = (ss << 8) + j;
if ( ! (ftab[sb] & SETMASK) ) {
Int32 lo = ftab[sb] & CLEARMASK;
Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
if (hi > lo) {
if (verb >= 4)
VPrintf4 ( " qsort [0x%x, 0x%x] "
"done %d this %d\n",
ss, j, numQSorted, hi - lo + 1 );
mainQSort3 (
ptr, block, quadrant, nblock,
lo, hi, BZ_N_RADIX, budget
);
numQSorted += (hi - lo + 1);
if (*budget < 0) return;
}
}
ftab[sb] |= SETMASK;
}
}
 
AssertH ( !bigDone[ss], 1006 );
 
/*--
Step 2:
Now scan this big bucket [ss] so as to synthesise the
sorted order for small buckets [t, ss] for all t,
including, magically, the bucket [ss,ss] too.
This will avoid doing Real Work in subsequent Step 1's.
--*/
{
for (j = 0; j <= 255; j++) {
copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK;
copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
}
for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
k = ptr[j]-1; if (k < 0) k += nblock;
c1 = block[k];
if (!bigDone[c1])
ptr[ copyStart[c1]++ ] = k;
}
for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
k = ptr[j]-1; if (k < 0) k += nblock;
c1 = block[k];
if (!bigDone[c1])
ptr[ copyEnd[c1]-- ] = k;
}
}
 
AssertH ( (copyStart[ss]-1 == copyEnd[ss])
||
/* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
Necessity for this case is demonstrated by compressing
a sequence of approximately 48.5 million of character
251; 1.0.0/1.0.1 will then die here. */
(copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
1007 )
 
for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
 
/*--
Step 3:
The [ss] big bucket is now done. Record this fact,
and update the quadrant descriptors. Remember to
update quadrants in the overshoot area too, if
necessary. The "if (i < 255)" test merely skips
this updating for the last bucket processed, since
updating for the last bucket is pointless.
 
The quadrant array provides a way to incrementally
cache sort orderings, as they appear, so as to
make subsequent comparisons in fullGtU() complete
faster. For repetitive blocks this makes a big
difference (but not big enough to be able to avoid
the fallback sorting mechanism, exponential radix sort).
 
The precise meaning is: at all times:
 
for 0 <= i < nblock and 0 <= j <= nblock
 
if block[i] != block[j],
 
then the relative values of quadrant[i] and
quadrant[j] are meaningless.
 
else {
if quadrant[i] < quadrant[j]
then the string starting at i lexicographically
precedes the string starting at j
 
else if quadrant[i] > quadrant[j]
then the string starting at j lexicographically
precedes the string starting at i
 
else
the relative ordering of the strings starting
at i and j has not yet been determined.
}
--*/
bigDone[ss] = True;
 
if (i < 255) {
Int32 bbStart = ftab[ss << 8] & CLEARMASK;
Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
Int32 shifts = 0;
 
while ((bbSize >> shifts) > 65534) shifts++;
 
for (j = bbSize-1; j >= 0; j--) {
Int32 a2update = ptr[bbStart + j];
UInt16 qVal = (UInt16)(j >> shifts);
quadrant[a2update] = qVal;
if (a2update < BZ_N_OVERSHOOT)
quadrant[a2update + nblock] = qVal;
}
AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
}
 
}
 
if (verb >= 4)
VPrintf3 ( " %d pointers, %d sorted, %d scanned\n",
nblock, numQSorted, nblock - numQSorted );
}
 
#undef BIGFREQ
#undef SETMASK
#undef CLEARMASK
 
 
/*---------------------------------------------*/
/* Pre:
nblock > 0
arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
((UChar*)arr2) [0 .. nblock-1] holds block
arr1 exists for [0 .. nblock-1]
 
Post:
((UChar*)arr2) [0 .. nblock-1] holds block
All other areas of block destroyed
ftab [ 0 .. 65536 ] destroyed
arr1 [0 .. nblock-1] holds sorted order
*/
void BZ2_blockSort ( EState* s )
{
UInt32* ptr = s->ptr;
UChar* block = s->block;
UInt32* ftab = s->ftab;
Int32 nblock = s->nblock;
Int32 verb = s->verbosity;
Int32 wfact = s->workFactor;
UInt16* quadrant;
Int32 budget;
Int32 budgetInit;
Int32 i;
 
if (nblock < 10000) {
fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
} else {
/* Calculate the location for quadrant, remembering to get
the alignment right. Assumes that &(block[0]) is at least
2-byte aligned -- this should be ok since block is really
the first section of arr2.
*/
i = nblock+BZ_N_OVERSHOOT;
if (i & 1) i++;
quadrant = (UInt16*)(&(block[i]));
 
/* (wfact-1) / 3 puts the default-factor-30
transition point at very roughly the same place as
with v0.1 and v0.9.0.
Not that it particularly matters any more, since the
resulting compressed stream is now the same regardless
of whether or not we use the main sort or fallback sort.
*/
if (wfact < 1 ) wfact = 1;
if (wfact > 100) wfact = 100;
budgetInit = nblock * ((wfact-1) / 3);
budget = budgetInit;
 
mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
if (verb >= 3)
VPrintf3 ( " %d work, %d block, ratio %5.2f\n",
budgetInit - budget,
nblock,
(float)(budgetInit - budget) /
(float)(nblock==0 ? 1 : nblock) );
if (budget < 0) {
if (verb >= 2)
VPrintf0 ( " too repetitive; using fallback"
" sorting algorithm\n" );
fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
}
}
 
s->origPtr = -1;
for (i = 0; i < s->nblock; i++)
if (ptr[i] == 0)
{ s->origPtr = i; break; };
 
AssertH( s->origPtr != -1, 1003 );
}
 
 
/*-------------------------------------------------------------*/
/*--- end blocksort.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bzlib.c
0,0 → 1,1571
 
/*-------------------------------------------------------------*/
/*--- Library top-level functions. ---*/
/*--- bzlib.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
/* CHANGES
0.9.0 -- original version.
0.9.0a/b -- no changes in this file.
0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress().
fixed bzWrite/bzRead to ignore zero-length requests.
fixed bzread to correctly handle read requests after EOF.
wrong parameter order in call to bzDecompressInit in
bzBuffToBuffDecompress. Fixed.
*/
 
#include "bzlib_private.h"
 
 
/*---------------------------------------------------*/
/*--- Compression stuff ---*/
/*---------------------------------------------------*/
 
 
/*---------------------------------------------------*/
#ifndef BZ_NO_STDIO
void BZ2_bz__AssertH__fail ( int errcode )
{
fprintf(stderr,
"\n\nbzip2/libbzip2: internal error number %d.\n"
"This is a bug in bzip2/libbzip2, %s.\n"
"Please report it to me at: jseward@bzip.org. If this happened\n"
"when you were using some program which uses libbzip2 as a\n"
"component, you should also report this bug to the author(s)\n"
"of that program. Please make an effort to report this bug;\n"
"timely and accurate bug reports eventually lead to higher\n"
"quality software. Thanks. Julian Seward, 15 February 2005.\n\n",
errcode,
BZ2_bzlibVersion()
);
 
if (errcode == 1007) {
fprintf(stderr,
"\n*** A special note about internal error number 1007 ***\n"
"\n"
"Experience suggests that a common cause of i.e. 1007\n"
"is unreliable memory or other hardware. The 1007 assertion\n"
"just happens to cross-check the results of huge numbers of\n"
"memory reads/writes, and so acts (unintendedly) as a stress\n"
"test of your memory system.\n"
"\n"
"I suggest the following: try compressing the file again,\n"
"possibly monitoring progress in detail with the -vv flag.\n"
"\n"
"* If the error cannot be reproduced, and/or happens at different\n"
" points in compression, you may have a flaky memory system.\n"
" Try a memory-test program. I have used Memtest86\n"
" (www.memtest86.com). At the time of writing it is free (GPLd).\n"
" Memtest86 tests memory much more thorougly than your BIOSs\n"
" power-on test, and may find failures that the BIOS doesn't.\n"
"\n"
"* If the error can be repeatably reproduced, this is a bug in\n"
" bzip2, and I would very much like to hear about it. Please\n"
" let me know, and, ideally, save a copy of the file causing the\n"
" problem -- without which I will be unable to investigate it.\n"
"\n"
);
}
 
exit(3);
}
#endif
 
 
/*---------------------------------------------------*/
static
int bz_config_ok ( void )
{
if (sizeof(int) != 4) return 0;
if (sizeof(short) != 2) return 0;
if (sizeof(char) != 1) return 0;
return 1;
}
 
 
/*---------------------------------------------------*/
static
void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
{
void* v = malloc ( items * size );
return v;
}
 
static
void default_bzfree ( void* opaque, void* addr )
{
if (addr != NULL) free ( addr );
}
 
 
/*---------------------------------------------------*/
static
void prepare_new_block ( EState* s )
{
Int32 i;
s->nblock = 0;
s->numZ = 0;
s->state_out_pos = 0;
BZ_INITIALISE_CRC ( s->blockCRC );
for (i = 0; i < 256; i++) s->inUse[i] = False;
s->blockNo++;
}
 
 
/*---------------------------------------------------*/
static
void init_RL ( EState* s )
{
s->state_in_ch = 256;
s->state_in_len = 0;
}
 
 
static
Bool isempty_RL ( EState* s )
{
if (s->state_in_ch < 256 && s->state_in_len > 0)
return False; else
return True;
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzCompressInit)
( bz_stream* strm,
int blockSize100k,
int verbosity,
int workFactor )
{
Int32 n;
EState* s;
 
if (!bz_config_ok()) return BZ_CONFIG_ERROR;
 
if (strm == NULL ||
blockSize100k < 1 || blockSize100k > 9 ||
workFactor < 0 || workFactor > 250)
return BZ_PARAM_ERROR;
 
if (workFactor == 0) workFactor = 30;
if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
 
s = BZALLOC( sizeof(EState) );
if (s == NULL) return BZ_MEM_ERROR;
s->strm = strm;
 
s->arr1 = NULL;
s->arr2 = NULL;
s->ftab = NULL;
 
n = 100000 * blockSize100k;
s->arr1 = BZALLOC( n * sizeof(UInt32) );
s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
s->ftab = BZALLOC( 65537 * sizeof(UInt32) );
 
if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
if (s->arr1 != NULL) BZFREE(s->arr1);
if (s->arr2 != NULL) BZFREE(s->arr2);
if (s->ftab != NULL) BZFREE(s->ftab);
if (s != NULL) BZFREE(s);
return BZ_MEM_ERROR;
}
 
s->blockNo = 0;
s->state = BZ_S_INPUT;
s->mode = BZ_M_RUNNING;
s->combinedCRC = 0;
s->blockSize100k = blockSize100k;
s->nblockMAX = 100000 * blockSize100k - 19;
s->verbosity = verbosity;
s->workFactor = workFactor;
 
s->block = (UChar*)s->arr2;
s->mtfv = (UInt16*)s->arr1;
s->zbits = NULL;
s->ptr = (UInt32*)s->arr1;
 
strm->state = s;
strm->total_in_lo32 = 0;
strm->total_in_hi32 = 0;
strm->total_out_lo32 = 0;
strm->total_out_hi32 = 0;
init_RL ( s );
prepare_new_block ( s );
return BZ_OK;
}
 
 
/*---------------------------------------------------*/
static
void add_pair_to_block ( EState* s )
{
Int32 i;
UChar ch = (UChar)(s->state_in_ch);
for (i = 0; i < s->state_in_len; i++) {
BZ_UPDATE_CRC( s->blockCRC, ch );
}
s->inUse[s->state_in_ch] = True;
switch (s->state_in_len) {
case 1:
s->block[s->nblock] = (UChar)ch; s->nblock++;
break;
case 2:
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = (UChar)ch; s->nblock++;
break;
case 3:
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = (UChar)ch; s->nblock++;
break;
default:
s->inUse[s->state_in_len-4] = True;
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = (UChar)ch; s->nblock++;
s->block[s->nblock] = ((UChar)(s->state_in_len-4));
s->nblock++;
break;
}
}
 
 
/*---------------------------------------------------*/
static
void flush_RL ( EState* s )
{
if (s->state_in_ch < 256) add_pair_to_block ( s );
init_RL ( s );
}
 
 
/*---------------------------------------------------*/
#define ADD_CHAR_TO_BLOCK(zs,zchh0) \
{ \
UInt32 zchh = (UInt32)(zchh0); \
/*-- fast track the common case --*/ \
if (zchh != zs->state_in_ch && \
zs->state_in_len == 1) { \
UChar ch = (UChar)(zs->state_in_ch); \
BZ_UPDATE_CRC( zs->blockCRC, ch ); \
zs->inUse[zs->state_in_ch] = True; \
zs->block[zs->nblock] = (UChar)ch; \
zs->nblock++; \
zs->state_in_ch = zchh; \
} \
else \
/*-- general, uncommon cases --*/ \
if (zchh != zs->state_in_ch || \
zs->state_in_len == 255) { \
if (zs->state_in_ch < 256) \
add_pair_to_block ( zs ); \
zs->state_in_ch = zchh; \
zs->state_in_len = 1; \
} else { \
zs->state_in_len++; \
} \
}
 
 
/*---------------------------------------------------*/
static
Bool copy_input_until_stop ( EState* s )
{
Bool progress_in = False;
 
if (s->mode == BZ_M_RUNNING) {
 
/*-- fast track the common case --*/
while (True) {
/*-- block full? --*/
if (s->nblock >= s->nblockMAX) break;
/*-- no input? --*/
if (s->strm->avail_in == 0) break;
progress_in = True;
ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
s->strm->next_in++;
s->strm->avail_in--;
s->strm->total_in_lo32++;
if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
}
 
} else {
 
/*-- general, uncommon case --*/
while (True) {
/*-- block full? --*/
if (s->nblock >= s->nblockMAX) break;
/*-- no input? --*/
if (s->strm->avail_in == 0) break;
/*-- flush/finish end? --*/
if (s->avail_in_expect == 0) break;
progress_in = True;
ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) );
s->strm->next_in++;
s->strm->avail_in--;
s->strm->total_in_lo32++;
if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
s->avail_in_expect--;
}
}
return progress_in;
}
 
 
/*---------------------------------------------------*/
static
Bool copy_output_until_stop ( EState* s )
{
Bool progress_out = False;
 
while (True) {
 
/*-- no output space? --*/
if (s->strm->avail_out == 0) break;
 
/*-- block done? --*/
if (s->state_out_pos >= s->numZ) break;
 
progress_out = True;
*(s->strm->next_out) = s->zbits[s->state_out_pos];
s->state_out_pos++;
s->strm->avail_out--;
s->strm->next_out++;
s->strm->total_out_lo32++;
if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
}
 
return progress_out;
}
 
 
/*---------------------------------------------------*/
static
Bool handle_compress ( bz_stream* strm )
{
Bool progress_in = False;
Bool progress_out = False;
EState* s = strm->state;
while (True) {
 
if (s->state == BZ_S_OUTPUT) {
progress_out |= copy_output_until_stop ( s );
if (s->state_out_pos < s->numZ) break;
if (s->mode == BZ_M_FINISHING &&
s->avail_in_expect == 0 &&
isempty_RL(s)) break;
prepare_new_block ( s );
s->state = BZ_S_INPUT;
if (s->mode == BZ_M_FLUSHING &&
s->avail_in_expect == 0 &&
isempty_RL(s)) break;
}
 
if (s->state == BZ_S_INPUT) {
progress_in |= copy_input_until_stop ( s );
if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
flush_RL ( s );
BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
s->state = BZ_S_OUTPUT;
}
else
if (s->nblock >= s->nblockMAX) {
BZ2_compressBlock ( s, False );
s->state = BZ_S_OUTPUT;
}
else
if (s->strm->avail_in == 0) {
break;
}
}
 
}
 
return progress_in || progress_out;
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
{
Bool progress;
EState* s;
if (strm == NULL) return BZ_PARAM_ERROR;
s = strm->state;
if (s == NULL) return BZ_PARAM_ERROR;
if (s->strm != strm) return BZ_PARAM_ERROR;
 
preswitch:
switch (s->mode) {
 
case BZ_M_IDLE:
return BZ_SEQUENCE_ERROR;
 
case BZ_M_RUNNING:
if (action == BZ_RUN) {
progress = handle_compress ( strm );
return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
}
else
if (action == BZ_FLUSH) {
s->avail_in_expect = strm->avail_in;
s->mode = BZ_M_FLUSHING;
goto preswitch;
}
else
if (action == BZ_FINISH) {
s->avail_in_expect = strm->avail_in;
s->mode = BZ_M_FINISHING;
goto preswitch;
}
else
return BZ_PARAM_ERROR;
 
case BZ_M_FLUSHING:
if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
if (s->avail_in_expect != s->strm->avail_in)
return BZ_SEQUENCE_ERROR;
progress = handle_compress ( strm );
if (s->avail_in_expect > 0 || !isempty_RL(s) ||
s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
s->mode = BZ_M_RUNNING;
return BZ_RUN_OK;
 
case BZ_M_FINISHING:
if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
if (s->avail_in_expect != s->strm->avail_in)
return BZ_SEQUENCE_ERROR;
progress = handle_compress ( strm );
if (!progress) return BZ_SEQUENCE_ERROR;
if (s->avail_in_expect > 0 || !isempty_RL(s) ||
s->state_out_pos < s->numZ) return BZ_FINISH_OK;
s->mode = BZ_M_IDLE;
return BZ_STREAM_END;
}
return BZ_OK; /*--not reached--*/
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm )
{
EState* s;
if (strm == NULL) return BZ_PARAM_ERROR;
s = strm->state;
if (s == NULL) return BZ_PARAM_ERROR;
if (s->strm != strm) return BZ_PARAM_ERROR;
 
if (s->arr1 != NULL) BZFREE(s->arr1);
if (s->arr2 != NULL) BZFREE(s->arr2);
if (s->ftab != NULL) BZFREE(s->ftab);
BZFREE(strm->state);
 
strm->state = NULL;
 
return BZ_OK;
}
 
 
/*---------------------------------------------------*/
/*--- Decompression stuff ---*/
/*---------------------------------------------------*/
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzDecompressInit)
( bz_stream* strm,
int verbosity,
int small )
{
DState* s;
 
if (!bz_config_ok()) return BZ_CONFIG_ERROR;
 
if (strm == NULL) return BZ_PARAM_ERROR;
if (small != 0 && small != 1) return BZ_PARAM_ERROR;
if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
 
if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
 
s = BZALLOC( sizeof(DState) );
if (s == NULL) return BZ_MEM_ERROR;
s->strm = strm;
strm->state = s;
s->state = BZ_X_MAGIC_1;
s->bsLive = 0;
s->bsBuff = 0;
s->calculatedCombinedCRC = 0;
strm->total_in_lo32 = 0;
strm->total_in_hi32 = 0;
strm->total_out_lo32 = 0;
strm->total_out_hi32 = 0;
s->smallDecompress = (Bool)small;
s->ll4 = NULL;
s->ll16 = NULL;
s->tt = NULL;
s->currBlockNo = 0;
s->verbosity = verbosity;
 
return BZ_OK;
}
 
 
/*---------------------------------------------------*/
/* Return True iff data corruption is discovered.
Returns False if there is no problem.
*/
static
Bool unRLE_obuf_to_output_FAST ( DState* s )
{
UChar k1;
 
if (s->blockRandomised) {
 
while (True) {
/* try to finish existing run */
while (True) {
if (s->strm->avail_out == 0) return False;
if (s->state_out_len == 0) break;
*( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
s->state_out_len--;
s->strm->next_out++;
s->strm->avail_out--;
s->strm->total_out_lo32++;
if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
}
 
/* can a new run be started? */
if (s->nblock_used == s->save_nblock+1) return False;
/* Only caused by corrupt data stream? */
if (s->nblock_used > s->save_nblock+1)
return True;
s->state_out_len = 1;
s->state_out_ch = s->k0;
BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
s->state_out_len = 2;
BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
s->state_out_len = 3;
BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
BZ_GET_FAST(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
s->state_out_len = ((Int32)k1) + 4;
BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK;
s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
}
 
} else {
 
/* restore */
UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC;
UChar c_state_out_ch = s->state_out_ch;
Int32 c_state_out_len = s->state_out_len;
Int32 c_nblock_used = s->nblock_used;
Int32 c_k0 = s->k0;
UInt32* c_tt = s->tt;
UInt32 c_tPos = s->tPos;
char* cs_next_out = s->strm->next_out;
unsigned int cs_avail_out = s->strm->avail_out;
/* end restore */
 
UInt32 avail_out_INIT = cs_avail_out;
Int32 s_save_nblockPP = s->save_nblock+1;
unsigned int total_out_lo32_old;
 
while (True) {
 
/* try to finish existing run */
if (c_state_out_len > 0) {
while (True) {
if (cs_avail_out == 0) goto return_notr;
if (c_state_out_len == 1) break;
*( (UChar*)(cs_next_out) ) = c_state_out_ch;
BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
c_state_out_len--;
cs_next_out++;
cs_avail_out--;
}
s_state_out_len_eq_one:
{
if (cs_avail_out == 0) {
c_state_out_len = 1; goto return_notr;
};
*( (UChar*)(cs_next_out) ) = c_state_out_ch;
BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
cs_next_out++;
cs_avail_out--;
}
}
/* Only caused by corrupt data stream? */
if (c_nblock_used > s_save_nblockPP)
return True;
 
/* can a new run be started? */
if (c_nblock_used == s_save_nblockPP) {
c_state_out_len = 0; goto return_notr;
};
c_state_out_ch = c_k0;
BZ_GET_FAST_C(k1); c_nblock_used++;
if (k1 != c_k0) {
c_k0 = k1; goto s_state_out_len_eq_one;
};
if (c_nblock_used == s_save_nblockPP)
goto s_state_out_len_eq_one;
c_state_out_len = 2;
BZ_GET_FAST_C(k1); c_nblock_used++;
if (c_nblock_used == s_save_nblockPP) continue;
if (k1 != c_k0) { c_k0 = k1; continue; };
c_state_out_len = 3;
BZ_GET_FAST_C(k1); c_nblock_used++;
if (c_nblock_used == s_save_nblockPP) continue;
if (k1 != c_k0) { c_k0 = k1; continue; };
BZ_GET_FAST_C(k1); c_nblock_used++;
c_state_out_len = ((Int32)k1) + 4;
BZ_GET_FAST_C(c_k0); c_nblock_used++;
}
 
return_notr:
total_out_lo32_old = s->strm->total_out_lo32;
s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
if (s->strm->total_out_lo32 < total_out_lo32_old)
s->strm->total_out_hi32++;
 
/* save */
s->calculatedBlockCRC = c_calculatedBlockCRC;
s->state_out_ch = c_state_out_ch;
s->state_out_len = c_state_out_len;
s->nblock_used = c_nblock_used;
s->k0 = c_k0;
s->tt = c_tt;
s->tPos = c_tPos;
s->strm->next_out = cs_next_out;
s->strm->avail_out = cs_avail_out;
/* end save */
}
return False;
}
 
 
 
/*---------------------------------------------------*/
__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
{
Int32 nb, na, mid;
nb = 0;
na = 256;
do {
mid = (nb + na) >> 1;
if (indx >= cftab[mid]) nb = mid; else na = mid;
}
while (na - nb != 1);
return nb;
}
 
 
/*---------------------------------------------------*/
/* Return True iff data corruption is discovered.
Returns False if there is no problem.
*/
static
Bool unRLE_obuf_to_output_SMALL ( DState* s )
{
UChar k1;
 
if (s->blockRandomised) {
 
while (True) {
/* try to finish existing run */
while (True) {
if (s->strm->avail_out == 0) return False;
if (s->state_out_len == 0) break;
*( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
s->state_out_len--;
s->strm->next_out++;
s->strm->avail_out--;
s->strm->total_out_lo32++;
if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
}
/* can a new run be started? */
if (s->nblock_used == s->save_nblock+1) return False;
 
/* Only caused by corrupt data stream? */
if (s->nblock_used > s->save_nblock+1)
return True;
s->state_out_len = 1;
s->state_out_ch = s->k0;
BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
s->state_out_len = 2;
BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
s->state_out_len = 3;
BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK;
k1 ^= BZ_RAND_MASK; s->nblock_used++;
s->state_out_len = ((Int32)k1) + 4;
BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK;
s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
}
 
} else {
 
while (True) {
/* try to finish existing run */
while (True) {
if (s->strm->avail_out == 0) return False;
if (s->state_out_len == 0) break;
*( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
s->state_out_len--;
s->strm->next_out++;
s->strm->avail_out--;
s->strm->total_out_lo32++;
if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
}
/* can a new run be started? */
if (s->nblock_used == s->save_nblock+1) return False;
 
/* Only caused by corrupt data stream? */
if (s->nblock_used > s->save_nblock+1)
return True;
s->state_out_len = 1;
s->state_out_ch = s->k0;
BZ_GET_SMALL(k1); s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
s->state_out_len = 2;
BZ_GET_SMALL(k1); s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
s->state_out_len = 3;
BZ_GET_SMALL(k1); s->nblock_used++;
if (s->nblock_used == s->save_nblock+1) continue;
if (k1 != s->k0) { s->k0 = k1; continue; };
BZ_GET_SMALL(k1); s->nblock_used++;
s->state_out_len = ((Int32)k1) + 4;
BZ_GET_SMALL(s->k0); s->nblock_used++;
}
 
}
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
{
Bool corrupt;
DState* s;
if (strm == NULL) return BZ_PARAM_ERROR;
s = strm->state;
if (s == NULL) return BZ_PARAM_ERROR;
if (s->strm != strm) return BZ_PARAM_ERROR;
 
while (True) {
if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
if (s->state == BZ_X_OUTPUT) {
if (s->smallDecompress)
corrupt = unRLE_obuf_to_output_SMALL ( s ); else
corrupt = unRLE_obuf_to_output_FAST ( s );
if (corrupt) return BZ_DATA_ERROR;
if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
BZ_FINALISE_CRC ( s->calculatedBlockCRC );
if (s->verbosity >= 3)
VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC,
s->calculatedBlockCRC );
if (s->verbosity >= 2) VPrintf0 ( "]" );
if (s->calculatedBlockCRC != s->storedBlockCRC)
return BZ_DATA_ERROR;
s->calculatedCombinedCRC
= (s->calculatedCombinedCRC << 1) |
(s->calculatedCombinedCRC >> 31);
s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
s->state = BZ_X_BLKHDR_1;
} else {
return BZ_OK;
}
}
if (s->state >= BZ_X_MAGIC_1) {
Int32 r = BZ2_decompress ( s );
if (r == BZ_STREAM_END) {
if (s->verbosity >= 3)
VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x",
s->storedCombinedCRC, s->calculatedCombinedCRC );
if (s->calculatedCombinedCRC != s->storedCombinedCRC)
return BZ_DATA_ERROR;
return r;
}
if (s->state != BZ_X_OUTPUT) return r;
}
}
 
AssertH ( 0, 6001 );
 
return 0; /*NOTREACHED*/
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm )
{
DState* s;
if (strm == NULL) return BZ_PARAM_ERROR;
s = strm->state;
if (s == NULL) return BZ_PARAM_ERROR;
if (s->strm != strm) return BZ_PARAM_ERROR;
 
if (s->tt != NULL) BZFREE(s->tt);
if (s->ll16 != NULL) BZFREE(s->ll16);
if (s->ll4 != NULL) BZFREE(s->ll4);
 
BZFREE(strm->state);
strm->state = NULL;
 
return BZ_OK;
}
 
 
#ifndef BZ_NO_STDIO
/*---------------------------------------------------*/
/*--- File I/O stuff ---*/
/*---------------------------------------------------*/
 
#define BZ_SETERR(eee) \
{ \
if (bzerror != NULL) *bzerror = eee; \
if (bzf != NULL) bzf->lastErr = eee; \
}
 
typedef
struct {
FILE* handle;
Char buf[BZ_MAX_UNUSED];
Int32 bufN;
Bool writing;
bz_stream strm;
Int32 lastErr;
Bool initialisedOk;
}
bzFile;
 
 
/*---------------------------------------------*/
static Bool myfeof ( FILE* f )
{
Int32 c = fgetc ( f );
if (c == EOF) return True;
ungetc ( c, f );
return False;
}
 
 
/*---------------------------------------------------*/
BZFILE* BZ_API(BZ2_bzWriteOpen)
( int* bzerror,
FILE* f,
int blockSize100k,
int verbosity,
int workFactor )
{
Int32 ret;
bzFile* bzf = NULL;
 
BZ_SETERR(BZ_OK);
 
if (f == NULL ||
(blockSize100k < 1 || blockSize100k > 9) ||
(workFactor < 0 || workFactor > 250) ||
(verbosity < 0 || verbosity > 4))
{ BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
 
if (ferror(f))
{ BZ_SETERR(BZ_IO_ERROR); return NULL; };
 
bzf = malloc ( sizeof(bzFile) );
if (bzf == NULL)
{ BZ_SETERR(BZ_MEM_ERROR); return NULL; };
 
BZ_SETERR(BZ_OK);
bzf->initialisedOk = False;
bzf->bufN = 0;
bzf->handle = f;
bzf->writing = True;
bzf->strm.bzalloc = NULL;
bzf->strm.bzfree = NULL;
bzf->strm.opaque = NULL;
 
if (workFactor == 0) workFactor = 30;
ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k,
verbosity, workFactor );
if (ret != BZ_OK)
{ BZ_SETERR(ret); free(bzf); return NULL; };
 
bzf->strm.avail_in = 0;
bzf->initialisedOk = True;
return bzf;
}
 
 
 
/*---------------------------------------------------*/
void BZ_API(BZ2_bzWrite)
( int* bzerror,
BZFILE* b,
void* buf,
int len )
{
Int32 n, n2, ret;
bzFile* bzf = (bzFile*)b;
 
BZ_SETERR(BZ_OK);
if (bzf == NULL || buf == NULL || len < 0)
{ BZ_SETERR(BZ_PARAM_ERROR); return; };
if (!(bzf->writing))
{ BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
if (ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return; };
 
if (len == 0)
{ BZ_SETERR(BZ_OK); return; };
 
bzf->strm.avail_in = len;
bzf->strm.next_in = buf;
 
while (True) {
bzf->strm.avail_out = BZ_MAX_UNUSED;
bzf->strm.next_out = bzf->buf;
ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
if (ret != BZ_RUN_OK)
{ BZ_SETERR(ret); return; };
 
if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
n = BZ_MAX_UNUSED - bzf->strm.avail_out;
n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
n, bzf->handle );
if (n != n2 || ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return; };
}
 
if (bzf->strm.avail_in == 0)
{ BZ_SETERR(BZ_OK); return; };
}
}
 
 
/*---------------------------------------------------*/
void BZ_API(BZ2_bzWriteClose)
( int* bzerror,
BZFILE* b,
int abandon,
unsigned int* nbytes_in,
unsigned int* nbytes_out )
{
BZ2_bzWriteClose64 ( bzerror, b, abandon,
nbytes_in, NULL, nbytes_out, NULL );
}
 
 
void BZ_API(BZ2_bzWriteClose64)
( int* bzerror,
BZFILE* b,
int abandon,
unsigned int* nbytes_in_lo32,
unsigned int* nbytes_in_hi32,
unsigned int* nbytes_out_lo32,
unsigned int* nbytes_out_hi32 )
{
Int32 n, n2, ret;
bzFile* bzf = (bzFile*)b;
 
if (bzf == NULL)
{ BZ_SETERR(BZ_OK); return; };
if (!(bzf->writing))
{ BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
if (ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return; };
 
if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;
 
if ((!abandon) && bzf->lastErr == BZ_OK) {
while (True) {
bzf->strm.avail_out = BZ_MAX_UNUSED;
bzf->strm.next_out = bzf->buf;
ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
{ BZ_SETERR(ret); return; };
 
if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
n = BZ_MAX_UNUSED - bzf->strm.avail_out;
n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar),
n, bzf->handle );
if (n != n2 || ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return; };
}
 
if (ret == BZ_STREAM_END) break;
}
}
 
if ( !abandon && !ferror ( bzf->handle ) ) {
fflush ( bzf->handle );
if (ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return; };
}
 
if (nbytes_in_lo32 != NULL)
*nbytes_in_lo32 = bzf->strm.total_in_lo32;
if (nbytes_in_hi32 != NULL)
*nbytes_in_hi32 = bzf->strm.total_in_hi32;
if (nbytes_out_lo32 != NULL)
*nbytes_out_lo32 = bzf->strm.total_out_lo32;
if (nbytes_out_hi32 != NULL)
*nbytes_out_hi32 = bzf->strm.total_out_hi32;
 
BZ_SETERR(BZ_OK);
BZ2_bzCompressEnd ( &(bzf->strm) );
free ( bzf );
}
 
 
/*---------------------------------------------------*/
BZFILE* BZ_API(BZ2_bzReadOpen)
( int* bzerror,
FILE* f,
int verbosity,
int small,
void* unused,
int nUnused )
{
bzFile* bzf = NULL;
int ret;
 
BZ_SETERR(BZ_OK);
 
if (f == NULL ||
(small != 0 && small != 1) ||
(verbosity < 0 || verbosity > 4) ||
(unused == NULL && nUnused != 0) ||
(unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
{ BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
 
if (ferror(f))
{ BZ_SETERR(BZ_IO_ERROR); return NULL; };
 
bzf = malloc ( sizeof(bzFile) );
if (bzf == NULL)
{ BZ_SETERR(BZ_MEM_ERROR); return NULL; };
 
BZ_SETERR(BZ_OK);
 
bzf->initialisedOk = False;
bzf->handle = f;
bzf->bufN = 0;
bzf->writing = False;
bzf->strm.bzalloc = NULL;
bzf->strm.bzfree = NULL;
bzf->strm.opaque = NULL;
while (nUnused > 0) {
bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
unused = ((void*)( 1 + ((UChar*)(unused)) ));
nUnused--;
}
 
ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
if (ret != BZ_OK)
{ BZ_SETERR(ret); free(bzf); return NULL; };
 
bzf->strm.avail_in = bzf->bufN;
bzf->strm.next_in = bzf->buf;
 
bzf->initialisedOk = True;
return bzf;
}
 
 
/*---------------------------------------------------*/
void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
{
bzFile* bzf = (bzFile*)b;
 
BZ_SETERR(BZ_OK);
if (bzf == NULL)
{ BZ_SETERR(BZ_OK); return; };
 
if (bzf->writing)
{ BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
 
if (bzf->initialisedOk)
(void)BZ2_bzDecompressEnd ( &(bzf->strm) );
free ( bzf );
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzRead)
( int* bzerror,
BZFILE* b,
void* buf,
int len )
{
Int32 n, ret;
bzFile* bzf = (bzFile*)b;
 
BZ_SETERR(BZ_OK);
 
if (bzf == NULL || buf == NULL || len < 0)
{ BZ_SETERR(BZ_PARAM_ERROR); return 0; };
 
if (bzf->writing)
{ BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };
 
if (len == 0)
{ BZ_SETERR(BZ_OK); return 0; };
 
bzf->strm.avail_out = len;
bzf->strm.next_out = buf;
 
while (True) {
 
if (ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return 0; };
 
if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
n = fread ( bzf->buf, sizeof(UChar),
BZ_MAX_UNUSED, bzf->handle );
if (ferror(bzf->handle))
{ BZ_SETERR(BZ_IO_ERROR); return 0; };
bzf->bufN = n;
bzf->strm.avail_in = bzf->bufN;
bzf->strm.next_in = bzf->buf;
}
 
ret = BZ2_bzDecompress ( &(bzf->strm) );
 
if (ret != BZ_OK && ret != BZ_STREAM_END)
{ BZ_SETERR(ret); return 0; };
 
if (ret == BZ_OK && myfeof(bzf->handle) &&
bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
{ BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };
 
if (ret == BZ_STREAM_END)
{ BZ_SETERR(BZ_STREAM_END);
return len - bzf->strm.avail_out; };
if (bzf->strm.avail_out == 0)
{ BZ_SETERR(BZ_OK); return len; };
}
 
return 0; /*not reached*/
}
 
 
/*---------------------------------------------------*/
void BZ_API(BZ2_bzReadGetUnused)
( int* bzerror,
BZFILE* b,
void** unused,
int* nUnused )
{
bzFile* bzf = (bzFile*)b;
if (bzf == NULL)
{ BZ_SETERR(BZ_PARAM_ERROR); return; };
if (bzf->lastErr != BZ_STREAM_END)
{ BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
if (unused == NULL || nUnused == NULL)
{ BZ_SETERR(BZ_PARAM_ERROR); return; };
 
BZ_SETERR(BZ_OK);
*nUnused = bzf->strm.avail_in;
*unused = bzf->strm.next_in;
}
#endif
 
 
/*---------------------------------------------------*/
/*--- Misc convenience stuff ---*/
/*---------------------------------------------------*/
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzBuffToBuffCompress)
( char* dest,
unsigned int* destLen,
char* source,
unsigned int sourceLen,
int blockSize100k,
int verbosity,
int workFactor )
{
bz_stream strm;
int ret;
 
if (dest == NULL || destLen == NULL ||
source == NULL ||
blockSize100k < 1 || blockSize100k > 9 ||
verbosity < 0 || verbosity > 4 ||
workFactor < 0 || workFactor > 250)
return BZ_PARAM_ERROR;
 
if (workFactor == 0) workFactor = 30;
strm.bzalloc = NULL;
strm.bzfree = NULL;
strm.opaque = NULL;
ret = BZ2_bzCompressInit ( &strm, blockSize100k,
verbosity, workFactor );
if (ret != BZ_OK) return ret;
 
strm.next_in = source;
strm.next_out = dest;
strm.avail_in = sourceLen;
strm.avail_out = *destLen;
 
ret = BZ2_bzCompress ( &strm, BZ_FINISH );
if (ret == BZ_FINISH_OK) goto output_overflow;
if (ret != BZ_STREAM_END) goto errhandler;
 
/* normal termination */
*destLen -= strm.avail_out;
BZ2_bzCompressEnd ( &strm );
return BZ_OK;
 
output_overflow:
BZ2_bzCompressEnd ( &strm );
return BZ_OUTBUFF_FULL;
 
errhandler:
BZ2_bzCompressEnd ( &strm );
return ret;
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzBuffToBuffDecompress)
( char* dest,
unsigned int* destLen,
char* source,
unsigned int sourceLen,
int small,
int verbosity )
{
bz_stream strm;
int ret;
 
if (dest == NULL || destLen == NULL ||
source == NULL ||
(small != 0 && small != 1) ||
verbosity < 0 || verbosity > 4)
return BZ_PARAM_ERROR;
 
strm.bzalloc = NULL;
strm.bzfree = NULL;
strm.opaque = NULL;
ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
if (ret != BZ_OK) return ret;
 
strm.next_in = source;
strm.next_out = dest;
strm.avail_in = sourceLen;
strm.avail_out = *destLen;
 
ret = BZ2_bzDecompress ( &strm );
if (ret == BZ_OK) goto output_overflow_or_eof;
if (ret != BZ_STREAM_END) goto errhandler;
 
/* normal termination */
*destLen -= strm.avail_out;
BZ2_bzDecompressEnd ( &strm );
return BZ_OK;
 
output_overflow_or_eof:
if (strm.avail_out > 0) {
BZ2_bzDecompressEnd ( &strm );
return BZ_UNEXPECTED_EOF;
} else {
BZ2_bzDecompressEnd ( &strm );
return BZ_OUTBUFF_FULL;
};
 
errhandler:
BZ2_bzDecompressEnd ( &strm );
return ret;
}
 
 
/*---------------------------------------------------*/
/*--
Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
to support better zlib compatibility.
This code is not _officially_ part of libbzip2 (yet);
I haven't tested it, documented it, or considered the
threading-safeness of it.
If this code breaks, please contact both Yoshioka and me.
--*/
/*---------------------------------------------------*/
 
/*---------------------------------------------------*/
/*--
return version like "0.9.5d, 4-Sept-1999".
--*/
const char * BZ_API(BZ2_bzlibVersion)(void)
{
return BZ_VERSION;
}
 
 
#ifndef BZ_NO_STDIO
/*---------------------------------------------------*/
 
#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
# include <fcntl.h>
# include <io.h>
# define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
#else
# define SET_BINARY_MODE(file)
#endif
static
BZFILE * bzopen_or_bzdopen
( const char *path, /* no use when bzdopen */
int fd, /* no use when bzdopen */
const char *mode,
int open_mode) /* bzopen: 0, bzdopen:1 */
{
int bzerr;
char unused[BZ_MAX_UNUSED];
int blockSize100k = 9;
int writing = 0;
char mode2[10] = "";
FILE *fp = NULL;
BZFILE *bzfp = NULL;
int verbosity = 0;
int workFactor = 30;
int smallMode = 0;
int nUnused = 0;
 
if (mode == NULL) return NULL;
while (*mode) {
switch (*mode) {
case 'r':
writing = 0; break;
case 'w':
writing = 1; break;
case 's':
smallMode = 1; break;
default:
if (isdigit((int)(*mode))) {
blockSize100k = *mode-BZ_HDR_0;
}
}
mode++;
}
strcat(mode2, writing ? "w" : "r" );
strcat(mode2,"b"); /* binary mode */
 
if (open_mode==0) {
if (path==NULL || strcmp(path,"")==0) {
fp = (writing ? stdout : stdin);
SET_BINARY_MODE(fp);
} else {
fp = fopen(path,mode2);
}
} else {
#ifdef BZ_STRICT_ANSI
fp = NULL;
#else
fp = fdopen(fd,mode2);
#endif
}
if (fp == NULL) return NULL;
 
if (writing) {
/* Guard against total chaos and anarchy -- JRS */
if (blockSize100k < 1) blockSize100k = 1;
if (blockSize100k > 9) blockSize100k = 9;
bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
verbosity,workFactor);
} else {
bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
unused,nUnused);
}
if (bzfp == NULL) {
if (fp != stdin && fp != stdout) fclose(fp);
return NULL;
}
return bzfp;
}
 
 
/*---------------------------------------------------*/
/*--
open file for read or write.
ex) bzopen("file","w9")
case path="" or NULL => use stdin or stdout.
--*/
BZFILE * BZ_API(BZ2_bzopen)
( const char *path,
const char *mode )
{
return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
}
 
 
/*---------------------------------------------------*/
BZFILE * BZ_API(BZ2_bzdopen)
( int fd,
const char *mode )
{
return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
{
int bzerr, nread;
if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
nread = BZ2_bzRead(&bzerr,b,buf,len);
if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
return nread;
} else {
return -1;
}
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
{
int bzerr;
 
BZ2_bzWrite(&bzerr,b,buf,len);
if(bzerr == BZ_OK){
return len;
}else{
return -1;
}
}
 
 
/*---------------------------------------------------*/
int BZ_API(BZ2_bzflush) (BZFILE *b)
{
/* do nothing now... */
return 0;
}
 
 
/*---------------------------------------------------*/
void BZ_API(BZ2_bzclose) (BZFILE* b)
{
int bzerr;
FILE *fp;
if (b==NULL) {return;}
fp = ((bzFile *)b)->handle;
if(((bzFile*)b)->writing){
BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
if(bzerr != BZ_OK){
BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
}
}else{
BZ2_bzReadClose(&bzerr,b);
}
if(fp!=stdin && fp!=stdout){
fclose(fp);
}
}
 
 
/*---------------------------------------------------*/
/*--
return last error code
--*/
static const char *bzerrorstrings[] = {
"OK"
,"SEQUENCE_ERROR"
,"PARAM_ERROR"
,"MEM_ERROR"
,"DATA_ERROR"
,"DATA_ERROR_MAGIC"
,"IO_ERROR"
,"UNEXPECTED_EOF"
,"OUTBUFF_FULL"
,"CONFIG_ERROR"
,"???" /* for future */
,"???" /* for future */
,"???" /* for future */
,"???" /* for future */
,"???" /* for future */
,"???" /* for future */
};
 
 
const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
{
int err = ((bzFile *)b)->lastErr;
 
if(err>0) err = 0;
*errnum = err;
return bzerrorstrings[err*-1];
}
#endif
 
 
/*-------------------------------------------------------------*/
/*--- end bzlib.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/decompress.c
0,0 → 1,626
 
/*-------------------------------------------------------------*/
/*--- Decompression machinery ---*/
/*--- decompress.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#include "bzlib_private.h"
 
 
/*---------------------------------------------------*/
static
void makeMaps_d ( DState* s )
{
Int32 i;
s->nInUse = 0;
for (i = 0; i < 256; i++)
if (s->inUse[i]) {
s->seqToUnseq[s->nInUse] = i;
s->nInUse++;
}
}
 
 
/*---------------------------------------------------*/
#define RETURN(rrr) \
{ retVal = rrr; goto save_state_and_return; };
 
#define GET_BITS(lll,vvv,nnn) \
case lll: s->state = lll; \
while (True) { \
if (s->bsLive >= nnn) { \
UInt32 v; \
v = (s->bsBuff >> \
(s->bsLive-nnn)) & ((1 << nnn)-1); \
s->bsLive -= nnn; \
vvv = v; \
break; \
} \
if (s->strm->avail_in == 0) RETURN(BZ_OK); \
s->bsBuff \
= (s->bsBuff << 8) | \
((UInt32) \
(*((UChar*)(s->strm->next_in)))); \
s->bsLive += 8; \
s->strm->next_in++; \
s->strm->avail_in--; \
s->strm->total_in_lo32++; \
if (s->strm->total_in_lo32 == 0) \
s->strm->total_in_hi32++; \
}
 
#define GET_UCHAR(lll,uuu) \
GET_BITS(lll,uuu,8)
 
#define GET_BIT(lll,uuu) \
GET_BITS(lll,uuu,1)
 
/*---------------------------------------------------*/
#define GET_MTF_VAL(label1,label2,lval) \
{ \
if (groupPos == 0) { \
groupNo++; \
if (groupNo >= nSelectors) \
RETURN(BZ_DATA_ERROR); \
groupPos = BZ_G_SIZE; \
gSel = s->selector[groupNo]; \
gMinlen = s->minLens[gSel]; \
gLimit = &(s->limit[gSel][0]); \
gPerm = &(s->perm[gSel][0]); \
gBase = &(s->base[gSel][0]); \
} \
groupPos--; \
zn = gMinlen; \
GET_BITS(label1, zvec, zn); \
while (1) { \
if (zn > 20 /* the longest code */) \
RETURN(BZ_DATA_ERROR); \
if (zvec <= gLimit[zn]) break; \
zn++; \
GET_BIT(label2, zj); \
zvec = (zvec << 1) | zj; \
}; \
if (zvec - gBase[zn] < 0 \
|| zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
RETURN(BZ_DATA_ERROR); \
lval = gPerm[zvec - gBase[zn]]; \
}
 
 
/*---------------------------------------------------*/
Int32 BZ2_decompress ( DState* s )
{
UChar uc;
Int32 retVal;
Int32 minLen, maxLen;
bz_stream* strm = s->strm;
 
/* stuff that needs to be saved/restored */
Int32 i;
Int32 j;
Int32 t;
Int32 alphaSize;
Int32 nGroups;
Int32 nSelectors;
Int32 EOB;
Int32 groupNo;
Int32 groupPos;
Int32 nextSym;
Int32 nblockMAX;
Int32 nblock;
Int32 es;
Int32 N;
Int32 curr;
Int32 zt;
Int32 zn;
Int32 zvec;
Int32 zj;
Int32 gSel;
Int32 gMinlen;
Int32* gLimit;
Int32* gBase;
Int32* gPerm;
 
if (s->state == BZ_X_MAGIC_1) {
/*initialise the save area*/
s->save_i = 0;
s->save_j = 0;
s->save_t = 0;
s->save_alphaSize = 0;
s->save_nGroups = 0;
s->save_nSelectors = 0;
s->save_EOB = 0;
s->save_groupNo = 0;
s->save_groupPos = 0;
s->save_nextSym = 0;
s->save_nblockMAX = 0;
s->save_nblock = 0;
s->save_es = 0;
s->save_N = 0;
s->save_curr = 0;
s->save_zt = 0;
s->save_zn = 0;
s->save_zvec = 0;
s->save_zj = 0;
s->save_gSel = 0;
s->save_gMinlen = 0;
s->save_gLimit = NULL;
s->save_gBase = NULL;
s->save_gPerm = NULL;
}
 
/*restore from the save area*/
i = s->save_i;
j = s->save_j;
t = s->save_t;
alphaSize = s->save_alphaSize;
nGroups = s->save_nGroups;
nSelectors = s->save_nSelectors;
EOB = s->save_EOB;
groupNo = s->save_groupNo;
groupPos = s->save_groupPos;
nextSym = s->save_nextSym;
nblockMAX = s->save_nblockMAX;
nblock = s->save_nblock;
es = s->save_es;
N = s->save_N;
curr = s->save_curr;
zt = s->save_zt;
zn = s->save_zn;
zvec = s->save_zvec;
zj = s->save_zj;
gSel = s->save_gSel;
gMinlen = s->save_gMinlen;
gLimit = s->save_gLimit;
gBase = s->save_gBase;
gPerm = s->save_gPerm;
 
retVal = BZ_OK;
 
switch (s->state) {
 
GET_UCHAR(BZ_X_MAGIC_1, uc);
if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
 
GET_UCHAR(BZ_X_MAGIC_2, uc);
if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
 
GET_UCHAR(BZ_X_MAGIC_3, uc)
if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);
 
GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
if (s->blockSize100k < (BZ_HDR_0 + 1) ||
s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
s->blockSize100k -= BZ_HDR_0;
 
if (s->smallDecompress) {
s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
s->ll4 = BZALLOC(
((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
);
if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
} else {
s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
}
 
GET_UCHAR(BZ_X_BLKHDR_1, uc);
 
if (uc == 0x17) goto endhdr_2;
if (uc != 0x31) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_BLKHDR_2, uc);
if (uc != 0x41) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_BLKHDR_3, uc);
if (uc != 0x59) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_BLKHDR_4, uc);
if (uc != 0x26) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_BLKHDR_5, uc);
if (uc != 0x53) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_BLKHDR_6, uc);
if (uc != 0x59) RETURN(BZ_DATA_ERROR);
 
s->currBlockNo++;
if (s->verbosity >= 2)
VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
s->storedBlockCRC = 0;
GET_UCHAR(BZ_X_BCRC_1, uc);
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
GET_UCHAR(BZ_X_BCRC_2, uc);
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
GET_UCHAR(BZ_X_BCRC_3, uc);
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
GET_UCHAR(BZ_X_BCRC_4, uc);
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
 
GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
 
s->origPtr = 0;
GET_UCHAR(BZ_X_ORIGPTR_1, uc);
s->origPtr = (s->origPtr << 8) | ((Int32)uc);
GET_UCHAR(BZ_X_ORIGPTR_2, uc);
s->origPtr = (s->origPtr << 8) | ((Int32)uc);
GET_UCHAR(BZ_X_ORIGPTR_3, uc);
s->origPtr = (s->origPtr << 8) | ((Int32)uc);
 
if (s->origPtr < 0)
RETURN(BZ_DATA_ERROR);
if (s->origPtr > 10 + 100000*s->blockSize100k)
RETURN(BZ_DATA_ERROR);
 
/*--- Receive the mapping table ---*/
for (i = 0; i < 16; i++) {
GET_BIT(BZ_X_MAPPING_1, uc);
if (uc == 1)
s->inUse16[i] = True; else
s->inUse16[i] = False;
}
 
for (i = 0; i < 256; i++) s->inUse[i] = False;
 
for (i = 0; i < 16; i++)
if (s->inUse16[i])
for (j = 0; j < 16; j++) {
GET_BIT(BZ_X_MAPPING_2, uc);
if (uc == 1) s->inUse[i * 16 + j] = True;
}
makeMaps_d ( s );
if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
alphaSize = s->nInUse+2;
 
/*--- Now the selectors ---*/
GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
for (i = 0; i < nSelectors; i++) {
j = 0;
while (True) {
GET_BIT(BZ_X_SELECTOR_3, uc);
if (uc == 0) break;
j++;
if (j >= nGroups) RETURN(BZ_DATA_ERROR);
}
s->selectorMtf[i] = j;
}
 
/*--- Undo the MTF values for the selectors. ---*/
{
UChar pos[BZ_N_GROUPS], tmp, v;
for (v = 0; v < nGroups; v++) pos[v] = v;
for (i = 0; i < nSelectors; i++) {
v = s->selectorMtf[i];
tmp = pos[v];
while (v > 0) { pos[v] = pos[v-1]; v--; }
pos[0] = tmp;
s->selector[i] = tmp;
}
}
 
/*--- Now the coding tables ---*/
for (t = 0; t < nGroups; t++) {
GET_BITS(BZ_X_CODING_1, curr, 5);
for (i = 0; i < alphaSize; i++) {
while (True) {
if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
GET_BIT(BZ_X_CODING_2, uc);
if (uc == 0) break;
GET_BIT(BZ_X_CODING_3, uc);
if (uc == 0) curr++; else curr--;
}
s->len[t][i] = curr;
}
}
 
/*--- Create the Huffman decoding tables ---*/
for (t = 0; t < nGroups; t++) {
minLen = 32;
maxLen = 0;
for (i = 0; i < alphaSize; i++) {
if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
if (s->len[t][i] < minLen) minLen = s->len[t][i];
}
BZ2_hbCreateDecodeTables (
&(s->limit[t][0]),
&(s->base[t][0]),
&(s->perm[t][0]),
&(s->len[t][0]),
minLen, maxLen, alphaSize
);
s->minLens[t] = minLen;
}
 
/*--- Now the MTF values ---*/
 
EOB = s->nInUse+1;
nblockMAX = 100000 * s->blockSize100k;
groupNo = -1;
groupPos = 0;
 
for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
 
/*-- MTF init --*/
{
Int32 ii, jj, kk;
kk = MTFA_SIZE-1;
for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
kk--;
}
s->mtfbase[ii] = kk + 1;
}
}
/*-- end MTF init --*/
 
nblock = 0;
GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
 
while (True) {
 
if (nextSym == EOB) break;
 
if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
 
es = -1;
N = 1;
do {
if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
if (nextSym == BZ_RUNB) es = es + (1+1) * N;
N = N * 2;
GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
}
while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
 
es++;
uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
s->unzftab[uc] += es;
 
if (s->smallDecompress)
while (es > 0) {
if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
s->ll16[nblock] = (UInt16)uc;
nblock++;
es--;
}
else
while (es > 0) {
if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
s->tt[nblock] = (UInt32)uc;
nblock++;
es--;
};
 
continue;
 
} else {
 
if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
 
/*-- uc = MTF ( nextSym-1 ) --*/
{
Int32 ii, jj, kk, pp, lno, off;
UInt32 nn;
nn = (UInt32)(nextSym - 1);
 
if (nn < MTFL_SIZE) {
/* avoid general-case expense */
pp = s->mtfbase[0];
uc = s->mtfa[pp+nn];
while (nn > 3) {
Int32 z = pp+nn;
s->mtfa[(z) ] = s->mtfa[(z)-1];
s->mtfa[(z)-1] = s->mtfa[(z)-2];
s->mtfa[(z)-2] = s->mtfa[(z)-3];
s->mtfa[(z)-3] = s->mtfa[(z)-4];
nn -= 4;
}
while (nn > 0) {
s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
};
s->mtfa[pp] = uc;
} else {
/* general case */
lno = nn / MTFL_SIZE;
off = nn % MTFL_SIZE;
pp = s->mtfbase[lno] + off;
uc = s->mtfa[pp];
while (pp > s->mtfbase[lno]) {
s->mtfa[pp] = s->mtfa[pp-1]; pp--;
};
s->mtfbase[lno]++;
while (lno > 0) {
s->mtfbase[lno]--;
s->mtfa[s->mtfbase[lno]]
= s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
lno--;
}
s->mtfbase[0]--;
s->mtfa[s->mtfbase[0]] = uc;
if (s->mtfbase[0] == 0) {
kk = MTFA_SIZE-1;
for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
kk--;
}
s->mtfbase[ii] = kk + 1;
}
}
}
}
/*-- end uc = MTF ( nextSym-1 ) --*/
 
s->unzftab[s->seqToUnseq[uc]]++;
if (s->smallDecompress)
s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
nblock++;
 
GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
continue;
}
}
 
/* Now we know what nblock is, we can do a better sanity
check on s->origPtr.
*/
if (s->origPtr < 0 || s->origPtr >= nblock)
RETURN(BZ_DATA_ERROR);
 
/*-- Set up cftab to facilitate generation of T^(-1) --*/
s->cftab[0] = 0;
for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
for (i = 0; i <= 256; i++) {
if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
/* s->cftab[i] can legitimately be == nblock */
RETURN(BZ_DATA_ERROR);
}
}
 
s->state_out_len = 0;
s->state_out_ch = 0;
BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
s->state = BZ_X_OUTPUT;
if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
 
if (s->smallDecompress) {
 
/*-- Make a copy of cftab, used in generation of T --*/
for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
 
/*-- compute the T vector --*/
for (i = 0; i < nblock; i++) {
uc = (UChar)(s->ll16[i]);
SET_LL(i, s->cftabCopy[uc]);
s->cftabCopy[uc]++;
}
 
/*-- Compute T^(-1) by pointer reversal on T --*/
i = s->origPtr;
j = GET_LL(i);
do {
Int32 tmp = GET_LL(j);
SET_LL(j, i);
i = j;
j = tmp;
}
while (i != s->origPtr);
 
s->tPos = s->origPtr;
s->nblock_used = 0;
if (s->blockRandomised) {
BZ_RAND_INIT_MASK;
BZ_GET_SMALL(s->k0); s->nblock_used++;
BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
} else {
BZ_GET_SMALL(s->k0); s->nblock_used++;
}
 
} else {
 
/*-- compute the T^(-1) vector --*/
for (i = 0; i < nblock; i++) {
uc = (UChar)(s->tt[i] & 0xff);
s->tt[s->cftab[uc]] |= (i << 8);
s->cftab[uc]++;
}
 
s->tPos = s->tt[s->origPtr] >> 8;
s->nblock_used = 0;
if (s->blockRandomised) {
BZ_RAND_INIT_MASK;
BZ_GET_FAST(s->k0); s->nblock_used++;
BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
} else {
BZ_GET_FAST(s->k0); s->nblock_used++;
}
 
}
 
RETURN(BZ_OK);
 
 
 
endhdr_2:
 
GET_UCHAR(BZ_X_ENDHDR_2, uc);
if (uc != 0x72) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_ENDHDR_3, uc);
if (uc != 0x45) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_ENDHDR_4, uc);
if (uc != 0x38) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_ENDHDR_5, uc);
if (uc != 0x50) RETURN(BZ_DATA_ERROR);
GET_UCHAR(BZ_X_ENDHDR_6, uc);
if (uc != 0x90) RETURN(BZ_DATA_ERROR);
 
s->storedCombinedCRC = 0;
GET_UCHAR(BZ_X_CCRC_1, uc);
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
GET_UCHAR(BZ_X_CCRC_2, uc);
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
GET_UCHAR(BZ_X_CCRC_3, uc);
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
GET_UCHAR(BZ_X_CCRC_4, uc);
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
 
s->state = BZ_X_IDLE;
RETURN(BZ_STREAM_END);
 
default: AssertH ( False, 4001 );
}
 
AssertH ( False, 4002 );
 
save_state_and_return:
 
s->save_i = i;
s->save_j = j;
s->save_t = t;
s->save_alphaSize = alphaSize;
s->save_nGroups = nGroups;
s->save_nSelectors = nSelectors;
s->save_EOB = EOB;
s->save_groupNo = groupNo;
s->save_groupPos = groupPos;
s->save_nextSym = nextSym;
s->save_nblockMAX = nblockMAX;
s->save_nblock = nblock;
s->save_es = es;
s->save_N = N;
s->save_curr = curr;
s->save_zt = zt;
s->save_zn = zn;
s->save_zvec = zvec;
s->save_zj = zj;
s->save_gSel = gSel;
s->save_gMinlen = gMinlen;
s->save_gLimit = gLimit;
s->save_gBase = gBase;
s->save_gPerm = gPerm;
 
return retVal;
}
 
 
/*-------------------------------------------------------------*/
/*--- end decompress.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bzlib.h
0,0 → 1,282
 
/*-------------------------------------------------------------*/
/*--- Public header file for the library. ---*/
/*--- bzlib.h ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#ifndef _BZLIB_H
#define _BZLIB_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#define BZ_RUN 0
#define BZ_FLUSH 1
#define BZ_FINISH 2
 
#define BZ_OK 0
#define BZ_RUN_OK 1
#define BZ_FLUSH_OK 2
#define BZ_FINISH_OK 3
#define BZ_STREAM_END 4
#define BZ_SEQUENCE_ERROR (-1)
#define BZ_PARAM_ERROR (-2)
#define BZ_MEM_ERROR (-3)
#define BZ_DATA_ERROR (-4)
#define BZ_DATA_ERROR_MAGIC (-5)
#define BZ_IO_ERROR (-6)
#define BZ_UNEXPECTED_EOF (-7)
#define BZ_OUTBUFF_FULL (-8)
#define BZ_CONFIG_ERROR (-9)
 
typedef
struct {
char *next_in;
unsigned int avail_in;
unsigned int total_in_lo32;
unsigned int total_in_hi32;
 
char *next_out;
unsigned int avail_out;
unsigned int total_out_lo32;
unsigned int total_out_hi32;
 
void *state;
 
void *(*bzalloc)(void *,int,int);
void (*bzfree)(void *,void *);
void *opaque;
}
bz_stream;
 
 
#ifndef BZ_IMPORT
#define BZ_EXPORT
#endif
 
#ifndef BZ_NO_STDIO
/* Need a definitition for FILE */
#include <stdio.h>
#endif
 
#ifdef _WIN32
# include <windows.h>
# ifdef small
/* windows.h define small to char */
# undef small
# endif
# ifdef BZ_EXPORT
# define BZ_API(func) WINAPI func
# define BZ_EXTERN extern
# else
/* import windows dll dynamically */
# define BZ_API(func) (WINAPI * func)
# define BZ_EXTERN
# endif
#else
# define BZ_API(func) func
# define BZ_EXTERN extern
#endif
 
 
/*-- Core (low-level) library functions --*/
 
BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
bz_stream* strm,
int blockSize100k,
int verbosity,
int workFactor
);
 
BZ_EXTERN int BZ_API(BZ2_bzCompress) (
bz_stream* strm,
int action
);
 
BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
bz_stream* strm
);
 
BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
bz_stream *strm,
int verbosity,
int small
);
 
BZ_EXTERN int BZ_API(BZ2_bzDecompress) (
bz_stream* strm
);
 
BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
bz_stream *strm
);
 
 
 
/*-- High(er) level library functions --*/
 
#ifndef BZ_NO_STDIO
#define BZ_MAX_UNUSED 5000
 
typedef void BZFILE;
 
BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
int* bzerror,
FILE* f,
int verbosity,
int small,
void* unused,
int nUnused
);
 
BZ_EXTERN void BZ_API(BZ2_bzReadClose) (
int* bzerror,
BZFILE* b
);
 
BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
int* bzerror,
BZFILE* b,
void** unused,
int* nUnused
);
 
BZ_EXTERN int BZ_API(BZ2_bzRead) (
int* bzerror,
BZFILE* b,
void* buf,
int len
);
 
BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
int* bzerror,
FILE* f,
int blockSize100k,
int verbosity,
int workFactor
);
 
BZ_EXTERN void BZ_API(BZ2_bzWrite) (
int* bzerror,
BZFILE* b,
void* buf,
int len
);
 
BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
int* bzerror,
BZFILE* b,
int abandon,
unsigned int* nbytes_in,
unsigned int* nbytes_out
);
 
BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
int* bzerror,
BZFILE* b,
int abandon,
unsigned int* nbytes_in_lo32,
unsigned int* nbytes_in_hi32,
unsigned int* nbytes_out_lo32,
unsigned int* nbytes_out_hi32
);
#endif
 
 
/*-- Utility functions --*/
 
BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
char* dest,
unsigned int* destLen,
char* source,
unsigned int sourceLen,
int blockSize100k,
int verbosity,
int workFactor
);
 
BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
char* dest,
unsigned int* destLen,
char* source,
unsigned int sourceLen,
int small,
int verbosity
);
 
 
/*--
Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
to support better zlib compatibility.
This code is not _officially_ part of libbzip2 (yet);
I haven't tested it, documented it, or considered the
threading-safeness of it.
If this code breaks, please contact both Yoshioka and me.
--*/
 
BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
void
);
 
#ifndef BZ_NO_STDIO
BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
const char *path,
const char *mode
);
 
BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
int fd,
const char *mode
);
BZ_EXTERN int BZ_API(BZ2_bzread) (
BZFILE* b,
void* buf,
int len
);
 
BZ_EXTERN int BZ_API(BZ2_bzwrite) (
BZFILE* b,
void* buf,
int len
);
 
BZ_EXTERN int BZ_API(BZ2_bzflush) (
BZFILE* b
);
 
BZ_EXTERN void BZ_API(BZ2_bzclose) (
BZFILE* b
);
 
BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
BZFILE *b,
int *errnum
);
#endif
 
#ifdef __cplusplus
}
#endif
 
#endif
 
/*-------------------------------------------------------------*/
/*--- end bzlib.h ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bsdiff.dsw
0,0 → 1,41
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
 
###############################################################################
 
Project: "bsdiff"=.\bsdiff.dsp - Package Owner=<4>
 
Package=<5>
{{{
}}}
 
Package=<4>
{{{
}}}
 
###############################################################################
 
Project: "bspatch"=.\bspatch.dsp - Package Owner=<4>
 
Package=<5>
{{{
}}}
 
Package=<4>
{{{
}}}
 
###############################################################################
 
Global:
 
Package=<5>
{{{
}}}
 
Package=<3>
{{{
}}}
 
###############################################################################
 
/nw_plus/utils/source/bsdiff-4.3/win32/Binary diff.txt
0,0 → 1,42
Binary diff/patch utility version 4.3, written by
Copyright 2003-2005 Colin Percival <cperciva@freebsd.org>
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
This is a quick native Win32-Port by
Andreas John <dynacore@tesla.inka.de>
 
-------------------------------------------------------------------------
Quick overview from the homepage of these tools:
http://www.daemonology.net/bsdiff/
 
Binary diff/patch utility
bsdiff and bspatch are tools for building and applying patches to binary
files. By using suffix sorting (specifically, Larsson and Sadakane's
qsufsort) and taking advantage of how executable files change, bsdiff
routinely produces binary patches 50-80% smaller than those produced by
Xdelta, and 15% smaller than those produced by .RTPatch (a $2750/seat
commercial patch tool).
 
These programs were originally named bdiff and bpatch, but the large
number of other programs using those names lead to confusion; I'm not
sure if the "bs" in refers to "binary software" (because bsdiff produces
exceptionally small patches for executable files) or "bytewise
subtraction" (which is the key to how well it performs). Feel free to
offer other suggestions.
 
bsdiff and bspatch use bzip2; by default they assume it is in /usr/bin.
 
bsdiff is quite memory-hungry. It requires max(17*n,9*n+m)+O(1) bytes of
memory, where n is the size of the old file and m is the size of the new
file. bspatch requires n+m+O(1) bytes.
 
bsdiff runs in O((n+m) log n) time; on a 200MHz Pentium Pro, building a
binary patch for a 4MB file takes about 90 seconds. bspatch runs in
O(n+m) time; on the same machine, applying that patch takes about two
seconds.
 
Providing that off_t is defined properly, bsdiff and bspatch support
files of up to 2^61-1 = 2Ei-1 bytes.
-------------------------------------------------------------------------
/nw_plus/utils/source/bsdiff-4.3/win32/bsdiff.1
0,0 → 1,63
.\"-
.\" Copyright 2003-2005 Colin Percival
.\" All rights reserved
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted providing that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $FreeBSD: src/usr.bin/bsdiff/bsdiff/bsdiff.1,v 1.1 2005/08/06 01:59:05 cperciva Exp $
.\"
.Dd May 18, 2003
.Dt BSDIFF 1
.Os FreeBSD
.Sh NAME
.Nm bsdiff
.Nd generate a patch between two binary files
.Sh SYNOPSIS
.Nm
.Ao Ar oldfile Ac Ao Ar newfile Ac Ao Ar patchfile Ac
.Sh DESCRIPTION
.Nm
compares
.Ao Ar oldfile Ac
to
.Ao Ar newfile Ac
and writes to
.Ao Ar patchfile Ac
a binary patch suitable for use by bspatch(1).
When
.Ao Ar oldfile Ac
and
.Ao Ar newfile Ac
are two versions of an executable program, the
patches produced are on average a factor of five smaller
than those produced by any other binary patch tool known
to the author.
.Pp
.Nm
uses memory equal to 17 times the size of
.Ao Ar oldfile Ac ,
and requires
an absolute minimum working set size of 8 times the size of oldfile.
.Sh SEE ALSO
.Xr bspatch 1
.Sh AUTHORS
.An Colin Percival Aq cperciva@freebsd.org
/nw_plus/utils/source/bsdiff-4.3/win32/crctable.c
0,0 → 1,104
 
/*-------------------------------------------------------------*/
/*--- Table for doing CRCs ---*/
/*--- crctable.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#include "bzlib_private.h"
 
/*--
I think this is an implementation of the AUTODIN-II,
Ethernet & FDDI 32-bit CRC standard. Vaguely derived
from code by Rob Warnock, in Section 51 of the
comp.compression FAQ.
--*/
 
UInt32 BZ2_crc32Table[256] = {
 
/*-- Ugly, innit? --*/
 
0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
};
 
 
/*-------------------------------------------------------------*/
/*--- end crctable.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bspatch.cpp
0,0 → 1,253
/*-
* Copyright 2003-2005 Colin Percival
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted providing that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <stdlib.h>
#include <stdio.h>
//#include <err.h>
#include "bzlib.h"
#include <io.h>
#include <fcntl.h>
 
#include <sys/types.h>
typedef unsigned char u_char;
typedef signed int ssize_t;
 
template<class T1, class T2>
void err(int i, const char* str, T1 arg1, T2 arg2) {
char lastErrorTxt[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,lastErrorTxt,1024,NULL);
printf("%s",lastErrorTxt);
printf(str, arg1, arg2);
exit(i);
}
template<class T>
void err(int i, const char* str, T arg) {
char lastErrorTxt[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,lastErrorTxt,1024,NULL);
printf("%s",lastErrorTxt);
printf(str, arg);
exit(i);
}
void err(int i, const char* str) {
char lastErrorTxt[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,lastErrorTxt,1024,NULL);
printf("%s",lastErrorTxt);
if (str!=NULL) {
printf("%s",str);
}
exit(i);
}
template<class T>
void errx(int i, const char* str, T arg) {
printf(str, arg);
exit(i);
}
void errx(int i, const char* str) {
printf("%s",str);
exit(i);
}
 
 
static off_t offtin(u_char *buf)
{
off_t y;
 
y=buf[7]&0x7F;
y=y*256;y+=buf[6];
y=y*256;y+=buf[5];
y=y*256;y+=buf[4];
y=y*256;y+=buf[3];
y=y*256;y+=buf[2];
y=y*256;y+=buf[1];
y=y*256;y+=buf[0];
 
if(buf[7]&0x80) y=-y;
 
return y;
}
 
int main(int argc,char * argv[])
{
FILE * f, * cpf, * dpf, * epf;
BZFILE * cpfbz2, * dpfbz2, * epfbz2;
int cbz2err, dbz2err, ebz2err;
int fd;
ssize_t oldsize,newsize;
ssize_t bzctrllen,bzdatalen;
u_char header[32],buf[8];
u_char *old, *_new;
off_t oldpos,newpos;
off_t ctrl[3];
off_t lenread;
off_t i;
 
if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
 
/* Open patch file */
if ((f = fopen(argv[3], "rb")) == NULL)
err(1, "fopen(%s)", argv[3]);
 
/*
File format:
0 8 "BSDIFF40"
8 8 X
16 8 Y
24 8 sizeof(newfile)
32 X bzip2(control block)
32+X Y bzip2(diff block)
32+X+Y ??? bzip2(extra block)
with control block a set of triples (x,y,z) meaning "add x bytes
from oldfile to x bytes from the diff block; copy y bytes from the
extra block; seek forwards in oldfile by z bytes".
*/
 
/* Read header */
if (fread(header, 1, 32, f) < 32) {
if (feof(f))
errx(1, "Corrupt patch\n");
err(1, "fread(%s)", argv[3]);
}
 
/* Check for appropriate magic */
if (memcmp(header, "BSDIFF40", 8) != 0)
errx(1, "Corrupt patch\n");
 
/* Read lengths from header */
bzctrllen=offtin(header+8);
bzdatalen=offtin(header+16);
newsize=offtin(header+24);
if((bzctrllen<0) || (bzdatalen<0) || (newsize<0))
errx(1,"Corrupt patch\n");
 
/* Close patch file and re-open it via libbzip2 at the right places */
if (fclose(f))
err(1, "fclose(%s)", argv[3]);
if ((cpf = fopen(argv[3], "rb")) == NULL)
err(1, "fopen(%s)", argv[3]);
if (fseek(cpf, 32, SEEK_SET))
err(1, "fseeko(%s, %d)", argv[3], 32);
if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL)
errx(1, "BZ2_bzReadOpen, bz2err = %d", cbz2err);
if ((dpf = fopen(argv[3], "rb")) == NULL)
err(1, "fopen(%s)", argv[3]);
if (fseek(dpf, 32 + bzctrllen, SEEK_SET))
err(1, "fseeko(%s, %d)", argv[3],
(32 + bzctrllen));
if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL)
errx(1, "BZ2_bzReadOpen, bz2err = %d", dbz2err);
if ((epf = fopen(argv[3], "rb")) == NULL)
err(1, "fopen(%s)", argv[3]);
if (fseek(epf, 32 + bzctrllen + bzdatalen, SEEK_SET))
err(1, "fseeko(%s, %d)", argv[3],
(32 + bzctrllen + bzdatalen));
if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL)
errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err);
 
//org:
//if(((fd=open(argv[1],O_RDONLY,0))<0) ||
// ((oldsize=lseek(fd,0,SEEK_END))==-1) ||
// ((old=malloc(oldsize+1))==NULL) ||
// (lseek(fd,0,SEEK_SET)!=0) ||
// (read(fd,old,oldsize)!=oldsize) ||
// (close(fd)==-1)) err(1,"%s",argv[1]);
//new:
//Read in chunks, don't rely on read always returns full data!
if(((fd=open(argv[1],O_RDONLY|O_BINARY|O_NOINHERIT,0))<0) ||
((oldsize=lseek(fd,0,SEEK_END))==-1) ||
((old=(u_char*)malloc(oldsize+1))==NULL) ||
(lseek(fd,0,SEEK_SET)!=0))
err(1,"%s",argv[1]);
int r=oldsize;
while (r>0 && (i=read(fd,old+oldsize-r,r))>0) r-=i;
if (r>0 || close(fd)==-1) err(1,"%s",argv[1]);
 
if((_new=(u_char*)malloc(newsize+1))==NULL) err(1,NULL);
 
oldpos=0;newpos=0;
while(newpos<newsize) {
/* Read control data */
for(i=0;i<=2;i++) {
lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8);
if ((lenread < 8) || ((cbz2err != BZ_OK) &&
(cbz2err != BZ_STREAM_END)))
errx(1, "Corrupt patch\n");
ctrl[i]=offtin(buf);
};
 
/* Sanity-check */
if(newpos+ctrl[0]>newsize)
errx(1,"Corrupt patch\n");
 
/* Read diff string */
lenread = BZ2_bzRead(&dbz2err, dpfbz2, _new + newpos, ctrl[0]);
if ((lenread < ctrl[0]) ||
((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END)))
errx(1, "Corrupt patch\n");
 
/* Add old data to diff string */
for(i=0;i<ctrl[0];i++)
if((oldpos+i>=0) && (oldpos+i<oldsize))
_new[newpos+i]+=old[oldpos+i];
 
/* Adjust pointers */
newpos+=ctrl[0];
oldpos+=ctrl[0];
 
/* Sanity-check */
if(newpos+ctrl[1]>newsize)
errx(1,"Corrupt patch\n");
 
/* Read extra string */
lenread = BZ2_bzRead(&ebz2err, epfbz2, _new + newpos, ctrl[1]);
if ((lenread < ctrl[1]) ||
((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END)))
errx(1, "Corrupt patch\n");
 
/* Adjust pointers */
newpos+=ctrl[1];
oldpos+=ctrl[2];
};
 
/* Clean up the bzip2 reads */
BZ2_bzReadClose(&cbz2err, cpfbz2);
BZ2_bzReadClose(&dbz2err, dpfbz2);
BZ2_bzReadClose(&ebz2err, epfbz2);
if (fclose(cpf) || fclose(dpf) || fclose(epf))
err(1, "fclose(%s)", argv[3]);
 
/* Write the new file */
//org:
//if(((fd=open(argv[2],O_CREAT|O_TRUNC|O_WRONLY,0666))<0) ||
//new:
if(((fd=open(argv[2],O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666))<0) ||
(write(fd,_new,newsize)!=newsize) || (close(fd)==-1))
err(1,"%s",argv[2]);
 
free(_new);
free(old);
 
return 0;
}
/nw_plus/utils/source/bsdiff-4.3/win32/huffman.c
0,0 → 1,205
 
/*-------------------------------------------------------------*/
/*--- Huffman coding low-level stuff ---*/
/*--- huffman.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#include "bzlib_private.h"
 
/*---------------------------------------------------*/
#define WEIGHTOF(zz0) ((zz0) & 0xffffff00)
#define DEPTHOF(zz1) ((zz1) & 0x000000ff)
#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
 
#define ADDWEIGHTS(zw1,zw2) \
(WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \
(1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
 
#define UPHEAP(z) \
{ \
Int32 zz, tmp; \
zz = z; tmp = heap[zz]; \
while (weight[tmp] < weight[heap[zz >> 1]]) { \
heap[zz] = heap[zz >> 1]; \
zz >>= 1; \
} \
heap[zz] = tmp; \
}
 
#define DOWNHEAP(z) \
{ \
Int32 zz, yy, tmp; \
zz = z; tmp = heap[zz]; \
while (True) { \
yy = zz << 1; \
if (yy > nHeap) break; \
if (yy < nHeap && \
weight[heap[yy+1]] < weight[heap[yy]]) \
yy++; \
if (weight[tmp] < weight[heap[yy]]) break; \
heap[zz] = heap[yy]; \
zz = yy; \
} \
heap[zz] = tmp; \
}
 
 
/*---------------------------------------------------*/
void BZ2_hbMakeCodeLengths ( UChar *len,
Int32 *freq,
Int32 alphaSize,
Int32 maxLen )
{
/*--
Nodes and heap entries run from 1. Entry 0
for both the heap and nodes is a sentinel.
--*/
Int32 nNodes, nHeap, n1, n2, i, j, k;
Bool tooLong;
 
Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ];
Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ];
 
for (i = 0; i < alphaSize; i++)
weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
 
while (True) {
 
nNodes = alphaSize;
nHeap = 0;
 
heap[0] = 0;
weight[0] = 0;
parent[0] = -2;
 
for (i = 1; i <= alphaSize; i++) {
parent[i] = -1;
nHeap++;
heap[nHeap] = i;
UPHEAP(nHeap);
}
 
AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
while (nHeap > 1) {
n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
nNodes++;
parent[n1] = parent[n2] = nNodes;
weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
parent[nNodes] = -1;
nHeap++;
heap[nHeap] = nNodes;
UPHEAP(nHeap);
}
 
AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
 
tooLong = False;
for (i = 1; i <= alphaSize; i++) {
j = 0;
k = i;
while (parent[k] >= 0) { k = parent[k]; j++; }
len[i-1] = j;
if (j > maxLen) tooLong = True;
}
if (! tooLong) break;
 
/* 17 Oct 04: keep-going condition for the following loop used
to be 'i < alphaSize', which missed the last element,
theoretically leading to the possibility of the compressor
looping. However, this count-scaling step is only needed if
one of the generated Huffman code words is longer than
maxLen, which up to and including version 1.0.2 was 20 bits,
which is extremely unlikely. In version 1.0.3 maxLen was
changed to 17 bits, which has minimal effect on compression
ratio, but does mean this scaling step is used from time to
time, enough to verify that it works.
 
This means that bzip2-1.0.3 and later will only produce
Huffman codes with a maximum length of 17 bits. However, in
order to preserve backwards compatibility with bitstreams
produced by versions pre-1.0.3, the decompressor must still
handle lengths of up to 20. */
 
for (i = 1; i <= alphaSize; i++) {
j = weight[i] >> 8;
j = 1 + (j / 2);
weight[i] = j << 8;
}
}
}
 
 
/*---------------------------------------------------*/
void BZ2_hbAssignCodes ( Int32 *code,
UChar *length,
Int32 minLen,
Int32 maxLen,
Int32 alphaSize )
{
Int32 n, vec, i;
 
vec = 0;
for (n = minLen; n <= maxLen; n++) {
for (i = 0; i < alphaSize; i++)
if (length[i] == n) { code[i] = vec; vec++; };
vec <<= 1;
}
}
 
 
/*---------------------------------------------------*/
void BZ2_hbCreateDecodeTables ( Int32 *limit,
Int32 *base,
Int32 *perm,
UChar *length,
Int32 minLen,
Int32 maxLen,
Int32 alphaSize )
{
Int32 pp, i, j, vec;
 
pp = 0;
for (i = minLen; i <= maxLen; i++)
for (j = 0; j < alphaSize; j++)
if (length[j] == i) { perm[pp] = j; pp++; };
 
for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
 
for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
 
for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
vec = 0;
 
for (i = minLen; i <= maxLen; i++) {
vec += (base[i+1] - base[i]);
limit[i] = vec-1;
vec <<= 1;
}
for (i = minLen + 1; i <= maxLen; i++)
base[i] = ((limit[i-1] + 1) << 1) - base[i];
}
 
 
/*-------------------------------------------------------------*/
/*--- end huffman.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bspatch.dsp
0,0 → 1,136
# Microsoft Developer Studio Project File - Name="bspatch" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
 
# TARGTYPE "Win32 (x86) Console Application" 0x0103
 
CFG=bspatch - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "bspatch.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "bspatch.mak" CFG="bspatch - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "bspatch - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "bspatch - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
 
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
 
!IF "$(CFG)" == "bspatch - Win32 Release"
 
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x407 /d "NDEBUG"
# ADD RSC /l 0x407 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
 
!ELSEIF "$(CFG)" == "bspatch - Win32 Debug"
 
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x407 /d "_DEBUG"
# ADD RSC /l 0x407 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
 
!ENDIF
 
# Begin Target
 
# Name "bspatch - Win32 Release"
# Name "bspatch - Win32 Debug"
# Begin Group "Source Files"
 
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
 
SOURCE=.\blocksort.c
# End Source File
# Begin Source File
 
SOURCE=.\bspatch.cpp
# End Source File
# Begin Source File
 
SOURCE=.\bzlib.c
# End Source File
# Begin Source File
 
SOURCE=.\compress.c
# End Source File
# Begin Source File
 
SOURCE=.\crctable.c
# End Source File
# Begin Source File
 
SOURCE=.\decompress.c
# End Source File
# Begin Source File
 
SOURCE=.\huffman.c
# End Source File
# Begin Source File
 
SOURCE=.\randtable.c
# End Source File
# End Group
# Begin Group "Header Files"
 
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
 
SOURCE=.\bzlib.h
# End Source File
# Begin Source File
 
SOURCE=.\bzlib_private.h
# End Source File
# End Group
# Begin Group "Resource Files"
 
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project
/nw_plus/utils/source/bsdiff-4.3/win32/compress.c
0,0 → 1,672
 
/*-------------------------------------------------------------*/
/*--- Compression machinery (not incl block sorting) ---*/
/*--- compress.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
/* CHANGES
0.9.0 -- original version.
0.9.0a/b -- no changes in this file.
0.9.0c -- changed setting of nGroups in sendMTFValues()
so as to do a bit better on small files
*/
 
#include "bzlib_private.h"
 
 
/*---------------------------------------------------*/
/*--- Bit stream I/O ---*/
/*---------------------------------------------------*/
 
/*---------------------------------------------------*/
void BZ2_bsInitWrite ( EState* s )
{
s->bsLive = 0;
s->bsBuff = 0;
}
 
 
/*---------------------------------------------------*/
static
void bsFinishWrite ( EState* s )
{
while (s->bsLive > 0) {
s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
s->numZ++;
s->bsBuff <<= 8;
s->bsLive -= 8;
}
}
 
 
/*---------------------------------------------------*/
#define bsNEEDW(nz) \
{ \
while (s->bsLive >= 8) { \
s->zbits[s->numZ] \
= (UChar)(s->bsBuff >> 24); \
s->numZ++; \
s->bsBuff <<= 8; \
s->bsLive -= 8; \
} \
}
 
 
/*---------------------------------------------------*/
static
__inline__
void bsW ( EState* s, Int32 n, UInt32 v )
{
bsNEEDW ( n );
s->bsBuff |= (v << (32 - s->bsLive - n));
s->bsLive += n;
}
 
 
/*---------------------------------------------------*/
static
void bsPutUInt32 ( EState* s, UInt32 u )
{
bsW ( s, 8, (u >> 24) & 0xffL );
bsW ( s, 8, (u >> 16) & 0xffL );
bsW ( s, 8, (u >> 8) & 0xffL );
bsW ( s, 8, u & 0xffL );
}
 
 
/*---------------------------------------------------*/
static
void bsPutUChar ( EState* s, UChar c )
{
bsW( s, 8, (UInt32)c );
}
 
 
/*---------------------------------------------------*/
/*--- The back end proper ---*/
/*---------------------------------------------------*/
 
/*---------------------------------------------------*/
static
void makeMaps_e ( EState* s )
{
Int32 i;
s->nInUse = 0;
for (i = 0; i < 256; i++)
if (s->inUse[i]) {
s->unseqToSeq[i] = s->nInUse;
s->nInUse++;
}
}
 
 
/*---------------------------------------------------*/
static
void generateMTFValues ( EState* s )
{
UChar yy[256];
Int32 i, j;
Int32 zPend;
Int32 wr;
Int32 EOB;
 
/*
After sorting (eg, here),
s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
and
((UChar*)s->arr2) [ 0 .. s->nblock-1 ]
holds the original block data.
 
The first thing to do is generate the MTF values,
and put them in
((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
Because there are strictly fewer or equal MTF values
than block values, ptr values in this area are overwritten
with MTF values only when they are no longer needed.
 
The final compressed bitstream is generated into the
area starting at
(UChar*) (&((UChar*)s->arr2)[s->nblock])
 
These storage aliases are set up in bzCompressInit(),
except for the last one, which is arranged in
compressBlock().
*/
UInt32* ptr = s->ptr;
UChar* block = s->block;
UInt16* mtfv = s->mtfv;
 
makeMaps_e ( s );
EOB = s->nInUse+1;
 
for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
 
wr = 0;
zPend = 0;
for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
 
for (i = 0; i < s->nblock; i++) {
UChar ll_i;
AssertD ( wr <= i, "generateMTFValues(1)" );
j = ptr[i]-1; if (j < 0) j += s->nblock;
ll_i = s->unseqToSeq[block[j]];
AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
 
if (yy[0] == ll_i) {
zPend++;
} else {
 
if (zPend > 0) {
zPend--;
while (True) {
if (zPend & 1) {
mtfv[wr] = BZ_RUNB; wr++;
s->mtfFreq[BZ_RUNB]++;
} else {
mtfv[wr] = BZ_RUNA; wr++;
s->mtfFreq[BZ_RUNA]++;
}
if (zPend < 2) break;
zPend = (zPend - 2) / 2;
};
zPend = 0;
}
{
register UChar rtmp;
register UChar* ryy_j;
register UChar rll_i;
rtmp = yy[1];
yy[1] = yy[0];
ryy_j = &(yy[1]);
rll_i = ll_i;
while ( rll_i != rtmp ) {
register UChar rtmp2;
ryy_j++;
rtmp2 = rtmp;
rtmp = *ryy_j;
*ryy_j = rtmp2;
};
yy[0] = rtmp;
j = ryy_j - &(yy[0]);
mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
}
 
}
}
 
if (zPend > 0) {
zPend--;
while (True) {
if (zPend & 1) {
mtfv[wr] = BZ_RUNB; wr++;
s->mtfFreq[BZ_RUNB]++;
} else {
mtfv[wr] = BZ_RUNA; wr++;
s->mtfFreq[BZ_RUNA]++;
}
if (zPend < 2) break;
zPend = (zPend - 2) / 2;
};
zPend = 0;
}
 
mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
 
s->nMTF = wr;
}
 
 
/*---------------------------------------------------*/
#define BZ_LESSER_ICOST 0
#define BZ_GREATER_ICOST 15
 
static
void sendMTFValues ( EState* s )
{
Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
Int32 nGroups, nBytes;
 
/*--
UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
is a global since the decoder also needs it.
 
Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
are also globals only used in this proc.
Made global to keep stack frame size small.
--*/
 
 
UInt16 cost[BZ_N_GROUPS];
Int32 fave[BZ_N_GROUPS];
 
UInt16* mtfv = s->mtfv;
 
if (s->verbosity >= 3)
VPrintf3( " %d in block, %d after MTF & 1-2 coding, "
"%d+2 syms in use\n",
s->nblock, s->nMTF, s->nInUse );
 
alphaSize = s->nInUse+2;
for (t = 0; t < BZ_N_GROUPS; t++)
for (v = 0; v < alphaSize; v++)
s->len[t][v] = BZ_GREATER_ICOST;
 
/*--- Decide how many coding tables to use ---*/
AssertH ( s->nMTF > 0, 3001 );
if (s->nMTF < 200) nGroups = 2; else
if (s->nMTF < 600) nGroups = 3; else
if (s->nMTF < 1200) nGroups = 4; else
if (s->nMTF < 2400) nGroups = 5; else
nGroups = 6;
 
/*--- Generate an initial set of coding tables ---*/
{
Int32 nPart, remF, tFreq, aFreq;
 
nPart = nGroups;
remF = s->nMTF;
gs = 0;
while (nPart > 0) {
tFreq = remF / nPart;
ge = gs-1;
aFreq = 0;
while (aFreq < tFreq && ge < alphaSize-1) {
ge++;
aFreq += s->mtfFreq[ge];
}
 
if (ge > gs
&& nPart != nGroups && nPart != 1
&& ((nGroups-nPart) % 2 == 1)) {
aFreq -= s->mtfFreq[ge];
ge--;
}
 
if (s->verbosity >= 3)
VPrintf5( " initial group %d, [%d .. %d], "
"has %d syms (%4.1f%%)\n",
nPart, gs, ge, aFreq,
(100.0 * (float)aFreq) / (float)(s->nMTF) );
for (v = 0; v < alphaSize; v++)
if (v >= gs && v <= ge)
s->len[nPart-1][v] = BZ_LESSER_ICOST; else
s->len[nPart-1][v] = BZ_GREATER_ICOST;
nPart--;
gs = ge+1;
remF -= aFreq;
}
}
 
/*---
Iterate up to BZ_N_ITERS times to improve the tables.
---*/
for (iter = 0; iter < BZ_N_ITERS; iter++) {
 
for (t = 0; t < nGroups; t++) fave[t] = 0;
 
for (t = 0; t < nGroups; t++)
for (v = 0; v < alphaSize; v++)
s->rfreq[t][v] = 0;
 
/*---
Set up an auxiliary length table which is used to fast-track
the common case (nGroups == 6).
---*/
if (nGroups == 6) {
for (v = 0; v < alphaSize; v++) {
s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
}
}
 
nSelectors = 0;
totc = 0;
gs = 0;
while (True) {
 
/*--- Set group start & end marks. --*/
if (gs >= s->nMTF) break;
ge = gs + BZ_G_SIZE - 1;
if (ge >= s->nMTF) ge = s->nMTF-1;
 
/*--
Calculate the cost of this group as coded
by each of the coding tables.
--*/
for (t = 0; t < nGroups; t++) cost[t] = 0;
 
if (nGroups == 6 && 50 == ge-gs+1) {
/*--- fast track the common case ---*/
register UInt32 cost01, cost23, cost45;
register UInt16 icv;
cost01 = cost23 = cost45 = 0;
 
# define BZ_ITER(nn) \
icv = mtfv[gs+(nn)]; \
cost01 += s->len_pack[icv][0]; \
cost23 += s->len_pack[icv][1]; \
cost45 += s->len_pack[icv][2]; \
 
BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4);
BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9);
BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
 
# undef BZ_ITER
 
cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
 
} else {
/*--- slow version which correctly handles all situations ---*/
for (i = gs; i <= ge; i++) {
UInt16 icv = mtfv[i];
for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
}
}
/*--
Find the coding table which is best for this group,
and record its identity in the selector table.
--*/
bc = 999999999; bt = -1;
for (t = 0; t < nGroups; t++)
if (cost[t] < bc) { bc = cost[t]; bt = t; };
totc += bc;
fave[bt]++;
s->selector[nSelectors] = bt;
nSelectors++;
 
/*--
Increment the symbol frequencies for the selected table.
--*/
if (nGroups == 6 && 50 == ge-gs+1) {
/*--- fast track the common case ---*/
 
# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
 
BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4);
BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9);
BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
 
# undef BZ_ITUR
 
} else {
/*--- slow version which correctly handles all situations ---*/
for (i = gs; i <= ge; i++)
s->rfreq[bt][ mtfv[i] ]++;
}
 
gs = ge+1;
}
if (s->verbosity >= 3) {
VPrintf2 ( " pass %d: size is %d, grp uses are ",
iter+1, totc/8 );
for (t = 0; t < nGroups; t++)
VPrintf1 ( "%d ", fave[t] );
VPrintf0 ( "\n" );
}
 
/*--
Recompute the tables based on the accumulated frequencies.
--*/
/* maxLen was changed from 20 to 17 in bzip2-1.0.3. See
comment in huffman.c for details. */
for (t = 0; t < nGroups; t++)
BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
alphaSize, 17 /*20*/ );
}
 
 
AssertH( nGroups < 8, 3002 );
AssertH( nSelectors < 32768 &&
nSelectors <= (2 + (900000 / BZ_G_SIZE)),
3003 );
 
 
/*--- Compute MTF values for the selectors. ---*/
{
UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
for (i = 0; i < nGroups; i++) pos[i] = i;
for (i = 0; i < nSelectors; i++) {
ll_i = s->selector[i];
j = 0;
tmp = pos[j];
while ( ll_i != tmp ) {
j++;
tmp2 = tmp;
tmp = pos[j];
pos[j] = tmp2;
};
pos[0] = tmp;
s->selectorMtf[i] = j;
}
};
 
/*--- Assign actual codes for the tables. --*/
for (t = 0; t < nGroups; t++) {
minLen = 32;
maxLen = 0;
for (i = 0; i < alphaSize; i++) {
if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
if (s->len[t][i] < minLen) minLen = s->len[t][i];
}
AssertH ( !(maxLen > 17 /*20*/ ), 3004 );
AssertH ( !(minLen < 1), 3005 );
BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
minLen, maxLen, alphaSize );
}
 
/*--- Transmit the mapping table. ---*/
{
Bool inUse16[16];
for (i = 0; i < 16; i++) {
inUse16[i] = False;
for (j = 0; j < 16; j++)
if (s->inUse[i * 16 + j]) inUse16[i] = True;
}
nBytes = s->numZ;
for (i = 0; i < 16; i++)
if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
 
for (i = 0; i < 16; i++)
if (inUse16[i])
for (j = 0; j < 16; j++) {
if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
}
 
if (s->verbosity >= 3)
VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes );
}
 
/*--- Now the selectors. ---*/
nBytes = s->numZ;
bsW ( s, 3, nGroups );
bsW ( s, 15, nSelectors );
for (i = 0; i < nSelectors; i++) {
for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
bsW(s,1,0);
}
if (s->verbosity >= 3)
VPrintf1( "selectors %d, ", s->numZ-nBytes );
 
/*--- Now the coding tables. ---*/
nBytes = s->numZ;
 
for (t = 0; t < nGroups; t++) {
Int32 curr = s->len[t][0];
bsW ( s, 5, curr );
for (i = 0; i < alphaSize; i++) {
while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
bsW ( s, 1, 0 );
}
}
 
if (s->verbosity >= 3)
VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
 
/*--- And finally, the block data proper ---*/
nBytes = s->numZ;
selCtr = 0;
gs = 0;
while (True) {
if (gs >= s->nMTF) break;
ge = gs + BZ_G_SIZE - 1;
if (ge >= s->nMTF) ge = s->nMTF-1;
AssertH ( s->selector[selCtr] < nGroups, 3006 );
 
if (nGroups == 6 && 50 == ge-gs+1) {
/*--- fast track the common case ---*/
UInt16 mtfv_i;
UChar* s_len_sel_selCtr
= &(s->len[s->selector[selCtr]][0]);
Int32* s_code_sel_selCtr
= &(s->code[s->selector[selCtr]][0]);
 
# define BZ_ITAH(nn) \
mtfv_i = mtfv[gs+(nn)]; \
bsW ( s, \
s_len_sel_selCtr[mtfv_i], \
s_code_sel_selCtr[mtfv_i] )
 
BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4);
BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9);
BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
 
# undef BZ_ITAH
 
} else {
/*--- slow version which correctly handles all situations ---*/
for (i = gs; i <= ge; i++) {
bsW ( s,
s->len [s->selector[selCtr]] [mtfv[i]],
s->code [s->selector[selCtr]] [mtfv[i]] );
}
}
 
 
gs = ge+1;
selCtr++;
}
AssertH( selCtr == nSelectors, 3007 );
 
if (s->verbosity >= 3)
VPrintf1( "codes %d\n", s->numZ-nBytes );
}
 
 
/*---------------------------------------------------*/
void BZ2_compressBlock ( EState* s, Bool is_last_block )
{
if (s->nblock > 0) {
 
BZ_FINALISE_CRC ( s->blockCRC );
s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
s->combinedCRC ^= s->blockCRC;
if (s->blockNo > 1) s->numZ = 0;
 
if (s->verbosity >= 2)
VPrintf4( " block %d: crc = 0x%08x, "
"combined CRC = 0x%08x, size = %d\n",
s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
 
BZ2_blockSort ( s );
}
 
s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
 
/*-- If this is the first block, create the stream header. --*/
if (s->blockNo == 1) {
BZ2_bsInitWrite ( s );
bsPutUChar ( s, BZ_HDR_B );
bsPutUChar ( s, BZ_HDR_Z );
bsPutUChar ( s, BZ_HDR_h );
bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
}
 
if (s->nblock > 0) {
 
bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
 
/*-- Now the block's CRC, so it is in a known place. --*/
bsPutUInt32 ( s, s->blockCRC );
 
/*--
Now a single bit indicating (non-)randomisation.
As of version 0.9.5, we use a better sorting algorithm
which makes randomisation unnecessary. So always set
the randomised bit to 'no'. Of course, the decoder
still needs to be able to handle randomised blocks
so as to maintain backwards compatibility with
older versions of bzip2.
--*/
bsW(s,1,0);
 
bsW ( s, 24, s->origPtr );
generateMTFValues ( s );
sendMTFValues ( s );
}
 
 
/*-- If this is the last block, add the stream trailer. --*/
if (is_last_block) {
 
bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
bsPutUInt32 ( s, s->combinedCRC );
if (s->verbosity >= 2)
VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC );
bsFinishWrite ( s );
}
}
 
 
/*-------------------------------------------------------------*/
/*--- end compress.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/randtable.c
0,0 → 1,84
 
/*-------------------------------------------------------------*/
/*--- Table for randomising repetitive blocks ---*/
/*--- randtable.c ---*/
/*-------------------------------------------------------------*/
 
/* ------------------------------------------------------------------
This file is part of bzip2/libbzip2, a program and library for
lossless, block-sorting data compression.
 
bzip2/libbzip2 version 1.0.4 of 20 December 2006
Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>
 
Please read the WARNING, DISCLAIMER and PATENTS sections in the
README file.
 
This program is released under the terms of the license contained
in the file LICENSE.
------------------------------------------------------------------ */
 
 
#include "bzlib_private.h"
 
 
/*---------------------------------------------*/
Int32 BZ2_rNums[512] = {
619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
936, 638
};
 
 
/*-------------------------------------------------------------*/
/*--- end randtable.c ---*/
/*-------------------------------------------------------------*/
/nw_plus/utils/source/bsdiff-4.3/win32/bsdiff.cpp
0,0 → 1,463
/*-
* Copyright 2003-2005 Colin Percival
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted providing that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
 
 
#include <stdlib.h>
#include "bzlib.h"
#include <stdio.h>
#include <string.h>
//#include <err.h>
//#include <unistd.h>
#include <io.h>
#include <fcntl.h>
//#include <sys/wait.h>
 
 
#include <windows.h>
#include <process.h>
#include <sys/types.h>
typedef unsigned char u_char;
typedef long pid_t;
 
template<class T>
void err(int i, const char* str, T arg) {
char lastErrorTxt[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,lastErrorTxt,1024,NULL);
printf("%s",lastErrorTxt);
printf(str, arg);
exit(i);
}
void err(int i, const char* str) {
char lastErrorTxt[1024];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,lastErrorTxt,1024,NULL);
printf("%s",lastErrorTxt);
if (str!=NULL) {
printf("%s",str);
}
exit(i);
}
template<class T>
void errx(int i, const char* str, T arg) {
printf(str, arg);
exit(i);
}
void errx(int i, const char* str) {
printf("%s",str);
exit(i);
}
 
#define MIN(x,y) (((x)<(y)) ? (x) : (y))
 
static void split(off_t *I,off_t *V,off_t start,off_t len,off_t h)
{
off_t i,j,k,x,tmp,jj,kk;
 
if(len<16) {
for(k=start;k<start+len;k+=j) {
j=1;x=V[I[k]+h];
for(i=1;k+i<start+len;i++) {
if(V[I[k+i]+h]<x) {
x=V[I[k+i]+h];
j=0;
};
if(V[I[k+i]+h]==x) {
tmp=I[k+j];I[k+j]=I[k+i];I[k+i]=tmp;
j++;
};
};
for(i=0;i<j;i++) V[I[k+i]]=k+j-1;
if(j==1) I[k]=-1;
};
return;
};
 
x=V[I[start+len/2]+h];
jj=0;kk=0;
for(i=start;i<start+len;i++) {
if(V[I[i]+h]<x) jj++;
if(V[I[i]+h]==x) kk++;
};
jj+=start;kk+=jj;
 
i=start;j=0;k=0;
while(i<jj) {
if(V[I[i]+h]<x) {
i++;
} else if(V[I[i]+h]==x) {
tmp=I[i];I[i]=I[jj+j];I[jj+j]=tmp;
j++;
} else {
tmp=I[i];I[i]=I[kk+k];I[kk+k]=tmp;
k++;
};
};
 
while(jj+j<kk) {
if(V[I[jj+j]+h]==x) {
j++;
} else {
tmp=I[jj+j];I[jj+j]=I[kk+k];I[kk+k]=tmp;
k++;
};
};
 
if(jj>start) split(I,V,start,jj-start,h);
 
for(i=0;i<kk-jj;i++) V[I[jj+i]]=kk-1;
if(jj==kk-1) I[jj]=-1;
 
if(start+len>kk) split(I,V,kk,start+len-kk,h);
}
 
static void qsufsort(off_t *I,off_t *V,u_char *old,off_t oldsize)
{
off_t buckets[256];
off_t i,h,len;
 
for(i=0;i<256;i++) buckets[i]=0;
for(i=0;i<oldsize;i++) buckets[old[i]]++;
for(i=1;i<256;i++) buckets[i]+=buckets[i-1];
for(i=255;i>0;i--) buckets[i]=buckets[i-1];
buckets[0]=0;
 
for(i=0;i<oldsize;i++) I[++buckets[old[i]]]=i;
I[0]=oldsize;
for(i=0;i<oldsize;i++) V[i]=buckets[old[i]];
V[oldsize]=0;
for(i=1;i<256;i++) if(buckets[i]==buckets[i-1]+1) I[buckets[i]]=-1;
I[0]=-1;
 
for(h=1;I[0]!=-(oldsize+1);h+=h) {
len=0;
for(i=0;i<oldsize+1;) {
if(I[i]<0) {
len-=I[i];
i-=I[i];
} else {
if(len) I[i-len]=-len;
len=V[I[i]]+1-i;
split(I,V,i,len,h);
i+=len;
len=0;
};
};
if(len) I[i-len]=-len;
};
 
for(i=0;i<oldsize+1;i++) I[V[i]]=i;
}
 
static off_t matchlen(u_char *old,off_t oldsize,u_char *_new,off_t newsize)
{
off_t i;
 
for(i=0;(i<oldsize)&&(i<newsize);i++)
if(old[i]!=_new[i]) break;
 
return i;
}
 
static off_t search(off_t *I,u_char *old,off_t oldsize,
u_char *_new,off_t newsize,off_t st,off_t en,off_t *pos)
{
off_t x,y;
 
if(en-st<2) {
x=matchlen(old+I[st],oldsize-I[st],_new,newsize);
y=matchlen(old+I[en],oldsize-I[en],_new,newsize);
 
if(x>y) {
*pos=I[st];
return x;
} else {
*pos=I[en];
return y;
}
};
 
x=st+(en-st)/2;
if(memcmp(old+I[x],_new,MIN(oldsize-I[x],newsize))<0) {
return search(I,old,oldsize,_new,newsize,x,en,pos);
} else {
return search(I,old,oldsize,_new,newsize,st,x,pos);
};
}
 
static void offtout(off_t x,u_char *buf)
{
off_t y;
 
if(x<0) y=-x; else y=x;
 
buf[0]=y%256;y-=buf[0];
y=y/256;buf[1]=y%256;y-=buf[1];
y=y/256;buf[2]=y%256;y-=buf[2];
y=y/256;buf[3]=y%256;y-=buf[3];
y=y/256;buf[4]=y%256;y-=buf[4];
y=y/256;buf[5]=y%256;y-=buf[5];
y=y/256;buf[6]=y%256;y-=buf[6];
y=y/256;buf[7]=y%256;
 
if(x<0) buf[7]|=0x80;
}
 
int main(int argc,char *argv[])
{
int fd;
u_char *old,*_new;
off_t oldsize,newsize;
off_t *I,*V;
off_t scan,pos,len;
off_t lastscan,lastpos,lastoffset;
off_t oldscore,scsc;
off_t s,Sf,lenf,Sb,lenb;
off_t overlap,Ss,lens;
off_t i;
off_t dblen,eblen;
u_char *db,*eb;
u_char buf[8];
u_char header[32];
FILE * pf;
BZFILE * pfbz2;
int bz2err;
 
if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
 
/* Allocate oldsize+1 bytes instead of oldsize bytes to ensure
that we never try to malloc(0) and get a NULL pointer */
//org:
//if(((fd=open(argv[1],O_RDONLY,0))<0) ||
// ((oldsize=lseek(fd,0,SEEK_END))==-1) ||
// ((old=malloc(oldsize+1))==NULL) ||
// (lseek(fd,0,SEEK_SET)!=0) ||
// (read(fd,old,oldsize)!=oldsize) ||
// (close(fd)==-1)) err(1,"%s",argv[1]);
//new:
//Read in chunks, don't rely on read always returns full data!
if(((fd=open(argv[1],O_RDONLY|O_BINARY|O_NOINHERIT,0))<0) ||
((oldsize=lseek(fd,0,SEEK_END))==-1) ||
((old=(u_char*)malloc(oldsize+1))==NULL) ||
(lseek(fd,0,SEEK_SET)!=0))
err(1,"%s",argv[1]);
int r=oldsize;
while (r>0 && (i=read(fd,old+oldsize-r,r))>0) r-=i;
if (r>0 || close(fd)==-1) err(1,"%s",argv[1]);
 
 
if(((I=(off_t*)malloc((oldsize+1)*sizeof(off_t)))==NULL) ||
((V=(off_t*)malloc((oldsize+1)*sizeof(off_t)))==NULL)) err(1,NULL);
 
qsufsort(I,V,old,oldsize);
 
free(V);
 
/* Allocate newsize+1 bytes instead of newsize bytes to ensure
that we never try to malloc(0) and get a NULL pointer */
//org:
//if(((fd=open(argv[2],O_RDONLY,0))<0) ||
// ((newsize=lseek(fd,0,SEEK_END))==-1) ||
// ((_new=malloc(newsize+1))==NULL) ||
// (lseek(fd,0,SEEK_SET)!=0) ||
// (read(fd,_new,newsize)!=newsize) ||
// (close(fd)==-1)) err(1,"%s",argv[2]);
//new:
//Read in chunks, don't rely on read always returns full data!
if(((fd=open(argv[2],O_RDONLY|O_BINARY|O_NOINHERIT,0))<0) ||
((newsize=lseek(fd,0,SEEK_END))==-1) ||
((_new=(u_char*)malloc(newsize+1))==NULL) ||
(lseek(fd,0,SEEK_SET)!=0))
err(1,"%s",argv[2]);
 
r=newsize;
while (r>0 && (i=read(fd,_new+newsize-r,r))>0) r-=i;
if (r>0 || close(fd)==-1) err(1,"%s",argv[1]);
 
if(((db=(u_char*)malloc(newsize+1))==NULL) ||
((eb=(u_char*)malloc(newsize+1))==NULL)) err(1,NULL);
dblen=0;
eblen=0;
 
/* Create the patch file */
//org:
//if ((pf = fopen(argv[3], "w")) == NULL)
//new:
//if((fd=open(argv[3],O_CREAT|O_TRUNC|O_WRONLY|O_BINARY|O_NOINHERIT,0666))<0)
if ((pf = fopen(argv[3], "wb")) == NULL)
err(1,"%s",argv[3]);
 
/* Header is
0 8 "BSDIFF40"
8 8 length of bzip2ed ctrl block
16 8 length of bzip2ed diff block
24 8 length of new file */
/* File is
0 32 Header
32 ?? Bzip2ed ctrl block
?? ?? Bzip2ed diff block
?? ?? Bzip2ed extra block */
memcpy(header,"BSDIFF40",8);
offtout(0, header + 8);
offtout(0, header + 16);
offtout(newsize, header + 24);
if (fwrite(header, 32, 1, pf) != 1)
err(1, "fwrite(%s)", argv[3]);
 
/* Compute the differences, writing ctrl as we go */
if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL)
errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err);
scan=0;len=0;
lastscan=0;lastpos=0;lastoffset=0;
while(scan<newsize) {
oldscore=0;
 
for(scsc=scan+=len;scan<newsize;scan++) {
len=search(I,old,oldsize,_new+scan,newsize-scan,
0,oldsize,&pos);
 
for(;scsc<scan+len;scsc++)
if((scsc+lastoffset<oldsize) &&
(old[scsc+lastoffset] == _new[scsc]))
oldscore++;
 
if(((len==oldscore) && (len!=0)) ||
(len>oldscore+8)) break;
 
if((scan+lastoffset<oldsize) &&
(old[scan+lastoffset] == _new[scan]))
oldscore--;
};
 
if((len!=oldscore) || (scan==newsize)) {
s=0;Sf=0;lenf=0;
for(i=0;(lastscan+i<scan)&&(lastpos+i<oldsize);) {
if(old[lastpos+i]==_new[lastscan+i]) s++;
i++;
if(s*2-i>Sf*2-lenf) { Sf=s; lenf=i; };
};
 
lenb=0;
if(scan<newsize) {
s=0;Sb=0;
for(i=1;(scan>=lastscan+i)&&(pos>=i);i++) {
if(old[pos-i]==_new[scan-i]) s++;
if(s*2-i>Sb*2-lenb) { Sb=s; lenb=i; };
};
};
 
if(lastscan+lenf>scan-lenb) {
overlap=(lastscan+lenf)-(scan-lenb);
s=0;Ss=0;lens=0;
for(i=0;i<overlap;i++) {
if(_new[lastscan+lenf-overlap+i]==
old[lastpos+lenf-overlap+i]) s++;
if(_new[scan-lenb+i]==
old[pos-lenb+i]) s--;
if(s>Ss) { Ss=s; lens=i+1; };
};
 
lenf+=lens-overlap;
lenb-=lens;
};
 
for(i=0;i<lenf;i++)
db[dblen+i]=_new[lastscan+i]-old[lastpos+i];
for(i=0;i<(scan-lenb)-(lastscan+lenf);i++)
eb[eblen+i]=_new[lastscan+lenf+i];
 
dblen+=lenf;
eblen+=(scan-lenb)-(lastscan+lenf);
 
offtout(lenf,buf);
BZ2_bzWrite(&bz2err, pfbz2, buf, 8);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
 
offtout((scan-lenb)-(lastscan+lenf),buf);
BZ2_bzWrite(&bz2err, pfbz2, buf, 8);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
 
offtout((pos-lenb)-(lastpos+lenf),buf);
BZ2_bzWrite(&bz2err, pfbz2, buf, 8);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
 
lastscan=scan-lenb;
lastpos=pos-lenb;
lastoffset=pos-scan;
};
};
BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err);
 
/* Compute size of compressed ctrl data */
if ((len = ftell(pf)) == -1)
err(1, "ftello");
offtout(len-32, header + 8);
 
/* Write compressed diff data */
if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL)
errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err);
BZ2_bzWrite(&bz2err, pfbz2, db, dblen);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err);
 
/* Compute size of compressed diff data */
if ((newsize = ftell(pf)) == -1)
err(1, "ftello");
offtout(newsize - len, header + 16);
 
/* Write compressed extra data */
if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL)
errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err);
BZ2_bzWrite(&bz2err, pfbz2, eb, eblen);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err);
 
/* Seek to the beginning, write the header, and close the file */
if (fseek(pf, 0, SEEK_SET))
err(1, "fseeko");
if (fwrite(header, 32, 1, pf) != 1)
err(1, "fwrite(%s)", argv[3]);
if (fclose(pf))
err(1, "fclose");
 
/* Free the memory we used */
free(db);
free(eb);
free(I);
free(old);
free(_new);
 
return 0;
}
/nw_plus/utils/source/bsdiff-4.3/bspatch.1
0,0 → 1,59
.\"-
.\" Copyright 2003-2005 Colin Percival
.\" All rights reserved
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted providing that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.1,v 1.1 2005/08/06 01:59:06 cperciva Exp $
.\"
.Dd May 18, 2003
.Dt BSPATCH 1
.Os FreeBSD
.Sh NAME
.Nm bspatch
.Nd apply a patch built with bsdiff(1)
.Sh SYNOPSIS
.Nm
.Ao Ar oldfile Ac Ao Ar newfile Ac Ao Ar patchfile Ac
.Sh DESCRIPTION
.Nm
generates
.Ao Ar newfile Ac
from
.Ao Ar oldfile Ac
and
.Ao Ar patchfile Ac
where
.Ao Ar patchfile Ac
is a binary patch built by bsdiff(1).
.Pp
.Nm
uses memory equal to the size of
.Ao Ar oldfile Ac
plus the size of
.Ao Ar newfile Ac ,
but can tolerate a very small working set without a dramatic loss
of performance.
.Sh SEE ALSO
.Xr bsdiff 1
.Sh AUTHORS
.An Colin Percival Aq cperciva@freebsd.org
/nw_plus/utils/source/bsdiff-4.3/bspatch.c
0,0 → 1,204
/*-
* Copyright 2003-2005 Colin Percival
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted providing that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
 
#if 0
__FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59:06 cperciva Exp $");
#endif
 
#include <bzlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <err.h>
#include <unistd.h>
#include <fcntl.h>
 
static off_t offtin(u_char *buf)
{
off_t y;
 
y=buf[7]&0x7F;
y=y*256;y+=buf[6];
y=y*256;y+=buf[5];
y=y*256;y+=buf[4];
y=y*256;y+=buf[3];
y=y*256;y+=buf[2];
y=y*256;y+=buf[1];
y=y*256;y+=buf[0];
 
if(buf[7]&0x80) y=-y;
 
return y;
}
 
int main(int argc,char * argv[])
{
FILE * f, * cpf, * dpf, * epf;
BZFILE * cpfbz2, * dpfbz2, * epfbz2;
int cbz2err, dbz2err, ebz2err;
int fd;
ssize_t oldsize,newsize;
ssize_t bzctrllen,bzdatalen;
u_char header[32],buf[8];
u_char *old, *new;
off_t oldpos,newpos;
off_t ctrl[3];
off_t lenread;
off_t i;
 
if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
 
/* Open patch file */
if ((f = fopen(argv[3], "r")) == NULL)
err(1, "fopen(%s)", argv[3]);
 
/*
File format:
0 8 "BSDIFF40"
8 8 X
16 8 Y
24 8 sizeof(newfile)
32 X bzip2(control block)
32+X Y bzip2(diff block)
32+X+Y ??? bzip2(extra block)
with control block a set of triples (x,y,z) meaning "add x bytes
from oldfile to x bytes from the diff block; copy y bytes from the
extra block; seek forwards in oldfile by z bytes".
*/
 
/* Read header */
if (fread(header, 1, 32, f) < 32) {
if (feof(f))
errx(1, "Corrupt patch\n");
err(1, "fread(%s)", argv[3]);
}
 
/* Check for appropriate magic */
if (memcmp(header, "BSDIFF40", 8) != 0)
errx(1, "Corrupt patch\n");
 
/* Read lengths from header */
bzctrllen=offtin(header+8);
bzdatalen=offtin(header+16);
newsize=offtin(header+24);
if((bzctrllen<0) || (bzdatalen<0) || (newsize<0))
errx(1,"Corrupt patch\n");
 
/* Close patch file and re-open it via libbzip2 at the right places */
if (fclose(f))
err(1, "fclose(%s)", argv[3]);
if ((cpf = fopen(argv[3], "r")) == NULL)
err(1, "fopen(%s)", argv[3]);
if (fseeko(cpf, 32, SEEK_SET))
err(1, "fseeko(%s, %lld)", argv[3],
(long long)32);
if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL)
errx(1, "BZ2_bzReadOpen, bz2err = %d", cbz2err);
if ((dpf = fopen(argv[3], "r")) == NULL)
err(1, "fopen(%s)", argv[3]);
if (fseeko(dpf, 32 + bzctrllen, SEEK_SET))
err(1, "fseeko(%s, %lld)", argv[3],
(long long)(32 + bzctrllen));
if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL)
errx(1, "BZ2_bzReadOpen, bz2err = %d", dbz2err);
if ((epf = fopen(argv[3], "r")) == NULL)
err(1, "fopen(%s)", argv[3]);
if (fseeko(epf, 32 + bzctrllen + bzdatalen, SEEK_SET))
err(1, "fseeko(%s, %lld)", argv[3],
(long long)(32 + bzctrllen + bzdatalen));
if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL)
errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err);
 
if(((fd=open(argv[1],O_RDONLY,0))<0) ||
((oldsize=lseek(fd,0,SEEK_END))==-1) ||
((old=malloc(oldsize+1))==NULL) ||
(lseek(fd,0,SEEK_SET)!=0) ||
(read(fd,old,oldsize)!=oldsize) ||
(close(fd)==-1)) err(1,"%s",argv[1]);
if((new=malloc(newsize+1))==NULL) err(1,NULL);
 
oldpos=0;newpos=0;
while(newpos<newsize) {
/* Read control data */
for(i=0;i<=2;i++) {
lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8);
if ((lenread < 8) || ((cbz2err != BZ_OK) &&
(cbz2err != BZ_STREAM_END)))
errx(1, "Corrupt patch\n");
ctrl[i]=offtin(buf);
};
 
/* Sanity-check */
if(newpos+ctrl[0]>newsize)
errx(1,"Corrupt patch\n");
 
/* Read diff string */
lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]);
if ((lenread < ctrl[0]) ||
((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END)))
errx(1, "Corrupt patch\n");
 
/* Add old data to diff string */
for(i=0;i<ctrl[0];i++)
if((oldpos+i>=0) && (oldpos+i<oldsize))
new[newpos+i]+=old[oldpos+i];
 
/* Adjust pointers */
newpos+=ctrl[0];
oldpos+=ctrl[0];
 
/* Sanity-check */
if(newpos+ctrl[1]>newsize)
errx(1,"Corrupt patch\n");
 
/* Read extra string */
lenread = BZ2_bzRead(&ebz2err, epfbz2, new + newpos, ctrl[1]);
if ((lenread < ctrl[1]) ||
((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END)))
errx(1, "Corrupt patch\n");
 
/* Adjust pointers */
newpos+=ctrl[1];
oldpos+=ctrl[2];
};
 
/* Clean up the bzip2 reads */
BZ2_bzReadClose(&cbz2err, cpfbz2);
BZ2_bzReadClose(&dbz2err, dpfbz2);
BZ2_bzReadClose(&ebz2err, epfbz2);
if (fclose(cpf) || fclose(dpf) || fclose(epf))
err(1, "fclose(%s)", argv[3]);
 
/* Write the new file */
if(((fd=open(argv[2],O_CREAT|O_TRUNC|O_WRONLY,0666))<0) ||
(write(fd,new,newsize)!=newsize) || (close(fd)==-1))
err(1,"%s",argv[2]);
 
free(new);
free(old);
 
return 0;
}
/nw_plus/utils/source/bsdiff-4.3/bsdiff.1
0,0 → 1,63
.\"-
.\" Copyright 2003-2005 Colin Percival
.\" All rights reserved
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted providing that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $FreeBSD: src/usr.bin/bsdiff/bsdiff/bsdiff.1,v 1.1 2005/08/06 01:59:05 cperciva Exp $
.\"
.Dd May 18, 2003
.Dt BSDIFF 1
.Os FreeBSD
.Sh NAME
.Nm bsdiff
.Nd generate a patch between two binary files
.Sh SYNOPSIS
.Nm
.Ao Ar oldfile Ac Ao Ar newfile Ac Ao Ar patchfile Ac
.Sh DESCRIPTION
.Nm
compares
.Ao Ar oldfile Ac
to
.Ao Ar newfile Ac
and writes to
.Ao Ar patchfile Ac
a binary patch suitable for use by bspatch(1).
When
.Ao Ar oldfile Ac
and
.Ao Ar newfile Ac
are two versions of an executable program, the
patches produced are on average a factor of five smaller
than those produced by any other binary patch tool known
to the author.
.Pp
.Nm
uses memory equal to 17 times the size of
.Ao Ar oldfile Ac ,
and requires
an absolute minimum working set size of 8 times the size of oldfile.
.Sh SEE ALSO
.Xr bspatch 1
.Sh AUTHORS
.An Colin Percival Aq cperciva@freebsd.org
/nw_plus/utils/source/bsdiff-4.3/Makefile
0,0 → 1,15
CFLAGS += -O3 -lbz2
 
PREFIX ?= /usr/local
INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555
INSTALL_MAN ?= ${INSTALL} -c -m 444
 
all: bsdiff bspatch
bsdiff: bsdiff.c
bspatch: bspatch.c
 
install:
${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
.ifndef WITHOUT_MAN
${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
.endif
/nw_plus/utils/source/bsdiff-4.3/bsdiff.c
0,0 → 1,404
/*-
* Copyright 2003-2005 Colin Percival
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted providing that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
 
#if 0
__FBSDID("$FreeBSD: src/usr.bin/bsdiff/bsdiff/bsdiff.c,v 1.1 2005/08/06 01:59:05 cperciva Exp $");
#endif
 
#include <sys/types.h>
 
#include <bzlib.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
#define MIN(x,y) (((x)<(y)) ? (x) : (y))
 
static void split(off_t *I,off_t *V,off_t start,off_t len,off_t h)
{
off_t i,j,k,x,tmp,jj,kk;
 
if(len<16) {
for(k=start;k<start+len;k+=j) {
j=1;x=V[I[k]+h];
for(i=1;k+i<start+len;i++) {
if(V[I[k+i]+h]<x) {
x=V[I[k+i]+h];
j=0;
};
if(V[I[k+i]+h]==x) {
tmp=I[k+j];I[k+j]=I[k+i];I[k+i]=tmp;
j++;
};
};
for(i=0;i<j;i++) V[I[k+i]]=k+j-1;
if(j==1) I[k]=-1;
};
return;
};
 
x=V[I[start+len/2]+h];
jj=0;kk=0;
for(i=start;i<start+len;i++) {
if(V[I[i]+h]<x) jj++;
if(V[I[i]+h]==x) kk++;
};
jj+=start;kk+=jj;
 
i=start;j=0;k=0;
while(i<jj) {
if(V[I[i]+h]<x) {
i++;
} else if(V[I[i]+h]==x) {
tmp=I[i];I[i]=I[jj+j];I[jj+j]=tmp;
j++;
} else {
tmp=I[i];I[i]=I[kk+k];I[kk+k]=tmp;
k++;
};
};
 
while(jj+j<kk) {
if(V[I[jj+j]+h]==x) {
j++;
} else {
tmp=I[jj+j];I[jj+j]=I[kk+k];I[kk+k]=tmp;
k++;
};
};
 
if(jj>start) split(I,V,start,jj-start,h);
 
for(i=0;i<kk-jj;i++) V[I[jj+i]]=kk-1;
if(jj==kk-1) I[jj]=-1;
 
if(start+len>kk) split(I,V,kk,start+len-kk,h);
}
 
static void qsufsort(off_t *I,off_t *V,u_char *old,off_t oldsize)
{
off_t buckets[256];
off_t i,h,len;
 
for(i=0;i<256;i++) buckets[i]=0;
for(i=0;i<oldsize;i++) buckets[old[i]]++;
for(i=1;i<256;i++) buckets[i]+=buckets[i-1];
for(i=255;i>0;i--) buckets[i]=buckets[i-1];
buckets[0]=0;
 
for(i=0;i<oldsize;i++) I[++buckets[old[i]]]=i;
I[0]=oldsize;
for(i=0;i<oldsize;i++) V[i]=buckets[old[i]];
V[oldsize]=0;
for(i=1;i<256;i++) if(buckets[i]==buckets[i-1]+1) I[buckets[i]]=-1;
I[0]=-1;
 
for(h=1;I[0]!=-(oldsize+1);h+=h) {
len=0;
for(i=0;i<oldsize+1;) {
if(I[i]<0) {
len-=I[i];
i-=I[i];
} else {
if(len) I[i-len]=-len;
len=V[I[i]]+1-i;
split(I,V,i,len,h);
i+=len;
len=0;
};
};
if(len) I[i-len]=-len;
};
 
for(i=0;i<oldsize+1;i++) I[V[i]]=i;
}
 
static off_t matchlen(u_char *old,off_t oldsize,u_char *new,off_t newsize)
{
off_t i;
 
for(i=0;(i<oldsize)&&(i<newsize);i++)
if(old[i]!=new[i]) break;
 
return i;
}
 
static off_t search(off_t *I,u_char *old,off_t oldsize,
u_char *new,off_t newsize,off_t st,off_t en,off_t *pos)
{
off_t x,y;
 
if(en-st<2) {
x=matchlen(old+I[st],oldsize-I[st],new,newsize);
y=matchlen(old+I[en],oldsize-I[en],new,newsize);
 
if(x>y) {
*pos=I[st];
return x;
} else {
*pos=I[en];
return y;
}
};
 
x=st+(en-st)/2;
if(memcmp(old+I[x],new,MIN(oldsize-I[x],newsize))<0) {
return search(I,old,oldsize,new,newsize,x,en,pos);
} else {
return search(I,old,oldsize,new,newsize,st,x,pos);
};
}
 
static void offtout(off_t x,u_char *buf)
{
off_t y;
 
if(x<0) y=-x; else y=x;
 
buf[0]=y%256;y-=buf[0];
y=y/256;buf[1]=y%256;y-=buf[1];
y=y/256;buf[2]=y%256;y-=buf[2];
y=y/256;buf[3]=y%256;y-=buf[3];
y=y/256;buf[4]=y%256;y-=buf[4];
y=y/256;buf[5]=y%256;y-=buf[5];
y=y/256;buf[6]=y%256;y-=buf[6];
y=y/256;buf[7]=y%256;
 
if(x<0) buf[7]|=0x80;
}
 
int main(int argc,char *argv[])
{
int fd;
u_char *old,*new;
off_t oldsize,newsize;
off_t *I,*V;
off_t scan,pos,len;
off_t lastscan,lastpos,lastoffset;
off_t oldscore,scsc;
off_t s,Sf,lenf,Sb,lenb;
off_t overlap,Ss,lens;
off_t i;
off_t dblen,eblen;
u_char *db,*eb;
u_char buf[8];
u_char header[32];
FILE * pf;
BZFILE * pfbz2;
int bz2err;
 
if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
 
/* Allocate oldsize+1 bytes instead of oldsize bytes to ensure
that we never try to malloc(0) and get a NULL pointer */
if(((fd=open(argv[1],O_RDONLY,0))<0) ||
((oldsize=lseek(fd,0,SEEK_END))==-1) ||
((old=malloc(oldsize+1))==NULL) ||
(lseek(fd,0,SEEK_SET)!=0) ||
(read(fd,old,oldsize)!=oldsize) ||
(close(fd)==-1)) err(1,"%s",argv[1]);
 
if(((I=malloc((oldsize+1)*sizeof(off_t)))==NULL) ||
((V=malloc((oldsize+1)*sizeof(off_t)))==NULL)) err(1,NULL);
 
qsufsort(I,V,old,oldsize);
 
free(V);
 
/* Allocate newsize+1 bytes instead of newsize bytes to ensure
that we never try to malloc(0) and get a NULL pointer */
if(((fd=open(argv[2],O_RDONLY,0))<0) ||
((newsize=lseek(fd,0,SEEK_END))==-1) ||
((new=malloc(newsize+1))==NULL) ||
(lseek(fd,0,SEEK_SET)!=0) ||
(read(fd,new,newsize)!=newsize) ||
(close(fd)==-1)) err(1,"%s",argv[2]);
 
if(((db=malloc(newsize+1))==NULL) ||
((eb=malloc(newsize+1))==NULL)) err(1,NULL);
dblen=0;
eblen=0;
 
/* Create the patch file */
if ((pf = fopen(argv[3], "w")) == NULL)
err(1, "%s", argv[3]);
 
/* Header is
0 8 "BSDIFF40"
8 8 length of bzip2ed ctrl block
16 8 length of bzip2ed diff block
24 8 length of new file */
/* File is
0 32 Header
32 ?? Bzip2ed ctrl block
?? ?? Bzip2ed diff block
?? ?? Bzip2ed extra block */
memcpy(header,"BSDIFF40",8);
offtout(0, header + 8);
offtout(0, header + 16);
offtout(newsize, header + 24);
if (fwrite(header, 32, 1, pf) != 1)
err(1, "fwrite(%s)", argv[3]);
 
/* Compute the differences, writing ctrl as we go */
if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL)
errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err);
scan=0;len=0;
lastscan=0;lastpos=0;lastoffset=0;
while(scan<newsize) {
oldscore=0;
 
for(scsc=scan+=len;scan<newsize;scan++) {
len=search(I,old,oldsize,new+scan,newsize-scan,
0,oldsize,&pos);
 
for(;scsc<scan+len;scsc++)
if((scsc+lastoffset<oldsize) &&
(old[scsc+lastoffset] == new[scsc]))
oldscore++;
 
if(((len==oldscore) && (len!=0)) ||
(len>oldscore+8)) break;
 
if((scan+lastoffset<oldsize) &&
(old[scan+lastoffset] == new[scan]))
oldscore--;
};
 
if((len!=oldscore) || (scan==newsize)) {
s=0;Sf=0;lenf=0;
for(i=0;(lastscan+i<scan)&&(lastpos+i<oldsize);) {
if(old[lastpos+i]==new[lastscan+i]) s++;
i++;
if(s*2-i>Sf*2-lenf) { Sf=s; lenf=i; };
};
 
lenb=0;
if(scan<newsize) {
s=0;Sb=0;
for(i=1;(scan>=lastscan+i)&&(pos>=i);i++) {
if(old[pos-i]==new[scan-i]) s++;
if(s*2-i>Sb*2-lenb) { Sb=s; lenb=i; };
};
};
 
if(lastscan+lenf>scan-lenb) {
overlap=(lastscan+lenf)-(scan-lenb);
s=0;Ss=0;lens=0;
for(i=0;i<overlap;i++) {
if(new[lastscan+lenf-overlap+i]==
old[lastpos+lenf-overlap+i]) s++;
if(new[scan-lenb+i]==
old[pos-lenb+i]) s--;
if(s>Ss) { Ss=s; lens=i+1; };
};
 
lenf+=lens-overlap;
lenb-=lens;
};
 
for(i=0;i<lenf;i++)
db[dblen+i]=new[lastscan+i]-old[lastpos+i];
for(i=0;i<(scan-lenb)-(lastscan+lenf);i++)
eb[eblen+i]=new[lastscan+lenf+i];
 
dblen+=lenf;
eblen+=(scan-lenb)-(lastscan+lenf);
 
offtout(lenf,buf);
BZ2_bzWrite(&bz2err, pfbz2, buf, 8);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
 
offtout((scan-lenb)-(lastscan+lenf),buf);
BZ2_bzWrite(&bz2err, pfbz2, buf, 8);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
 
offtout((pos-lenb)-(lastpos+lenf),buf);
BZ2_bzWrite(&bz2err, pfbz2, buf, 8);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
 
lastscan=scan-lenb;
lastpos=pos-lenb;
lastoffset=pos-scan;
};
};
BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err);
 
/* Compute size of compressed ctrl data */
if ((len = ftello(pf)) == -1)
err(1, "ftello");
offtout(len-32, header + 8);
 
/* Write compressed diff data */
if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL)
errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err);
BZ2_bzWrite(&bz2err, pfbz2, db, dblen);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err);
 
/* Compute size of compressed diff data */
if ((newsize = ftello(pf)) == -1)
err(1, "ftello");
offtout(newsize - len, header + 16);
 
/* Write compressed extra data */
if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL)
errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err);
BZ2_bzWrite(&bz2err, pfbz2, eb, eblen);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWrite, bz2err = %d", bz2err);
BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL);
if (bz2err != BZ_OK)
errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err);
 
/* Seek to the beginning, write the header, and close the file */
if (fseeko(pf, 0, SEEK_SET))
err(1, "fseeko");
if (fwrite(header, 32, 1, pf) != 1)
err(1, "fwrite(%s)", argv[3]);
if (fclose(pf))
err(1, "fclose");
 
/* Free the memory we used */
free(db);
free(eb);
free(I);
free(old);
free(new);
 
return 0;
}
/nw_plus/utils/source/uips
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/source
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/linux/i586
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/linux/x86_64
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/linux
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils/mac
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/utils
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/NWinter+_To_Do.txt
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Modified: svn:mime-type
-application/octet-stream
\ No newline at end of property
+text/plain
\ No newline at end of property
/nw_plus/NWinter+_Readme.txt
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Modified: svn:mime-type
-application/octet-stream
\ No newline at end of property
+text/plain
\ No newline at end of property
/nw_plus/nw_dp_xxx.def
7,3 → 7,4
 
include nw_dp.def
include nwinter/xxx.def
include nw_hrp/xxx.def
/nw_plus/nw_dp.def
6,5 → 6,7
*/
 
include dukeplus.def
include nw_plus.def
include nwinter_hrp.def
include nwinter/dp.def
include nw_hrp/dp.def
/nw_plus/nwinter_hrp.def
5,12 → 5,8
--------------------------------------------------------------------------------
*/
 
include nwinter/undef.def
include nwinter/copies.def
include nwinter/8bit.def
include nwinter/sprites.def
include nwinter/screen.def
include nwinter/textures.def
include nwinter/skyboxes.def
include nwinter/music.def
include nwinter/sounds.def
include nw_hrp/copies.def
include nw_hrp/sprites.def
include nw_hrp/screen.def
include nw_hrp/textures.def
include nw_hrp/skyboxes.def
/nw_plus/nw_xxx.def
7,3 → 7,4
 
include nwinter.def
include nwinter/xxx.def
include nw_hrp/xxx.def
/nw_plus/NWActor.con
24,7 → 24,7
}
else
{
sizeto MAXXSTRETCH MAXYSTRETCH
sizeto MAXXSTRETCH MAXYSTRETCH
break
}
ends
63,10 → 63,14
{
ifpdistl 1024
{
getplayer[THISACTOR].i temp
setactor[temp].htextra SNOWBALLAMOUNT
setactor[temp].htpicnum SNOWBALL
getplayer[THISACTOR].i nw_temp
setactor[nw_temp].htextra SNOWBALLAMOUNT
setactor[nw_temp].htpicnum SNOWBALL
// getactor[THISACTOR].owner nw_temp2
setactor[nw_temp].htowner nw_owner
// addphealth SNOWBALLAMOUNT
debris SCRAP3 5
globalsound DUKE_GRUNT
state headhitstate
188,85 → 192,82
 
 
useractor enemy SNOWMAN SNOWMANSTRENGTH ASNOWMANIDLE
fall
fall
 
ifaction ASNOWMANDEAD
{
ifrespawn
ifaction ASNOWMANDEAD
{
strength 0
ifhitweapon
{
ifcount RESPAWNACTORTIME
ifwasweapon RADIUSEXPLOSION
{
spawn TRANSPORTERSTAR
cstat 257
strength SNOWMANSTRENGTH
ai AISNOWFOLLOW
// debris SCRAP3 40
// debris SCRAP3 40
debris SCRAP3 20
killit
}
}
else
ifrespawn
{
strength 0
ifhitweapon
ifcount RESPAWNACTORTIME
{
ifwasweapon RADIUSEXPLOSION
{
// debris SCRAP3 40
// debris SCRAP3 40
debris SCRAP3 20
killit
}
spawn TRANSPORTERSTAR
cstat 257
strength SNOWMANSTRENGTH
ai AISNOWFOLLOW
}
}
break
break
}
else
ifaction ASNOWMANFROZEN
else ifaction ASNOWMANFROZEN
{
ifcount THAWTIME
ifcount THAWTIME
{
ai AISNOWFOLLOW
getlastpal
ai AISNOWFOLLOW
getlastpal
}
else
ifcount FROZENDRIPTIME
ifrnd 8
spawn WATERDRIP
ifcount FROZENDRIPTIME
ifrnd 8
spawn WATERDRIP
 
ifhitweapon
ifhitweapon
{
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
strength 0
break
strength 0
break
}
addkills 1
lotsofglass 30
ifrnd 84 debris SCRAP3 10
sound GLASS_BREAKING
killit
addkills 1
lotsofglass 30
ifrnd 84 debris SCRAP3 10
sound GLASS_BREAKING
killit
}
 
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
 
ifai AISNOWMANSHRINK
ifai AISNOWMANSHRINK
{
state snowmanshrinkstate
break
state snowmanshrinkstate
break
}
 
ifhitweapon state snowmanhitstate
 
ifhitweapon state snowmanhitstate
ifp pdead break
 
ifp pdead break
 
ifai 0
ifai 0
{
ai AISNOWFOLLOW
sizeat 42 36
clipdist 32
cstat 257
ai AISNOWFOLLOW
sizeat 42 36
clipdist 32
cstat 257
}
 
ifai AISNOWMANDYING state snowmandyingstate
352,187 → 353,184
ai AIWALKWAIT ABOTWALK botstopped faceplayer
 
state miniboss
 
sound SANTA_TRASH1
 
spawn EXPLOSION2
spawn EXPLOSION2
spawn PIGCOP
spawn PIGCOP
 
sound SANTA_TRASH1
spawn EXPLOSION2
spawn EXPLOSION2
spawn PIGCOP
spawn PIGCOP
ends
 
 
 
state stomphisfreakingass
 
ifp pdead nullop
ifp pdead
nullop
else
{
ifpdistl SQUISHABLEDISTANCE
ifpdistl SQUISHABLEDISTANCE
{
addphealth -1000
sound SQUISH2
// state standard_pjibs
state standard_pjibs
sound SANTA_TRASH9
addphealth -1000
sound SQUISH2
// state standard_pjibs
state standard_pjibs
sound SANTA_TRASH9
}
}
 
ends
 
 
state botchangeweaponstate
 
ifspritepal 0 nullop else break
 
resetcount
 
ifspritepal 0
ifspritepal 0 nullop else break
resetcount
ifspritepal 0
{
ifpdistl 4096
ifpdistl 4096
{
ifrnd 128
spritepal 3
ifrnd 128
spritepal 3
else
spritepal 9
spritepal 9
}
else
{
ifrnd 128
spritepal 3
}
ifrnd 128
spritepal 3
}
else
ifspritepal 3
else ifspritepal 3
{
ifpdistg 4096
ifpdistg 4096
{
ifrnd 128
spritepal 0
ifrnd 128
spritepal 0
else
spritepal 9
spritepal 9
}
else
{
ifrnd 128
spritepal 9
ifrnd 128
spritepal 9
}
}
else
ifspritepal 9
else ifspritepal 9
{
ifpdistg 4096
ifpdistg 4096
{
ifrnd 128
spritepal 0
ifrnd 128
spritepal 0
else
spritepal 3
spritepal 3
}
else
{
ifrnd 128
spritepal 9
}
ifrnd 128
spritepal 9
}
sound SELECT_WEAPON
ends
 
sound SELECT_WEAPON
 
state botshootrpg // so Santa shoots the player's RPG and not the Commander's
eshoot RPG
setactor[RETURN].extra RPG_WEAPON_STRENGTH
setactor[RETURN].xrepeat 14
setactor[RETURN].yrepeat 14
sound RPG_SHOOT
ends
 
state botquickshootstate
ifspritepal 0 nullop else break
ifp pshrunk break
ifp pdead break
 
ifspritepal 0 nullop else break
 
ifp pshrunk break
ifp pdead break
 
ifspritepal 0
ifspritepal 0
state botshootrpg
else ifspritepal 3
{
shoot RPG sound RPG_SHOOT
shoot CHAINGUN
sound CHAINGUN_FIRE
}
else
ifspritepal 3
else ifspritepal 9
{
shoot CHAINGUN sound CHAINGUN_FIRE
// shoot SHRINKER
// sound SHRINKER_FIRE
shoot SHOTGUN
sound SHOTGUN_FIRE
}
else
ifspritepal 9
{
// shoot SHRINKER sound SHRINKER_FIRE
shoot SHOTGUN sound SHOTGUN_FIRE
}
 
ends
 
 
state botshootstate
 
ifspritepal 0 nullop else break // ifcanshoottarget nullop // ifcanseetarget nullop
 
ifp pdead break
ifp pshrunk break
 
ifspritepal 0
ifspritepal 0 nullop else break // ifcanshoottarget nullop // ifcanseetarget nullop
ifp pdead break
ifp pshrunk break
ifspritepal 0
{
ifcount 5
ifcount 5
{
ifactioncount 5
ifactioncount 5
{
resetactioncount
shoot RPG
sound RPG_SHOOT
resetactioncount
state botshootrpg
}
 
ifpdistl 4096
{
ifrnd 5
state botchangeweaponstate
}
}
}
else
ifspritepal 3
else ifspritepal 3
{
ifcount 5
ifcount 5
{
ifactioncount 1
ifactioncount 1
{
resetactioncount
shoot SHOTSPARK1 shoot CHAINGUN shoot CHAINGUN shoot CHAINGUN
sound CHAINGUN_FIRE
resetactioncount
shoot SHOTSPARK1
shoot CHAINGUN
shoot CHAINGUN
shoot CHAINGUN
sound CHAINGUN_FIRE
}
ifrnd 1 state botchangeweaponstate
ifrnd 1
state botchangeweaponstate
}
}
else
ifspritepal 9
else ifspritepal 9
{
ifcount 5
ifcount 5
{
ifactioncount 5
ifactioncount 5
{
resetactioncount
// shoot SHRINKER
// sound SHRINKER_FIRE
shoot SHOTGUN
sound SHOTGUN_FIRE
resetactioncount
// shoot SHRINKER
// sound SHRINKER_FIRE
shoot SHOTGUN
sound SHOTGUN_FIRE
}
ifp ponsteroids
{
ifrnd 64
ifp ponsteroids
ifrnd 64
state botchangeweaponstate
ifrnd 1
state botchangeweaponstate
}
ifrnd 1 state botchangeweaponstate
}
}
 
 
 
ends
 
state dudehurt
 
/*
ifstrength YELLHURTSOUNDSTRENGTHMP
{
559,13 → 557,13
sound SANTA_TRASH8
}
*/
 
ifrnd 80
sound SANTA_GOTHIT
ends
 
state dukehurt
 
ifrnd 80
sound SANTA_GOTHIT
/*
601,16 → 599,22
// WALK STATES
 
state botwalkhitstate
 
state botshootstate
 
// spawn BLOOD
 
ifdead
state botshootstate
// spawn BLOOD
ifdead
{
ifspritepal 21 { state miniboss break } else soundonce SANTA_DEAD
ifspritepal 21
{
state miniboss
break
}
else
soundonce SANTA_DEAD
 
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
spritepal 1
strength 0
619,8 → 623,7
sound SOMETHINGFROZE
break
}
else
ifwasweapon GROWSPARK
else ifwasweapon GROWSPARK
{
cstat 0
sound ACTOR_GROWING
627,12 → 630,11
ai AIBOTWALKGROW
break
}
else
ifwasweapon RADIUSEXPLOSION
else ifwasweapon RADIUSEXPLOSION
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
addkills 1
639,12 → 641,11
endofgame 52
killit
}
else
ifwasweapon RPG
else ifwasweapon RPG
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
addkills 1
656,18 → 657,20
ai AIBOTWALKDYING
break
}
}
}
else
{
state dudehurt
 
ifwasweapon SHRINKSPARK
state dudehurt
ifwasweapon SHRINKSPARK
{
ifai AIBOTWALKSTEROIDS nullop else
{
ai AIBOTWALKSHRINK
break
}
ifai AIBOTWALKSTEROIDS
nullop
else
{
ai AIBOTWALKSHRINK
break
}
}
}
 
686,167 → 689,162
ends
 
state botwalkseekstate
 
ifcansee
ifcansee
{
ai AIBOTWALKHUNT
break
}
 
ifgapzl 100
{
}
ifgapzl 100
nullop
else
{
ifnotmoving
ifnotmoving
{
ifrnd 4 operate
ifpdistl 8000
ifrnd 4
operate
ifpdistl 8000
{
ai AIFLYUPMOMENT
cactor SOBBOTFLY
break
ai AIFLYUPMOMENT
cactor SOBBOTFLY
break
}
else
ai AIBOTWALKJUMP1
break
ai AIBOTWALKJUMP1
break
}
}
 
ends
 
state botwalkjumpstate
 
ifrnd 4
ifpdistl 6000
state botquickshootstate
 
ifai AIBOTWALKJUMP1
{
ifactioncount 2
ifrnd 4
ifpdistl 6000
state botquickshootstate
ifai AIBOTWALKJUMP1
ifactioncount 2
{
ai AIBOTWALKJUMP2
break
ai AIBOTWALKJUMP2
break
}
}
 
ifai AIBOTWALKJUMP2
{
ifactioncount 1
ifai AIBOTWALKJUMP2
ifactioncount 1
{
state botshootstate
iffloordistl 16
state botshootstate
iffloordistl 16
{
sound DUKE_LAND
operate
ai AIBOTWALKHUNT
sound DUKE_LAND
operate
ai AIBOTWALKHUNT
}
}
}
 
ends
 
state botwalkhuntstate
 
state botshootstate
 
ifrnd 3
state botshootstate
ifrnd 3
{
ai AIBOTWALKSTRJUMP1S
count 10
ai AIBOTWALKSTRJUMP1S
count 10
}
 
ifcansee
ifcansee
{
ifpdistl 1024
{
ifrnd 24
ifpdistl 1024
ifrnd 24
{
ifp pdead
nullop
ifp pdead
nullop
else
ai AIBOTWALKKICK
break
ai AIBOTWALKKICK
break
}
}
}
else
{
ifphealthl 50
ifrnd 64
ifpdistl 8000
{
ifphealthl 50
ifrnd 64
ifpdistl 8000
ifrnd 80
sound SANTA_TRASH1
}
 
ifrnd 128
ifrnd 128
{
ifp phigher
ifp phigher
{
ai AIFLYUPMOMENT
cactor SOBBOTFLY
break
ai AIFLYUPMOMENT
cactor SOBBOTFLY
break
}
else
{
ai AIBOTWALKSTRAIGHT
break
ai AIBOTWALKSTRAIGHT
break
}
}
else
{
ai AIBOTWALKSTRAIGHT
break
ai AIBOTWALKSTRAIGHT
break
}
ai AIBOTWALKSEEK
break
}
 
ifrnd 128
ifnotmoving
ifrnd 128
ifnotmoving
{
ifrnd 8
operate
ai AIBOTWALKJUMP1
break
ifrnd 8
operate
ai AIBOTWALKJUMP1
break
}
 
ends
 
state botwalkkickstate
 
ifactioncount 2
ifactioncount 2
{
resetactioncount
ifpdistl 1024
resetactioncount
ifpdistl 1024
{
ifp pdead
ifp pdead
{
ai AIBOTWALKHUNT
break
ai AIBOTWALKHUNT
break
}
ifp pfacing
ifrnd 16
{
ifp pfacing
ifrnd 16
globalsound SANTA_TRASH8
}
sound KICK_HIT
 
ifspritepal 21 addphealth -1 else addphealth -6
state dukehurt
sound KICK_HIT
ifspritepal 21
addphealth -1
else
addphealth -6
state dukehurt
}
else
{
ai AIBOTWALKHUNT
break
ai AIBOTWALKHUNT
break
}
 
ifrnd 50
{
ai AIBOTWALKHUNT
break
ai AIBOTWALKHUNT
break
}
}
 
853,723 → 851,652
ends
 
state botwalkstraightjumpstate
 
ifai AIBOTWALKSTRJUMP1
ifai AIBOTWALKSTRJUMP1
{
ifcount 20
ifcount 20
{
ai AIBOTWALKSTRJUMP2
break
}
}
else
ifai AIBOTWALKSTRJUMP2
else ifai AIBOTWALKSTRJUMP2
{
ifcount 18
ifcount 18
{
iffloordistl 16
iffloordistl 16
{
operate
ifrnd 128
sound DUKE_LAND
ifrnd 200
ai AIBOTWALKSTRAIGHT
operate
ifrnd 128
sound DUKE_LAND
ifrnd 200
ai AIBOTWALKSTRAIGHT
else
ai AIBOTWALKSEEK
ai AIBOTWALKSEEK
}
}
}
 
ends
 
state botjumpshootstate
 
ifai AIBOTWALKSTRJUMP1S
ifai AIBOTWALKSTRJUMP1S
{
state botshootstate
 
ifcount 20
state botshootstate
ifcount 20
{
ai AIBOTWALKSTRJUMP2S
resetactioncount
count 10
break
ai AIBOTWALKSTRJUMP2S
resetactioncount
count 10
break
}
 
}
else
ifai AIBOTWALKSTRJUMP2S
else ifai AIBOTWALKSTRJUMP2S
{
ifcount 18
ifcount 18
{
iffloordistl 16
iffloordistl 16
{
operate
sound DUKE_LAND
ai AIBOTWALKHUNT
count 10
operate
sound DUKE_LAND
ai AIBOTWALKHUNT
count 10
}
}
}
 
 
ends
 
 
state botwalkstraightstate
 
ifpdistg 20000
ai AIBOTWALKSEEK
 
ifcansee
ifpdistg 20000
ai AIBOTWALKSEEK
ifcansee
{
ifnotmoving
ifnotmoving
{
ai AIBOTWALKSTRJUMP1
break
ai AIBOTWALKSTRJUMP1
break
}
ifrnd 64
ai AIBOTWALKHUNT
ifrnd 64
ai AIBOTWALKHUNT
}
else
{
ifrnd 128
ifnotmoving
ai AIBOTWALKSTRJUMP1
}
 
ifrnd 128
ifnotmoving
ai AIBOTWALKSTRJUMP1
ends
 
state steroidswalk
 
soundonce DUKE_HARTBEAT
spawn FRAMEEFFECT1
 
ifhitweapon
soundonce DUKE_HARTBEAT
spawn FRAMEEFFECT1
ifhitweapon
{
state botwalkhitstate
break
state botwalkhitstate
break
}
ifcount 150
ai AIBOTWALKHUNT
 
ifcount 150
{
ai AIBOTWALKHUNT
}
 
ifcount 34
{
}
ifcount 34
nullop
else
{
sizeto 42 36
}
 
sizeto 42 36
ends
 
state botletfallstate
 
ifactioncount 5
{
}
else
ifactioncount 6
{
ifactioncount 5
nullop
else ifactioncount 6
soundonce SANTA_TRASH7
}
 
ifcansee
ifcansee
{
ai AIFLYWAIT
cactor SOBBOTFLY
break
ai AIFLYWAIT
cactor SOBBOTFLY
break
}
else
{
iffloordistl 50
iffloordistl 50
{
ai AIFLYWAIT
cactor SOBBOTFLY
break
ai AIFLYWAIT
cactor SOBBOTFLY
break
}
}
 
ends
 
useractor enemy SOBBOTWALK SOBBOTSTRENGTH ABOTWALK
state checksquished
state checksquished
 
ifai 0
{
 
ifspawnedby RECON
{
spawn PIGCOP
killit
}
 
ifcansee nullop else break
sizeat 42 36
cstat 257
ifcansee nullop else break
sizeat 42 36
cstat 257
 
ai AIBOTWALKSEEK
ai AIBOTWALKSEEK
 
ifspritepal 21
ifspritepal 21
{
strength MINIBOSSSTRENGTH
ifrnd 64 soundonce SANTA_TRASH9
ifrnd 64
soundonce SANTA_TRASH9
}
else spritepal 0
 
sound INSERT_CLIP
break
else
spritepal 0
sound INSERT_CLIP
break
}
 
 
fall
sleeptime 300
 
ifaction ABOTWDEAD break
else
ifaction ABOTWALKFROZEN
ifaction ABOTWDEAD
break
else ifaction ABOTWALKFROZEN
{
 
ifcount THAWTIME
ifcount THAWTIME
{
ai AIBOTWALKHUNT
getlastpal
ai AIBOTWALKHUNT
getlastpal
}
else
ifcount FROZENDRIPTIME
else ifcount FROZENDRIPTIME
ifactioncount 26
{
ifactioncount 26
{
spawn WATERDRIP
resetactioncount
}
}
ifhitweapon
ifhitweapon
{
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
strength 0
break
strength 0
break
}
addkills 1
 
ifrnd 84
spawn BLOODPOOL
lotsofglass 30
spawn ATOMICHEALTH
sound GLASS_BREAKING
ifspritepal 21
addkills 1
ifrnd 84
spawn BLOODPOOL
lotsofglass 30
spawn ATOMICHEALTH
sound GLASS_BREAKING
ifspritepal 21
{
state miniboss
break
}
endofgame 52
killit
else
{
endofgame 52
killit
}
}
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
else
ifai AIBOTWALKSTEROIDS
else ifai AIBOTWALKSTEROIDS
{
state steroidswalk
break
}
else
ifai AIBOTWALKGROW
else ifai AIBOTWALKGROW
{
ifcount 32
ifcount 32
{
guts JIBS4 24
guts JIBS6 28
addkills 1
sound SQUISH2
sound PIPEBOMB_EXPLODE
hitradius 2048 60 70 80 90
spawn BLOODPOOL
spawn EXPLOSION2
ifspritepal 21
guts JIBS4 24
guts JIBS6 28
addkills 1
sound SQUISH2
sound PIPEBOMB_EXPLODE
hitradius 2048 60 70 80 90
spawn BLOODPOOL
spawn EXPLOSION2
ifspritepal 21
{
state miniboss
break
}
endofgame 52
killit
else
{
endofgame 52
killit
}
}
else
{
sizeto MAXXSTRETCH MAXYSTRETCH
sizeto MAXXSTRETCH MAXYSTRETCH
break
}
break
}
break
}
else
ifai AIBOTWALKSHRINK
else ifai AIBOTWALKSHRINK
{
 
ifcount SHRUNKDONECOUNT
ai AIBOTWALKHUNT
ifcount SHRUNKDONECOUNT
ai AIBOTWALKHUNT
else
ifcount SHRUNKCOUNT
{
spawn FRAMEEFFECT1
sizeto 42 36
}
else
{
ifcount 31
nullop
else
ifcount SHRUNKCOUNT
{
ifcount 30
spawn FRAMEEFFECT1
sizeto 42 36
}
else ifcount 31
nullop
else ifcount 30
{
ifrnd 255
{
ifrnd 255
{
sound DUKE_TAKEPILLS
ai AIBOTWALKSTEROIDS
break
}
}
}
ifcount 32
ifcount 32
{
ifpdistl SQUISHABLEDISTANCE
ifpdistl SQUISHABLEDISTANCE
{
state standard_pjibs
sound SQUISH2
spawn BLOODPOOL
pkick
// state headhitstate
// state headhitstate
// state headhitstate
state headhitstate
ifspritepal 21
{
state miniboss
break
}
else
{
ifrnd 128
sound SANTA_DEAD
state standard_pjibs
sound SQUISH2
spawn BLOODPOOL
pstomp
ifspritepal 21
{
state miniboss
break
}
else
{
ifrnd 128
sound SANTA_DEAD
else
sound SANTA_TRASH9
}
endofgame 52
killit
sound SANTA_TRASH9
endofgame 52
killit
}
}
}
else
{
sizeto MINXSTRETCH MINYSTRETCH
spawn FRAMEEFFECT1
sizeto MINXSTRETCH MINYSTRETCH
spawn FRAMEEFFECT1
}
}
 
break
break
}
else
ifai AIBOTWALKDYING
else ifai AIBOTWALKDYING
{
state botwalkdyingstate
break
state botwalkdyingstate
break
}
else
ifrnd 1
operate
ifrnd 1
operate
 
ifhitweapon
ifhitweapon
{
state botwalkhitstate
break
state botwalkhitstate
break
}
else
ifai AIWALKFALLHARD
else ifai AIWALKFALLHARD
{
iffloordistl 16
{
ai AIBOTWALKHUNT
}
iffloordistl 16
ai AIBOTWALKHUNT
else
{
break
}
break
}
else
{
ifai AIWALKFALL
ifai AIWALKFALL
{
state botshootstate
iffloordistl 16
{
ai AIBOTWALKHUNT
}
state botshootstate
iffloordistl 16
ai AIBOTWALKHUNT
else
{
break
}
break
}
}
 
ifp pshrunk
state stomphisfreakingass
 
iffloordistl 550
nullop
ifp pshrunk
state stomphisfreakingass
iffloordistl 550
nullop
else
{
ai AIFLYWAIT
cactor SOBBOTFLY
ai AIFLYWAIT
cactor SOBBOTFLY
}
 
ifonwater
{
}
ifonwater
nullop
else
{
ifp pjetpack
ifp phigher
ifcansee
ifp pjetpack
ifp phigher
ifcansee
{
ai AIFLYWAIT
cactor SOBBOTFLY
ai AIFLYWAIT
cactor SOBBOTFLY
}
}
 
ifp phigher
ifp phigher
{
ifrnd 1
{
ifrnd 196
ifrnd 1
ifrnd 196
{
ai AIFLYWAIT
cactor SOBBOTFLY
ai AIFLYWAIT
cactor SOBBOTFLY
}
}
}
 
ifai AIWALKWAIT
ifai AIWALKWAIT
{
ai AIBOTWALKSEEK
break
ai AIBOTWALKSEEK
break
}
else
ifai AIBOTWALKSEEK
state botwalkseekstate
else
ifai AIBOTWALKHUNT
state botwalkhuntstate
else
ifai AIBOTWALKJUMP1
state botwalkjumpstate
else
ifai AIBOTWALKJUMP2
state botwalkjumpstate
else
ifai AIBOTWALKKICK
state botwalkkickstate
else
ifai AIBOTWALKSTRAIGHT
state botwalkstraightstate
else
ifai AIBOTWALKSTRJUMP1
state botwalkstraightjumpstate
else
ifai AIBOTWALKSTRJUMP2
state botwalkstraightjumpstate
else
ifai AIBOTLETFALL
state botletfallstate
else
ifai AIBOTWALKSTRJUMP1S
state botjumpshootstate
else
ifai AIBOTWALKSTRJUMP2S
state botjumpshootstate
 
 
else ifai AIBOTWALKSEEK state botwalkseekstate
else ifai AIBOTWALKHUNT state botwalkhuntstate
else ifai AIBOTWALKJUMP1 state botwalkjumpstate
else ifai AIBOTWALKJUMP2 state botwalkjumpstate
else ifai AIBOTWALKKICK state botwalkkickstate
else ifai AIBOTWALKSTRAIGHT state botwalkstraightstate
else ifai AIBOTWALKSTRJUMP1 state botwalkstraightjumpstate
else ifai AIBOTWALKSTRJUMP2 state botwalkstraightjumpstate
else ifai AIBOTLETFALL state botletfallstate
else ifai AIBOTWALKSTRJUMP1S state botjumpshootstate
else ifai AIBOTWALKSTRJUMP2S state botjumpshootstate
enda
 
state botflydyingstate
fall
strength 0
cstat 0
ifactioncount 5
{
action ABOTFLYDEAD
 
fall
 
strength 0
cstat 0
 
ifactioncount 5
{
action ABOTFLYDEAD
ifspritepal 21
{
state miniboss
break
}
endofgame 52
{
state miniboss
break
}
else
endofgame 52
}
 
ends
 
state choosedodgefly
 
ifceilingdistl 100
ifceilingdistl 100
{
ifai AIBOTFLYDODGEDOWN
nullop
ifai AIBOTFLYDODGEDOWN
nullop
else
ai AIBOTFLYDODGEDOWN
ai AIBOTFLYDODGEDOWN
}
else
{
ifai AIBOTFLYDODGEUP
nullop
ifai AIBOTFLYDODGEUP
nullop
else
ai AIBOTFLYDODGEUP
ai AIBOTFLYDODGEUP
}
 
ends
 
 
state botflydodgestate
 
ifcanshoottarget
state botshootstate
 
ifcansee
{
ifrnd 2
ifcanshoottarget
state botshootstate
ifcansee
{
ifceilingdistl 100
ai AIBOTFLYDODGEDOWN
ifrnd 2
{
ifceilingdistl 100
ai AIBOTFLYDODGEDOWN
else
ai AIBOTFLYDODGEUP
ai AIBOTFLYDODGEUP
}
}
}
else
{
ai AIBOTFLYSEEKUP
}
 
ifcount 10
ai AIBOTFLYDOWN
 
else
ai AIBOTFLYSEEKUP
ifcount 10
ai AIBOTFLYDOWN
ends
 
state botflyhitstate
 
state botshootstate
 
// spawn BLOOD
 
ifdead
{
ifspritepal 21 { state miniboss break } else sound SANTA_DEAD
 
ifwasweapon FREEZEBLAST
state botshootstate
// spawn BLOOD
ifdead
{
spritepal 1
strength 0
move 0
action ABOTFLYFROZEN
sound SOMETHINGFROZE
break
}
else
ifwasweapon GROWSPARK
{
cstat 0
sound ACTOR_GROWING
ai AIBOTFLYGROW
break
}
else
ifwasweapon RADIUSEXPLOSION
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
addkills 1
endofgame 52
killit
}
else
ifwasweapon RPG
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
addkills 1
endofgame 52
killit
}
else
{
ai AIBOTFLYDYING
}
 
}
else
{
state dudehurt
 
ifwasweapon SHRINKSPARK
{
ifai AIBOTFLYSTEROIDS
{
}
ifspritepal 21
{
state miniboss
break
}
else
sound SANTA_DEAD
ifwasweapon FREEZEBLAST
{
spritepal 1
strength 0
move 0
action ABOTFLYFROZEN
sound SOMETHINGFROZE
break
}
else ifwasweapon GROWSPARK
{
cstat 0
sound ACTOR_GROWING
ai AIBOTFLYGROW
break
}
else ifwasweapon RADIUSEXPLOSION
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
addkills 1
endofgame 52
killit
}
else ifwasweapon RPG
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
addkills 1
endofgame 52
killit
}
else
ai AIBOTFLYDYING
}
else
{
state dudehurt
ifwasweapon SHRINKSPARK
{
ifai AIBOTFLYSTEROIDS
nullop
else
{
ai AIBOTFLYSHRINK
break
ai AIBOTFLYSHRINK
break
}
}
}
 
}
}
ends
 
state botflyseekupstate
 
ifcansee
ifcansee
{
ai AIBOTFLYUP
break
ai AIBOTFLYUP
break
}
 
ifp phigher
{
}
ifp phigher
nullop
else
{
ai AIBOTFLYSEEKDOWN
break
ai AIBOTFLYSEEKDOWN
break
}
 
ends
 
state botflyseekdownstate
 
ifcansee
ifcansee
{
ai AIBOTFLYDOWN
break
ai AIBOTFLYDOWN
break
}
else
{
ifp phigher
{
}
ifp phigher
nullop
else
{
ai AIBOTLETFALL
cactor SOBBOTWALK
ai AIBOTLETFALL
cactor SOBBOTWALK
}
}
 
ifp phigher
ifp phigher
{
ai AIBOTFLYSEEKUP
break
ai AIBOTFLYSEEKUP
break
}
 
ends
 
state botflydownstate
 
state botshootstate
 
ifrnd 16
state botshootstate
ifrnd 16
ifp phigher
{
ai AIBOTFLYUP
break
}
ifcansee
nullop
else
{
ifp phigher
{
ai AIBOTFLYUP
ai AIBOTFLYSTRAIGHT
break
}
}
 
ifcansee
{
}
else
{
ai AIBOTFLYSTRAIGHT
break
}
 
ends
 
state botflyupstate
 
state botshootstate
state botshootstate
 
ifrnd 16
ifrnd 16
{
ifp phigher
nullop
ifp phigher
nullop
else
{
ai AIBOTFLYDOWN
break
ai AIBOTFLYDOWN
break
}
}
 
ifcansee
{
}
ifcansee
nullop
else
{
ai AIBOTFLYSTRAIGHT
}
 
ai AIBOTFLYSTRAIGHT
ends
 
state botflyupmomentstate
 
ifcansee
ifcansee
{
ifcount 10 ai AIBOTFLYUP
break
ifcount 10 ai AIBOTFLYUP
break
}
else
{
ifcount 50
ifcount 50
{
ai AIBOTLETFALL
cactor SOBBOTWALK
ai AIBOTLETFALL
cactor SOBBOTWALK
}
}
 
ends
 
state botflyholdstate
 
state botshootstate
 
ifcount 50
{
ai AIBOTFLYUP
}
 
state botshootstate
ifcount 50
ai AIBOTFLYUP
ends
 
state botflystraightstate
ifpdistg 20000
ai AIBOTFLYSEEKDOWN
 
ifpdistg 20000
ai AIBOTFLYSEEKDOWN
 
ifcansee
{
ai AIBOTFLYDOWN
}
ifcansee
ai AIBOTFLYDOWN
else
{
ifrnd 128
1576,284 → 1503,249
ifnotmoving
ai AIFLYUPMOMENT
}
 
ends
 
state steroidsfly
 
soundonce DUKE_HARTBEAT
spawn FRAMEEFFECT1
 
ifcount 100
{
ai AIBOTFLYUP
}
 
ifcount 34
{
}
soundonce DUKE_HARTBEAT
spawn FRAMEEFFECT1
ifcount 100
ai AIBOTFLYUP
ifcount 34
nullop
else
sizeto 42 36
ifhitweapon
{
sizeto 42 36
state botflyhitstate
break
}
 
ifhitweapon
{
state botflyhitstate
break
}
 
ends
 
// FLY ACTOR
 
useractor enemy SOBBOTFLY SOBBOTSTRENGTH ABOTFLY
state checksquished
 
ifai 0
state checksquished
ifai 0
{
ifcansee nullop else { break }
ifspritepal 21 strength MINIBOSSSTRENGTH
sizeat 42 36
cstat 257
sound INSERT_CLIP
ai AIBOTFLYSEEKDOWN
spritepal 0
break
ifcansee
nullop
else
break
ifspritepal 21
strength MINIBOSSSTRENGTH
sizeat 42 36
cstat 257
sound INSERT_CLIP
ai AIBOTFLYSEEKDOWN
spritepal 0
break
}
 
 
fall
 
sleeptime 300
 
ifaction ABOTFLYDEAD
break
else
ifaction ABOTFLYFROZEN
fall
sleeptime 300
ifaction ABOTFLYDEAD
break
else ifaction ABOTFLYFROZEN
{
ifcount THAWTIME
ifcount THAWTIME
{
ai AIBOTFLYUP
getlastpal
ai AIBOTFLYUP
getlastpal
}
else
ifcount FROZENDRIPTIME
else ifcount FROZENDRIPTIME
{
ifactioncount 26
{
ifactioncount 26
{
spawn WATERDRIP
resetactioncount
}
}
ifhitweapon
}
ifhitweapon
{
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
strength 0
break
strength 0
break
}
addkills 1
addkills 1
 
ifrnd 84
spawn BLOODPOOL
 
lotsofglass 30
spawn ATOMICHEALTH
sound GLASS_BREAKING
ifspritepal 21
ifrnd 84
spawn BLOODPOOL
lotsofglass 30
spawn ATOMICHEALTH
sound GLASS_BREAKING
ifspritepal 21
{
state miniboss
break
}
endofgame 52
killit
else
{
endofgame 52
killit
}
}
 
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
else
ifai AIBOTFLYSTEROIDS
else ifai AIBOTFLYSTEROIDS
{
soundonce DUKE_JETPACK_IDLE
state steroidsfly
break
soundonce DUKE_JETPACK_IDLE
state steroidsfly
break
}
else
ifai AIBOTFLYGROW
else ifai AIBOTFLYGROW
{
ifcount 32
ifcount 32
{
guts JIBS4 24
guts JIBS6 28
addkills 1
sound SQUISH2
sound PIPEBOMB_EXPLODE
hitradius 2048 60 70 80 90
spawn BLOODPOOL
spawn EXPLOSION2
ifspritepal 21
guts JIBS4 24
guts JIBS6 28
addkills 1
sound SQUISH2
sound PIPEBOMB_EXPLODE
hitradius 2048 60 70 80 90
spawn BLOODPOOL
spawn EXPLOSION2
ifspritepal 21
{
state miniboss
break
}
endofgame 52
killit
else
{
endofgame 52
killit
}
}
else
{
sizeto MAXXSTRETCH MAXYSTRETCH
sizeto MAXXSTRETCH MAXYSTRETCH
break
}
break
}
break
}
else
ifai AIBOTFLYSHRINK
else ifai AIBOTFLYSHRINK
{
ifcount SHRUNKDONECOUNT
ai AIBOTFLYUP
else
ifcount SHRUNKCOUNT
{
ifcount SHRUNKDONECOUNT
ai AIBOTFLYUP
else ifcount SHRUNKCOUNT
{
spawn FRAMEEFFECT1
sizeto 42 36
}
else
{
}
else
{
ifcount 31
nullop
else
{
ifcount 30
else ifcount 30
ifrnd 255
{
ifrnd 255
{
sound DUKE_TAKEPILLS
ai AIBOTFLYSTEROIDS
break
}
}
}
ifcount 32
{
ifpdistl SQUISHABLEDISTANCE
{
 
ifpdistl SQUISHABLEDISTANCE
{
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
// state standard_pjibs
state standard_pjibs
sound SQUISH2
spawn BLOODPOOL
pkick
// state headhitstate
// state headhitstate
// state headhitstate
state headhitstate
ifspritepal 21
{
state miniboss
break
}
else
{
ifrnd 128
pstomp
ifspritepal 21
{
state miniboss
break
}
else
{
ifrnd 128
sound SANTA_DEAD
else
else
sound SANTA_TRASH9
}
endofgame 52
killit
endofgame 52
killit
}
}
else
{
}
else
{
sizeto MINXSTRETCH MINYSTRETCH
spawn FRAMEEFFECT1
}
}
break
}
break
}
 
soundonce DUKE_JETPACK_IDLE
 
ifai AIBOTFLYDYING
soundonce DUKE_JETPACK_IDLE
ifai AIBOTFLYDYING
{
state botflydyingstate
break
state botflydyingstate
break
}
 
ifhitweapon
state botflyhitstate
 
ifrnd 2 operate
 
ifp pshrunk
ifhitweapon
state botflyhitstate
ifrnd 2 operate
ifp pshrunk
state stomphisfreakingass
ifrnd 25
{
state stomphisfreakingass
}
 
ifrnd 25
{
ifp phigher
{
}
else
{
ifp ponground
ifp phigher
nullop
else ifp ponground
iffloordistl 200
{
iffloordistl 200
{
sound DUKE_JETPACK_OFF
iffloordistl 100 ai AIWALKFALL else ai AIWALKFALLHARD
iffloordistl 100
ai AIWALKFALL
else
ai AIWALKFALLHARD
cactor SOBBOTWALK
}
}
}
}
 
ifai AIFLYWAIT
ifai AIFLYWAIT
{
move 0
sound DUKE_JETPACK_ON
ai AIBOTFLYSEEKDOWN
move 0
sound DUKE_JETPACK_ON
ai AIBOTFLYSEEKDOWN
}
 
ifai AIBOTFLYSEEKUP
state botflyseekupstate
else
ifai AIBOTFLYSEEKDOWN
state botflyseekdownstate
else
ifai AIBOTFLYDOWN
state botflydownstate
else
ifai AIBOTFLYUP
state botflyupstate
else
ifai AIBOTFLYDODGEUP
state botflydodgestate
else
ifai AIBOTFLYDODGEDOWN
state botflydodgestate
else
ifai AIFLYUPMOMENT
state botflyupmomentstate
else
ifai AIFLYUPHOLD
state botflyholdstate
else
ifai AIBOTFLYSTRAIGHT
state botflystraightstate
 
break
ifai AIBOTFLYSEEKUP state botflyseekupstate
else ifai AIBOTFLYSEEKDOWN state botflyseekdownstate
else ifai AIBOTFLYDOWN state botflydownstate
else ifai AIBOTFLYUP state botflyupstate
else ifai AIBOTFLYDODGEUP state botflydodgestate
else ifai AIBOTFLYDODGEDOWN state botflydodgestate
else ifai AIFLYUPMOMENT state botflyupmomentstate
else ifai AIFLYUPHOLD state botflyholdstate
else ifai AIBOTFLYSTRAIGHT state botflystraightstate
enda
 
// Grunt
 
 
action AELFUZIWALK 0 4 5 1 30
action AELFUZIRUN 0 4 5 1 15
action AELFUZIFROZEN 0 1 5 1
1882,113 → 1774,99
ai AIELFUZIGROW AELFUZIGROW elfuzistopped geth getv
 
state elfuziseekstate
 
ifcansee
ifcansee
{
ifp pdead break
 
ifpdistl 15000
{
ifrnd 16
{
ai AIELFUZIHUNTING
}
}
ifp pdead break
ifpdistl 15000
ifrnd 16
ai AIELFUZIHUNTING
}
 
ends
 
state elfuzihuntstate
 
ifp pdead ai AIELFUZISEEKING
 
 
ifcansee
ifp pdead ai AIELFUZISEEKING
ifcansee
{
ifpdistl 2000
ifpdistl 2000
{
ai AIELFUZISHOOTING
break
ai AIELFUZISHOOTING
break
}
ifrnd 64 ifnotmoving
{
ai AIELFUZIJUMPING
break
}
 
ifrnd 7
ifpdistl 8192
ifrnd 64
ifnotmoving
{
ai AIELFUZISHOOTING
ai AIELFUZIJUMPING
break
}
 
ifrnd 7
ifpdistl 8192
ai AIELFUZISHOOTING
}
else
{
ifrnd 64 ai AIELFUZIIQ
}
 
ifrnd 64
ai AIELFUZIIQ
ends
 
state elfuziiqstate
 
ifcansee
{
ai AIELFUZIHUNTING
}
ifcansee
ai AIELFUZIHUNTING
else
{
ifrnd 16
ifnotmoving
{
ai AIELFUZISEEKING
}
ifrnd 16
ifnotmoving
ai AIELFUZISEEKING
}
 
ends
 
state elfuzishootstate
 
ifcansee
ifcansee
{
ifp pdead ai AIELFUZISEEKING
 
ifactioncount 3
ifp pdead ai AIELFUZISEEKING
ifactioncount 3
{
ifspritepal 0
{
sound CHAINGUN_FIRE
shoot CHAINGUN
}
else {
ifrnd 80
ifspritepal 0
{
sound SHRINKER_FIRE
shoot SHRINKER
} }
resetactioncount
sound CHAINGUN_FIRE
shoot CHAINGUN
}
else ifrnd 80
{
sound SHRINKER_FIRE
shoot SHRINKER
}
resetactioncount
}
ifrnd 4
ai AIELFUZIHUNTING
}
else
{
ai AIELFUZIIQ
}
 
else
ai AIELFUZIIQ
ends
 
state elfuzijumpingstate
 
ifactioncount 2
ai AIELFUZIFALLING
 
ifactioncount 2
ai AIELFUZIFALLING
ends
 
state elfuzifallingstate
 
iffloordistl 5
ai AIELFUZIHUNTING
 
iffloordistl 5
ai AIELFUZIHUNTING
ends
 
action NONEACTION 0 1 1 1 1
1996,7 → 1874,7
move forwardspeed 1500
// ai AIMOVEFORWARD NONEACTION forwardspeed faceplayer
 
useractor notenemy SPECBLOOD 0 // Hendricks266 fixed this actor. Before this fix, this line said "useractor SPECBLOOD 0", and the code was all messed up.
useractor notenemy SPECBLOOD 0 // Hendricks266 fixed this actor. Before this fix, this line said "useractor SPECBLOOD 0", and the code was shit.
cstat 32768
// sizeat 42 36
// sizeat 32 27
2009,67 → 1887,62
 
 
state elfuzihitstate
spawn BLOOD // Hendricks266 fixed this bug. Before this fix, this line said "spawn SPECBLOOD". SPECBLOOD is a piece of shit.
state random_wall_jibs
 
ifdead
spawn BLOOD // Hendricks266 fixed this bug. Before this fix, this line said "spawn SPECBLOOD". SPECBLOOD is a piece of shit.
state random_wall_jibs
ifdead
{
ifrnd 128
ifrnd 128
spawn XMASPRESENT2
ifwasweapon GROWSPARK
{
spawn XMASPRESENT2
sound ACTOR_GROWING
ai AIELFUZIGROW
break
}
ifwasweapon GROWSPARK
{
sound ACTOR_GROWING
ai AIELFUZIGROW
break
}
 
addkills 1
addkills 1
state random_wall_jibs
 
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
sound SOMETHINGFROZE
spritepal 1
move 0
action AELFUZIFROZEN
strength 0
break
sound SOMETHINGFROZE
spritepal 1
move 0
action AELFUZIFROZEN
strength 0
break
}
ifwasweapon RADIUSEXPLOSION
ifwasweapon RADIUSEXPLOSION
{
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
else
ifwasweapon RPG
else ifwasweapon RPG
{
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
else
ai AIELFUZIDYING
 
ai AIELFUZIDYING
}
else
{
// state random_wall_jibs
ifwasweapon SHRINKSPARK
// state random_wall_jibs
ifwasweapon SHRINKSPARK
{
sound ACTOR_SHRINKING
ai AIELFUZISHRINKING
sound ACTOR_SHRINKING
ai AIELFUZISHRINKING
}
else ifwasweapon GROWSPARK
sound EXPANDERHIT
else
ifwasweapon GROWSPARK
sound EXPANDERHIT
else
ifrnd 32
ai AIELFUZISHOOTING
}
2076,120 → 1949,117
ends
 
state elfuzishrinkstate
 
ifcount SHRUNKDONECOUNT
ai AIELFUZISEEKING
ifcount SHRUNKDONECOUNT
ai AIELFUZISEEKING
else
ifcount SHRUNKCOUNT
// sizeto 48 40
sizeto 32 27
else
sizeto 32 27 // sizeto 48 40
else
state genericshrunkcode
 
ends
 
state elfuzidyingstate
 
ifactioncount 5
ifactioncount 5
{
ifrnd 64
spawn BLOODPOOL
state rf
iffloordistl 8
sound THUD
action AELFUZIDEAD
move elfuzistopped
break
ifrnd 64
spawn BLOODPOOL
state rf
iffloordistl 8
sound THUD
action AELFUZIDEAD
move elfuzistopped
break
}
 
ends
 
useractor enemy ELFUZI ELFUZISTRENGTH
fall
 
state checksquished
 
ifaction AELFUZIDEAD
fall
state checksquished
ifaction AELFUZIDEAD
{
ifrespawn
ifcount RESPAWNACTORTIME
strength 0
ifhitweapon
ifwasweapon RADIUSEXPLOSION
{
spawn TRANSPORTERSTAR
cstat 257
strength ELFUZISTRENGTH
ai AIELFUZISEEKING
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
else
ifrespawn
ifcount RESPAWNACTORTIME
{
strength 0
ifhitweapon
ifwasweapon RADIUSEXPLOSION
{
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
break
spawn TRANSPORTERSTAR
cstat 257
strength ELFUZISTRENGTH
ai AIELFUZISEEKING
}
break
break
}
else
ifaction AELFUZIFROZEN
else ifaction AELFUZIFROZEN
{
ifcount THAWTIME
ifcount THAWTIME
{
ai AIELFUZISEEKING
getlastpal
ai AIELFUZISEEKING
getlastpal
}
else
ifcount FROZENDRIPTIME
else ifcount FROZENDRIPTIME
ifrnd 8
spawn WATERDRIP
 
ifhitweapon
ifhitweapon
{
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
strength 0
break
strength 0
break
}
addkills 1
lotsofglass 30
ifrnd 84 spawn BLOODPOOL
sound GLASS_BREAKING
killit
addkills 1
lotsofglass 30
ifrnd 84 spawn BLOODPOOL
sound GLASS_BREAKING
killit
}
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
else
ifai AIELFUZIDYING
else ifai AIELFUZIDYING
state elfuzidyingstate
 
ifai AIELFUZISHRINKING nullop else { ifai AIELFUZIGROW nullop else { ifhitweapon state elfuzihitstate } }
ifai AIELFUZISHRINKING
nullop
else ifai AIELFUZIGROW
nullop
else ifhitweapon
state elfuzihitstate
 
ifai 0
ifai 0
{
ai AIELFUZISEEKING
cstat 257
ai AIELFUZISEEKING
cstat 257
// clipdist 32
// sizeat 42 36
sizeat 32 27
ifspritepal 0 nullop else
sizeat 32 27 // sizeat 42 36
ifspritepal 0
nullop
else
{
ifrnd 72
strength ELFUZIALTSTR
else
strength ELFUZISTRENGTH
ifrnd 72
strength ELFUZIALTSTR
else
strength ELFUZISTRENGTH
}
}
else
 
ifai AIELFUZISEEKING state elfuziseekstate
else ifai AIELFUZISEEKING state elfuziseekstate
else ifai AIELFUZIHUNTING state elfuzihuntstate
else ifai AIELFUZIIQ state elfuziiqstate
else ifai AIELFUZISHOOTING state elfuzishootstate
2196,16 → 2066,19
else ifai AIELFUZIJUMPING state elfuzijumpingstate
else ifai AIELFUZIFALLING state elfuzifallingstate
else ifai AIELFUZIGROW state genericgrowcode
 
ifai AIELFUZISHRINKING state elfuzishrinkstate
enda
 
useractor enemystayput ELFUZISTAYPUT ELFUZISTRENGTH
cstat 257
// clipdist 32
ai AIELFUZISEEKING
cactor ELFUZI
cstat 257
// clipdist 32
ai AIELFUZISEEKING
cactor ELFUZI
enda
 
// Groan
 
action AELFGUNWALK 0 4 5 1 20
action AELFGUNRUN 0 4 5 1 10
action AELFGUNFROZEN 0 1 5 1
2228,20 → 2101,16
ai AIELFGUNGROW AELFGUNGROW elfgunstopped geth getv
 
state elfgunseekstate
 
ifcansee
ifcansee
{
ifp pdead break
 
ifpdistl 15000
{
ifrnd 16
{
ai AIELFGUNHUNTING
}
}
ifp pdead break
ifpdistl 15000
ifrnd 16
ai AIELFGUNHUNTING
}
 
ends
 
state elfgunhuntstate
2248,137 → 2117,129
ifp pdead ai AIELFGUNSEEKING
 
ifcansee
{
ifpdistl 2000
{
ifpdistl 2000
{
ai AIELFGUNSHOOTING
break
}
ai AIELFGUNSHOOTING
break
}
}
 
ifrnd 7
{
ifpdistl 8192 ai AIELFGUNSHOOTING
ifpdistl 8192
ai AIELFGUNSHOOTING
}
else ifrnd 48 ai AIELFGUNIQ
else ifrnd 48
ai AIELFGUNIQ
ends
 
state elfguniqstate
ifcansee ai AIELFGUNHUNTING
ifcansee
ai AIELFGUNHUNTING
else
{
ifrnd 16
ifnotmoving
ai AIELFGUNSEEKING
}
ifrnd 16
ifnotmoving
ai AIELFGUNSEEKING
ends
 
state elfgunshootstate
 
ifcansee
ifp pdead
ai AIELFGUNSEEKING
ifcansee
{
ifp pdead ai AIELFGUNSEEKING
 
ifcount 20
ifcanshoottarget
{
ifcount 29
nullop
else
{
ifcount 28
{
ifcount 29
nullop
else ifcount 28
sound SHOTGUN_COCK
}
}
}
else
{
ifcount 19
else ifcount 20
nullop
else ifcount 19
{
sound SHOTGUN_FIRE
shoot SHOTGUN
shoot SHOTGUN
shoot SHOTGUN
shoot SHOTGUN
shoot SHOTGUN
sound SHOTGUN_FIRE
shoot SHOTGUN
shoot SHOTGUN
shoot SHOTGUN
shoot SHOTGUN
shoot SHOTGUN
}
}
 
}
else
ai AIELFGUNIQ
ifactioncount 3
{
{
resetcount
resetactioncount
ifrnd 64
ai AIELFGUNHUNTING
}
}
else ai AIELFGUNIQ
 
ends
 
state elfgunhitstate
spawn BLOOD
 
state random_wall_jibs
 
ifdead
spawn BLOOD
state random_wall_jibs
ifdead
{
state random_wall_jibs
ifrnd 128
ifrnd 128
spawn XMASPRESENT
ifwasweapon GROWSPARK
{
spawn XMASPRESENT
sound ACTOR_GROWING
ai AIELFGUNGROW
break
}
ifwasweapon GROWSPARK
addkills 1
ifwasweapon FREEZEBLAST
{
sound ACTOR_GROWING
ai AIELFGUNGROW
break
sound SOMETHINGFROZE
spritepal 1
move 0
action AELFGUNFROZEN
strength 0
break
}
 
addkills 1
 
ifwasweapon FREEZEBLAST
ifwasweapon RADIUSEXPLOSION
{
sound SOMETHINGFROZE
spritepal 1
move 0
action AELFGUNFROZEN
strength 0
break
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
ifwasweapon RADIUSEXPLOSION
else ifwasweapon RPG
{
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
else
ifwasweapon RPG
{
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
else
ai AIELFGUNDYING
 
ai AIELFGUNDYING
}
else
{
state random_wall_jibs
ifwasweapon SHRINKSPARK
state random_wall_jibs
ifwasweapon SHRINKSPARK
{
sound ACTOR_SHRINKING
ai AIELFGUNSHRINKING
sound ACTOR_SHRINKING
ai AIELFGUNSHRINKING
}
else ifwasweapon GROWSPARK
sound EXPANDERHIT
else
ifwasweapon GROWSPARK
sound EXPANDERHIT
else
ifrnd 32
ai AIELFGUNSHOOTING
}
2385,128 → 2246,128
ends
 
state elfgunshrinkstate
 
ifcount SHRUNKDONECOUNT
ai AIELFGUNSEEKING
ifcount SHRUNKDONECOUNT
ai AIELFGUNSEEKING
else ifcount SHRUNKCOUNT
sizeto 32 27 // sizeto 48 40
else
ifcount SHRUNKCOUNT
// sizeto 48 40
sizeto 32 27
else
state genericshrunkcode
 
ends
 
state elfgundyingstate
 
ifactioncount 4
ifactioncount 4
{
ifrnd 64
spawn BLOODPOOL
state rf
iffloordistl 8
sound THUD
action AELFGUNDEAD
move elfgunstopped
break
ifrnd 64
spawn BLOODPOOL
state rf
iffloordistl 8
sound THUD
action AELFGUNDEAD
move elfgunstopped
break
}
 
ends
 
useractor enemy ELFGUN ELFGUNSTRENGTH
fall
state checksquished
 
ifaction AELFGUNDEAD
fall
state checksquished
ifaction AELFGUNDEAD
{
ifrespawn
ifcount RESPAWNACTORTIME
ifrespawn
ifcount RESPAWNACTORTIME
{
spawn TRANSPORTERSTAR
cstat 257
strength ELFGUNSTRENGTH
ai AIELFGUNSEEKING
spawn TRANSPORTERSTAR
cstat 257
strength ELFGUNSTRENGTH
ai AIELFGUNSEEKING
}
else
{
strength 0
ifhitweapon
ifwasweapon RADIUSEXPLOSION
strength 0
ifhitweapon
ifwasweapon RADIUSEXPLOSION
{
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
sound SQUISH2
// state standard_jibs
// state standard_jibs
state standard_jibs
killit
}
break
break
}
break
break
}
else
ifaction AELFGUNFROZEN
else ifaction AELFGUNFROZEN
{
ifcount THAWTIME
ifcount THAWTIME
{
ai AIELFGUNSEEKING
getlastpal
ai AIELFGUNSEEKING
getlastpal
}
else
ifcount FROZENDRIPTIME
ifrnd 8
spawn WATERDRIP
ifcount FROZENDRIPTIME
ifrnd 8
spawn WATERDRIP
 
ifhitweapon
ifhitweapon
{ // state elfgunhitstate
ifwasweapon FREEZEBLAST
ifwasweapon FREEZEBLAST
{
strength 0
break
strength 0
break
}
addkills 1
lotsofglass 30
ifrnd 84 spawn BLOODPOOL
sound GLASS_BREAKING
killit
addkills 1
lotsofglass 30
ifrnd 84
spawn BLOODPOOL
sound GLASS_BREAKING
killit
}
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
else
ifai AIELFGUNDYING
state elfgundyingstate
ifai AIELFGUNDYING
state elfgundyingstate
 
ifai AIELFGUNSHRINKING nullop else { ifai AIELFGUNGROW nullop else { ifhitweapon { state elfgunhitstate } } }
ifai AIELFGUNSHRINKING
nullop
else ifai AIELFGUNGROW
nullop
else ifhitweapon
state elfgunhitstate
 
ifai 0
ifai 0
{
ai AIELFGUNSEEKING
cstat 257
// clipdist 32
// sizeat 42 36
sizeat 32 27
strength ELFGUNSTRENGTH
ai AIELFGUNSEEKING
cstat 257
// clipdist 32
sizeat 32 27 // sizeat 42 36
strength ELFGUNSTRENGTH
}
else
else ifai AIELFGUNSEEKING state elfgunseekstate
else ifai AIELFGUNHUNTING state elfgunhuntstate
else ifai AIELFGUNIQ state elfguniqstate
else ifai AIELFGUNSHOOTING state elfgunshootstate
else ifai AIELFGUNGROW state genericgrowcode
 
ifai AIELFGUNSEEKING { state elfgunseekstate } else
ifai AIELFGUNHUNTING { state elfgunhuntstate } else
ifai AIELFGUNIQ { state elfguniqstate } else
ifai AIELFGUNSHOOTING { state elfgunshootstate } else
ifai AIELFGUNGROW { state genericgrowcode }
ifai AIELFGUNSHRINKING { state elfgunshrinkstate }
 
break
ifai AIELFGUNSHRINKING state elfgunshrinkstate
enda
 
useractor enemystayput ELFGUNSTAYPUT ELFGUNSTRENGTH
ai AIELFGUNSEEKING
cstat 257
// clipdist 32
cactor ELFGUN
break
ai AIELFGUNSEEKING
cstat 257
// clipdist 32
cactor ELFGUN
break
enda
 
state present
2524,7 → 2385,15
ifcanseetarget
{
sound RIP_PAPER
ifvarl temp 1 { ifrnd 128 spawn SHIELD else spawn SIXPAK } else espawnvar temp
ifvarl nw_temp 1
{
ifrnd 128
spawn SHIELD
else
spawn SIXPAK
}
else
espawnvar nw_temp // spawnvar // spawns the lotag, collected during EVENT_LOADACTOR
killit
}
ends
2537,7 → 2406,15
ifcanseetarget
{
sound RIP_PAPER
ifvarl temp 1 { ifrnd 128 spawn CHAINGUNSPRITE else spawn SHOTGUNSPRITE } else espawnvar temp
ifvarl nw_temp 1
{
ifrnd 128
spawn CHAINGUNSPRITE
else
spawn SHOTGUNSPRITE
}
else
espawnvar nw_temp // spawnvar // spawns the lotag, collected during EVENT_LOADACTOR
killit
}
ends
2568,75 → 2445,76
ifspritepal 21
{
ifhitweapon
ifcount 24
{
ifcount 24
{
strength 999
ifrnd 128 sound MOVIE2 else sound MOVIE3
resetcount
}
strength 999
ifrnd 128
sound MOVIE2
else
sound MOVIE3
resetcount
}
}
else
{
hitradius 4096 1 1 1 1
}
hitradius 4096 1 1 1 1
enda
 
useractor notenemy MALEGEEK 20
ifhitweapon
{
guts JIBS6 3
sound SQUISH2
ifdead
{
stopsound MALECAROL
guts JIBS6 2
guts JIBS6 3
guts JIBS6 4
sound MALECAROL_DEAD
globalsound MOUSEANNOY
killit
}
}
ifcount 225
{
sound MALECAROL
resetcount
}
ifhitweapon
{
guts JIBS6 3
sound SQUISH2
ifdead
{
stopsound MALECAROL
guts JIBS6 2
guts JIBS6 3
guts JIBS6 4
sound MALECAROL_DEAD
globalsound MOUSEANNOY
killit
}
}
ifcount 225
{
sound MALECAROL
resetcount
}
enda
 
useractor notenemy FEMALEGEEK 20
ifhitweapon
{
guts JIBS6 3
sound SQUISH2
ifdead
{
stopsound FEMALECAROL
guts JIBS6 2
guts JIBS6 3
guts JIBS6 4
sound FEMALECAROL_DEAD
killit
}
}
ifcount 225
{
sound FEMALECAROL
resetcount
}
ifhitweapon
{
guts JIBS6 3
sound SQUISH2
ifdead
{
stopsound FEMALECAROL
guts JIBS6 2
guts JIBS6 3
guts JIBS6 4
sound FEMALECAROL_DEAD
killit
}
}
ifcount 225
{
sound FEMALECAROL
resetcount
}
enda
 
state mariocode
cstat 257
sizeat 62 62
cstat 257
sizeat 62 62
ends
 
useractor notenemy NWMARIO 0
state mariocode
state mariocode
enda
 
useractor notenemy NWMARIO2 0
state mariocode
state mariocode
enda
/nw_plus/NWSnow.con
279,52 → 279,52
useractor notenemy SNOW 0
sizeat 4 4
 
addvar temp2 16
ifvarg temp2 2047 subvar temp2 4095
setvarvar temp3 temp2
sin temp3 temp3
shiftvarr temp3 5
addvar nw_temp2 16
ifvarg nw_temp2 2047 subvar nw_temp2 4095
setvarvar nw_temp3 nw_temp2
sin nw_temp3 nw_temp3
shiftvarr nw_temp3 5
 
/*
getactor[THISACTOR].x x
getactor[THISACTOR].y y
getactor[THISACTOR].z z
getactor[THISACTOR].x nw_x
getactor[THISACTOR].y nw_y
getactor[THISACTOR].z nw_z
 
updatesectorz x y z temp
getactor[THISACTOR].zvel z
ifvare sector[temp].lotag 2
updatesectorz nw_x nw_y nw_z nw_temp
getactor[THISACTOR].zvel nw_z
ifvare sector[nw_temp].lotag 2
{
ifvarl z 64
ifvarl nw_z 64
{
setvar tempb GRAVITATIONALCONSTANT
shiftvarr tempb 5
addvarvar tempb temp4
addvarvar z tempb
setvar nw_tempb GRAVITATIONALCONSTANT
shiftvarr nw_tempb 5
addvarvar nw_tempb temp4
addvarvar nw_z nw_tempb
}
}
else
{
ifvarl z 144
ifvarl nw_z 144
{
setvar tempb GRAVITATIONALCONSTANT
shiftvarr tempb 5
addvarvar tempb temp4
addvarvar z tempb
setvar nw_tempb GRAVITATIONALCONSTANT
shiftvarr nw_tempb 5
addvarvar nw_tempb temp4
addvarvar nw_z nw_tempb
}
}
*/
 
movesprite THISACTOR temp3 0 256 CLIPMASK0 RETURN
movesprite THISACTOR nw_temp3 0 256 CLIPMASK0 RETURN
ifvarn RETURN 0 killit
 
 
getactor[THISACTOR].x x
getactor[THISACTOR].y y
getactor[THISACTOR].z z
getactor[THISACTOR].x nw_x
getactor[THISACTOR].y nw_y
getactor[THISACTOR].z nw_z
 
updatesectorz x y z temp
ifvarn temp -1 getflorzofslope temp x y temp2 else killit
updatesectorz nw_x nw_y nw_z nw_temp
ifvarn nw_temp -1 getflorzofslope nw_temp nw_x nw_y nw_temp2 else killit
 
ifvarvare z temp2 killit
ifvarvare nw_z nw_temp2 killit
 
enda
/nw_plus/NWDPCode.con
184,9 → 184,9
{
ifvarl xydist 1280
{
setvar temp CAPTSPINNINGPLAYER
ifvarand monstflags 8 mulvar temp -2 else mulvar temp -1
setactor[target].htextra temp
setvar nw_temp CAPTSPINNINGPLAYER
ifvarand monstflags 8 mulvar nw_temp -2 else mulvar nw_temp -1
setactor[target].htextra nw_temp
setactor[target].htpicnum RPG
setactor[target].htowner THISACTOR
//sound DUKE_GRUNT
272,10 → 272,10
ifvarl RETURN 16384
ifvarg RETURN -1 // hit a sprite
{
getactor[RETURN].picnum picnum
getactorvar[RETURN].monstatus temp
ifvare picnum APLAYER sound SQUISHED else
ifvare temp 1 sound SQUISHED
getactor[RETURN].picnum nw_picnum
getactorvar[RETURN].monstatus nw_temp
ifvare nw_picnum APLAYER sound SQUISHED else
ifvare nw_temp 1 sound SQUISHED
setactor[RETURN].htpicnum RPG
setactor[RETURN].htextra 100
setactor[RETURN].htowner THISACTOR
424,8 → 424,8
ifai AICOMMSHOOT
{
ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break }
setvar temp 0
ifvarn target -1 setvar temp 1
setvar nw_temp 0
ifvarn target -1 setvar nw_temp 1
ifvarand monstflags 2048
ifvare playerally 0
{
434,10 → 434,10
ai AICOMMFRISBEE
break
}
else ifvarg targetlock 0 setvar temp 1
else ifvarg targetlock 0 setvar nw_temp 1
} else
ifvarg canshootplayer 0 setvar temp 1
ifvare temp 1
ifvarg canshootplayer 0 setvar nw_temp 1
ifvare nw_temp 1
{
ifcount 24
ifrnd 16
489,12 → 489,12
 
ifvarg canseeplayer 0
{
setvar temp 0
ifp phigher setvar temp 1
setvar nw_temp 0
ifp phigher setvar nw_temp 1
ifvarn target -1
ifvarvarg z mz setvar temp 1
ifvarvarg z mz setvar nw_temp 1
ifvare temp 1
ifvare nw_temp 1
move COMMGETUPVELS getv geth faceplayer
else
move COMMGETVELS getv geth faceplayer
/nw_plus/nw_plus.def
0,0 → 1,13
/*
--------------------------------------------------------------------------------
Duke: Nuclear Winter Plus
By Hendricks266
--------------------------------------------------------------------------------
*/
 
include NWNames.def
include nwinter/undef.def
include nwinter/8bit.def
include nwinter/voxels.def
include nwinter/music.def
include nwinter/sounds.def
/nw_plus/linux_macosx/kextract.linux
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/linux_macosx/uips.linux
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/nw_plus/linux_macosx/nwinter.sh
1,6 → 1,6
#!/bin/bash
if [ -e eduke32 ]; then
./eduke32 /xNWEDuke.con /hnwinter.def /jnw_plus /gNWINTER.GRP
./eduke32 -xNWEDuke.con -hnwinter.def -jnw_plus -gNWINTER.GRP
else
echo "Place this script and the nw_plus folder in your EDuke32 directory."
fi
/nw_plus/linux_macosx/nw_dp.sh
1,6 → 1,6
#!/bin/bash
if [ -e eduke32 ]; then
./eduke32 -xNWDP.con -hnw_dp.def /jnw_plus /gNWINTER.GRP -jDukePlus
./eduke32 -xNWDP.con -hnw_dp.def -jnw_plus -gNWINTER.GRP -jDukePlus
else
echo "Place this script and the nw_plus folder in your EDuke32 directory."
fi
/nw_plus/linux_macosx/nw_install.sh
5,7 → 5,7
mv ../NWINTER.GRP ./
fi
if [ -e NWINTER.GRP ]; then
./kextract.linux NWINTER.GRP E2L*.MAP
./kextract NWINTER.GRP E2L*.MAP
mv E2L1.MAP nwl1.map
mv E2L2.MAP nwl2.map
mv E2L3.MAP nwl3.map
14,14 → 14,14
mv E2L6.MAP nwl6.map
mv E2L7.MAP nwl7.map
mv E2L8.MAP nwl8.map
./uips.linux a nwl1.ips nwl1.map
./uips.linux a nwl2.ips nwl2.map
./uips.linux a nwl3.ips nwl3.map
./uips.linux a nwl4.ips nwl4.map
./uips.linux a nwl5.ips nwl5.map
./uips.linux a nwl6.ips nwl6.map
./uips.linux a nwl7.ips nwl7.map
./uips.linux a nwl8.ips nwl8.map
./bspatch nwl1.map nwl1.map nwl1.patch
./bspatch nwl2.map nwl2.map nwl2.patch
./bspatch nwl3.map nwl3.map nwl3.patch
./bspatch nwl4.map nwl4.map nwl4.patch
./bspatch nwl5.map nwl5.map nwl5.patch
./bspatch nwl6.map nwl6.map nwl6.patch
./bspatch nwl7.map nwl7.map nwl7.patch
./bspatch nwl8.map nwl8.map nwl8.patch
echo "Patching complete!"
else
echo "NWINTER.GRP does not exist."
/nw_plus/linux_macosx/nw_xxx.sh
1,6 → 1,6
#!/bin/bash
if [ -e eduke32 ]; then
./eduke32 /xNWEDuke.con /hnw_xxx.def /jnw_plus /gNWINTER.GRP
./eduke32 -xNWEDuke.con -hnw_xxx.def -jnw_plus -gNWINTER.GRP
else
echo "Place this script and the nw_plus folder in your EDuke32 directory."
fi
/nw_plus/linux_macosx/nw_dp_xxx.sh
1,6 → 1,6
#!/bin/bash
if [ -e eduke32 ]; then
./eduke32 -xNWDPXXX.con -hnw_dp_xxx.def /jnw_plus /gNWINTER.GRP -jDukePlus
./eduke32 -xNWDPXXX.con -hnw_dp_xxx.def -jnw_plus -gNWINTER.GRP -jDukePlus
else
echo "Place this script and the nw_plus folder in your EDuke32 directory."
fi
/nw_plus/linux_macosx/NWinter+_Linux_MacOSX.txt
1,6 → 1,6
I am not proficient with bash scripts, but I have included my attempt at providing the same level of support to Mac OS X and Linux as I do with my native OS, Windows.
 
Note that on Mac OS X, you will have to compile your own binaries using the instructions below and replace the string ".linux" in the installation script with nothing or any existing Mac prefix. I'm truly sorry about this.
You will have to compile your own binaries using the instructions below and replace the string ".linux" in the installation script with nothing or any existing Mac prefix. I'm truly sorry about this.
 
First, copy NWINTER.GRP to this directory and run nw_install.sh.
 
12,11 → 12,11
 
 
If you want to attempt manual installation, or need help along the way:
1. Copy only NWINTER.GRP from your Nuclear Winter CD to your EDuke32 directory. It should be found in the GAMEDATA/ directory.
2. Extract the maps from NWINTER.GRP using kextract. The syntax is "kextract NWINTER.GRP E2L*.MAP". Binaries for x86 Win32 and x86 Linux have been included. This program's source is included with EDuke32. To compile it, first compile EDuke32 following the steps at the wiki (http://wiki.eduke32.com). Then type "make" in the "build/" directory.
1. Copy only NWINTER.GRP from your Nuclear Winter CD to your EDuke32 directory. It should be found in the GAMEDATA/ directory.
2. Extract the maps from NWINTER.GRP using kextract. The syntax is "kextract NWINTER.GRP E2L*.MAP". This program's source is included with EDuke32. To compile it, first compile EDuke32 following the steps at the wiki (http://wiki.eduke32.com). Then type "make" in the "build/" directory.
3. Rename the maps' E2L prefix to nwl ("mv E2L*.MAP nwl*.map" might do it).
4. Patch the maps using uips. (http://www.neillcorlett.com/uips/) The syntax is "uips a <ips> <map>". Binaries for x86 Win32 and x86 Linux have been included.
5. Put the Duke3D HRP, Update Pack, XXX Pack if so desired, and Music Pack in autoload/duke3d.grp/
4. Patch the maps using bspatch. (http://www.daemonology.net/bsdiff/) The syntax is "bspatch <source> <destination> <patch>".
5. Put the Duke3D HRP, Update Pack, XXX Pack if so desired, and Music Pack in ~/.eduke32/autoload/
6. Run EDuke32 with the command line options.
 
 
/nw_plus/linux_macosx
Property changes:
Added: svn:ignore
+Thumbs.db
/nw_plus/hrp_art_license.txt
0,0 → 1,76
High Resolution Pack Art License
 
This Work is provided under the terms of this License.
The Work is protected by copyright and/or other applicable law. Any use of the
Work other than as authorized under this license is prohibited by law.
 
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED
TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN
CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
 
 
Definitions:
------------
 
"Adaptation" means a work based upon the Work, or upon the Work and other
pre-existing works, such as a translation, modification, derivative work,
arrangement or other alterations of an artistic work, or phonogram or
performance and includes cinematographic adaptations or any other form in
which the Work may be recast, transformed, or adapted including in any form
recognizably derived from the original.
 
"Distribute" means to make available to the public the original and copies of
the Work or Adaptation, as appropriate, through any transfer of ownership.
 
"Licensor" means the individual, individuals, entity or entities that offer(s)
the Work under the terms of this License.
 
"Author" means, in the case of a literary or artistic work, the individual,
individuals, entity or entities who created the Work or if no individual or
entity can be identified, the publisher.
 
"Work" means the artistic and/or musical content offered under the terms of
this License including without limitation any production in the literary,
scientific and artistic domain, whatever may be the mode or form of its
expression including digital form.
 
"You" means an individual or entity exercising rights under this License who
has not previously violated the terms of this License with respect to the Work,
or who has received express permission from the Licensor to exercise rights
under this License despite a previous violation.
 
"Reproduce" means to make copies of the Work by any means.
 
 
Terms:
------
 
You are free to copy, alter, distribute, reproduce and transmit this Work,
subject to the following conditions:
 
1. You may not use this Work or anything contained in this Work for commercial
purposes.
 
2. You must attribute this Work in the manner specified by the authors or
licensor.
 
3. Any likenesses, characters, sounds, phrases or references specific to
Duke Nukem, 3D Realms Entertainment, or Apogee Software Ltd. appear in this
Work courtesy of 3D Realms Entertainment and are the exclusive property of
3D Realms Entertainment, and are provided only to be used with a legally
acquired copy of Duke Nukem 3D. You may not alter, transform, build upon or
adapt any portion of this Work specifically related to or derived from the
Duke Nukem intellectual property, including likenesses, characters, sounds,
phrases or references for any purpose other than use with a legally acquired
copy of Duke Nukem 3D.
 
4. Any works based upon altered, transformed, or copied parts of this Work must
be distributed under a license identical or similar to this one.
 
5. For any reuse or distribution of this Work, you must make clear to others
the license terms of this Work.
 
6. The producers and/or authors of this Work explicity reject any liability for
any damages resulting from use or misuse of this Work by any Licensee or
other third party.
/nw_plus/NWINTRO.TXT
14,3 → 14,13
 
A telegram alerts Duke Nukem to the horrible plan. Without any hesitation,
Duke springs into action.
 
THE LEVELS
 
Deja Vu - A familiar winterized version of the original, only backwards!
Where It All Began - Los Angeles with snow? What are the aliens up to?
Land of Forgotten Toys - Welcome to the frozen tundra, Duke.
Santa's Corporate HQ - Check Santa's list to see if you've been naughty or nice.
The Backdoor - There's always a way in, but sometimes you have to get a little bit wet.
Christmas Village - The villagers here don't appear to be very friendly.
Here Comes Santa Claus - And he's packing some holiday punch.
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/nw_plus/nwl4.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwl6.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwl1demo.map
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/nw_plus/nwl1.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwl8.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwl3.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwl5.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwl7.patch
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/nw_plus/nwfix.m32
27,7 → 27,7
*/
 
include DEFS.CON
include nwinter_hrp/NWDefs.con
include NWDefs.con
 
gamevar i 0 0
gamevar k 0 0
35,76 → 35,134
 
onevent EVENT_DRAW2DSCREEN
// Fixing sounds.
for i allsprites, ifactor MUSICANDSFX
{
for i allsprites, ifactor MUSICANDSFX
{
// fixing ambient sounds
switch .lotag
switch .lotag
 
case 91
case 308
set .lotag 426
break
case 91
case 308
set .lotag 426
break
 
case 244
set .lotag 438
break
endswitch
}
case 244
set .lotag 438
break
endswitch
}
 
 
// fixing one-time sector sounds
for k allsectors
{
getsector[k].lotag l
switch l
for k allsectors
{
switch sector[k].lotag
 
case 10091
case 10308
set sector[k].lotag 10426
break
case 10091
case 10308
set sector[k].lotag 10426
break
 
case 10244
set sector[k].lotag 10438
break
case 10244
set sector[k].lotag 10438
break
 
endswitch
setsector[k].lotag l
}
endswitch
 
/*
ifvarg sector[k].lotag 9999
ifvarl sector[k].lotag 20000
{
al k
al sector[k].lotag
}
*/
 
// texture replacements:
switch sector[k].floorpicnum
case 198
ifvare sector[k].floorpal 1
{
al k
set sector[k].floorpicnum 3670
set sector[k].floorpal 0
}
break
 
endswitch
switch sector[k].ceilingpicnum
case 198
ifvare sector[k].ceilingpal 1
{
al k
set sector[k].ceilingpicnum 3670
set sector[k].ceilingpal 0
}
break
 
endswitch
}
 
for k allwalls
{
ifvare wall[k].pal 1
{
switch wall[k].picnum
case 198
al k
set wall[k].picnum 3670
set wall[k].pal 0
break
endswitch
switch wall[k].overpicnum
case 198
al k
set wall[k].overpicnum 3670
set wall[k].pal 0
break
endswitch
}
}
 
// Fixing actors.
 
// fixing actors already in the map
for i allsprites
{
switch .picnum
for i allsprites
{
switch .picnum
/*
// Step 1: Santa
case 2000 set .picnum 3900 break
case 2045 set .picnum 3905 break
*/
/*
case 2000 set .picnum 3900 break
case 2045 set .picnum 3905 break
*/
// Step 2: Pig Cops
/*
case 2002 set .picnum 2000 break
case 2003 set .picnum 2001 break
case 2047 set .picnum 2045 break
case 2002 set .picnum 2000 break
case 2003 set .picnum 2001 break
case 2047 set .picnum 2045 break
*/
endswitch
}
endswitch
}
// fixing actors which spawn on triggers
for i allsprites, ifactor RESPAWN
{
switch .lotag
for i allsprites, ifactor RESPAWN
{
switch .hitag
/*
// Step 1: Santa
case 2000 set .hitag 3900 addlogvar .x addlogvar .y break
case 2045 set .hitag 3905 addlogvar .x addlogvar .y break
*/
/*
case 2000 set .lotag 3900 break
case 2045 set .lotag 3905 break
*/
// Step 2: Pig Cops
/*
case 2002 set .lotag 2000 break
case 2003 set .lotag 2001 break
case 2047 set .lotag 2045 break
case 2002 set .hitag 2000 addlogvar .x addlogvar .y break
case 2003 set .hitag 2001 addlogvar .x addlogvar .y break
case 2047 set .hitag 2045 addlogvar .x addlogvar .y break
*/
endswitch
}
endswitch
}
endevent
/nw_plus/NW_Debug.bat
0,0 → 1,3
@echo off
set debug=1
call "%~dp0\NWinter.bat" %*
/nw_plus/NW_Edit_DP.bat
0,0 → 1,4
@echo off
set dp=1
set editor=1
call "%~dp0\NWinter.bat" %*
/nw_plus/NW_Edit.bat
0,0 → 1,3
@echo off
set editor=1
call "%~dp0\NWinter.bat" %*
/nw_plus/NW_Edit_Debug.bat
0,0 → 1,4
@echo off
set debug=1
set editor=1
call "%~dp0\NWinter.bat" %*
/nw_plus/_nwzoo.map
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/nw_plus/NW_XXX.bat
1,3 → 1,3
@echo off
echo Using XXX mode.
NWinter.bat /hnw_xxx.def %*
set xxx=1
call "%~dp0\NWinter.bat" %*
/nw_plus/NW_DP.bat
1,3 → 1,3
@echo off
echo Using Duke Plus by DeeperThought.
NWinter.bat -xNWDP.con -hnw_dp.def %* -jDukePlus
set dp=1
call "%~dp0\NWinter.bat" %*
/nw_plus/NW_DP_XXX.bat
1,3 → 1,4
@echo off
echo Using Duke Plus by DeeperThought.
NW_XXX.bat -xNWDPXXX.con -hnw_dp_xxx.def %* -jDukePlus
set dp=1
set xxx=1
call "%~dp0\NWinter.bat" %*
/nw_plus/NWDefs.con
21,6 → 21,7
define DRUNKELF 3592
define HALFBITCH 3627
define SLUTASS 3637
define CHANDELIER 3778
define CHOOCHOOSLUT 3779
define HORSEPOWER 3783
 
68,6 → 69,15
 
define SNOW 3835
 
// skin definitions
define duke 0
define Duke 0
define dUKE 0
define DUKE 0
define santa 1
define Santa 1
define sANTA 1
define SANTA 1
 
 
define DAMNUGLY 398
/nw_plus/NWNames.h
0,0 → 1,9
/*
--------------------------------------------------------------------------------
Duke: Nuclear Winter Plus
By Hendricks266
--------------------------------------------------------------------------------
*/
 
#include names.h
#include NWNames.def
/nw_plus/NWNames.def
0,0 → 1,70
/*
--------------------------------------------------------------------------------
Duke: Nuclear Winter
By Joris Weimar
© 1997 Simply Silly Software
--------------------------------------------------------------------------------
Duke: Nuclear Winter Plus
By Hendricks266
--------------------------------------------------------------------------------
*/
 
#define SOBBOTWALK 3900
#define SOBBOTFLY 3905
 
#define SPECBLOOD 105
 
#define SSPEAKER 589
#define RIBBON 930
#define WOODSLATS 3757
 
#define DRUNKELF 3592
#define HALFBITCH 3627
#define SLUTASS 3637
#define CHANDELIER 3778
#define CHOOCHOOSLUT 3779
#define HORSEPOWER 3783
 
#define SNOWYDOORSHOCK 3656
 
#define MYBOX 3666
#define TREEWITHSOMETHING 3648
 
#define NWSTEAM 3632
#define NWEFFECTOR 3700
 
#define WOODENHORSE2 3764
 
// #define GEEK1 3761
#define MALEGEEK 3761
 
#define SNOWGIB 3777
 
#define XMASPRESENT 3782
#define XMASPRESENT2 3786
 
#define ELFUZI 3800
#define ELFUZISTAYPUT 3801
 
// #define VIRGINSLUT 3823
#define FEMALEGEEK 3823
 
#define SNOWMAN 3841
 
#define SNOWBALL 3882
 
#define NOISEMAKER 3883
 
#define ELFGUN 4000
#define ELFGUNSTAYPUT 4001
 
#define NWMARIO 3598
#define NWMARIOKART 3603
#define NWMARIO2 3784
 
 
#define SNOWFLAKE 3697
#define SNOWMAKER 3787
#define SNOWMAKERNOMOVE 3789
 
#define SNOW 3835
/nw_plus/nwinter.def
6,4 → 6,5
*/
 
include duke3d.def
include nw_plus.def
include nwinter_hrp.def
/nw_plus/NWEDuke.con
10,10 → 10,4
*/
 
include EDUKE.CON
gamevar picnum 0 2
gamevar temp 0 2
gamevar tempb 0 2
gamevar x 0 2
gamevar y 0 2
gamevar z 0 2
include NWinter.con
/nw_plus/.
Property changes:
Added: svn:ignore
+Thumbs.db