random fixes + support `clang-cl` on visual studio (#1129)

* delete unused shaders

* hide some options in debug menu

* change fullscreen logic a bit

* add "all actors" toggle

* borderless fix and fix alpha in direct renderer untextured (do we need a separate shader for that?)

* fix fuel cell orbit icons in widescreen

* fix `curve` types

* refs

* fix levitator task...

* fix some task stuff

* update font code a bit (temp)

* cmake, third-party and visual studio overhaul

* Update .gitmodules

* update modules

* clone repos

* fix encoding in zydis

* where did these come from

* try again

* add submodule

* Update 11zip

* Update 11zip

* Update 11zip

* delete

* try again

* clang

* update compiler flags

* delete 11zip. go away.

* Create memory-dump-p2s.py

* properly

* fix minimum architecture c++ compiler flags

* fix zydis

* oops

* Update all-types.gc

* fix clang-cl tests

* make "all actors" work better, entity debug qol

* update game-text conversion code to be more modularized

* Create vendor.txt

* fix typos and minor things

* update refs

* clang

* Attempt to add clang-cl support to vs2019 and CI

* vs2022 + clang-cl

* srsly? fix clang build

* Update launch.vs.json

* extend windows CI timer
pull/1140/head
ManDude 2022-02-08 00:15:37 +00:00 committed by GitHub
parent 1bf6972f21
commit 5b44aece75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1120 changed files with 335829 additions and 29329 deletions

View File

@ -5,6 +5,7 @@ indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
# https://editorconfig-specification.readthedocs.io/
# https://docs.microsoft.com/en-us/visualstudio/ide/cpp-editorconfig-properties?view=vs-2019

View File

@ -16,15 +16,16 @@ jobs:
# Prevent one build from failing everything (although maybe those should be included as experimental builds instead)
fail-fast: false
matrix:
os: [windows-2019]
os: [windows-2022]
config: [Release]
compiler: [msvc, clang]
experimental: [false]
name: ${{ matrix.config }}
name: ${{ matrix.config }}-${{ matrix.compiler }}
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
# Set some sort of timeout in the event of run-away builds. We are limited on concurrent jobs so, get rid of them.
timeout-minutes: 20
timeout-minutes: 25 # 5 more minutes than linux
env: # overrides: https://github.com/mbitsnbites/buildcache/blob/master/doc/configuration.md
BUILDCACHE_MAX_CACHE_SIZE: 1000000000 # 1gb
@ -53,25 +54,31 @@ jobs:
- name: Setup Buildcache
uses: mikehardy/buildcache-action@v1.2.2
with:
cache_key: ${{ matrix.os }}-${{ matrix.config }}
cache_key: ${{ matrix.os }}-${{ matrix.config }}-${{ matrix.compiler }}
- name: CMake Generation
shell: cmd # ideally id like everything to be powershell but running this bat file is finicky
run: |
call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER="${{ github.workspace }}"/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER="${{ github.workspace }}"/buildcache/bin/buildcache.exe .
if "${{ matrix.compiler }}" == "clang" (
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER="${{ github.workspace }}"/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER="${{ github.workspace }}"/buildcache/bin/buildcache.exe "-DCMAKE_C_COMPILER=C:/Program Files/LLVM/bin/clang-cl.exe" "-DCMAKE_CXX_COMPILER=C:/Program Files/LLVM/bin/clang-cl.exe" .
) else (
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cmake -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER="${{ github.workspace }}"/buildcache/bin/buildcache.exe -DCMAKE_CXX_COMPILER_LAUNCHER="${{ github.workspace }}"/buildcache/bin/buildcache.exe .
)
- name: Build Project
working-directory: ./build
shell: cmd
run: |
call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
set CL=/MP
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
if "${{ matrix.compiler }}" == "msvc" (
set CL=/MP
)
nmake
- name: Run Tests
timeout-minutes: 5
env:
NEXT_DIR: ${{ github.workspace }}
FAKE_ISO_PATH: ${{ github.workspace }}/game/fake_iso.txt
run: ./build/bin/goalc-test.exe --gtest_color=yes --gtest_filter="-*MANUAL_TEST*"

9
.gitmodules vendored
View File

@ -1,9 +0,0 @@
[submodule "third-party/googletest"]
path = third-party/googletest
url = https://github.com/google/googletest.git
[submodule "third-party/zydis"]
path = third-party/zydis
url = https://github.com/zyantific/zydis.git
[submodule "third-party/glfw"]
path = third-party/glfw
url = https://github.com/glfw/glfw

View File

@ -68,31 +68,28 @@
"project" : "CMakeLists.txt",
"projectTarget" : "goalc.exe (bin\\goalc.exe)",
"name" : "Run - REPL",
"args" : [ "-auto-lt" ],
"env": {
"OPENGOAL_DECOMP_DIR": "jak1/"
}
"args" : [ "-auto-lt" ]
},
{
"type" : "default",
"project" : "CMakeLists.txt",
"projectTarget" : "decompiler.exe (bin\\decompiler.exe)",
"name" : "Run - Decompiler - Jak 1",
"args" : [ "${workspaceRoot}/decompiler/config/jak1_ntsc_black_label.jsonc", "${workspaceRoot}/iso_data/jak1", "${workspaceRoot}/decompiler_out/jak1"]
"args" : [ "${workspaceRoot}/decompiler/config/jak1_ntsc_black_label.jsonc", "${workspaceRoot}/iso_data", "${workspaceRoot}/decompiler_out"]
},
{
"type" : "default",
"project" : "CMakeLists.txt",
"projectTarget" : "decompiler.exe (bin\\decompiler.exe)",
"name" : "Run - Decompiler - Jak 1 PAL",
"args" : [ "${workspaceRoot}/decompiler/config/jak1_pal.jsonc", "${workspaceRoot}/iso_data/jak1pal", "${workspaceRoot}/decompiler_out/jak1pal"]
"args" : [ "${workspaceRoot}/decompiler/config/jak1_pal.jsonc", "${workspaceRoot}/iso_data", "${workspaceRoot}/decompiler_out"]
},
{
"type" : "default",
"project" : "CMakeLists.txt",
"projectTarget" : "decompiler.exe (bin\\decompiler.exe)",
"name" : "Run - Disassembler - Jak 1",
"args" : [ "${workspaceRoot}/decompiler/config/jak1_ntsc_black_label.jsonc", "${workspaceRoot}/iso_data/jak1", "${workspaceRoot}/decompiler_out/jak1_ir1"]
"args" : [ "${workspaceRoot}/decompiler/config/jak1_ntsc_black_label.jsonc", "${workspaceRoot}/iso_data", "${workspaceRoot}/decompiler_out/jak1_ir1"]
},
{
"type" : "default",

View File

@ -1,18 +1,36 @@
# Top Level CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 17)
project(jak)
include(CTest)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_BUILD_TYPE "Release")
endif()
set(CMAKE_CXX_STANDARD 17)
# Set default compile flags
# optimization level can be set here. You can overwrite these in a per-project basis if you want.
if(MSVC AND (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
message(STATUS "Clang on MSVC detected! Adding compile flags")
set(CMAKE_CXX_FLAGS
"-Xclang -fcxx-exceptions \
-Xclang -fexceptions \
-Xclang -std=c++17 \
-mfma -mavx2 \
-Wno-c++11-narrowing -W3 \
/arch:AVX")
# Set default compile flags for GCC
# optimization level can be set here. Note that game/ overwrites this for building game C++ code.
if(UNIX)
message(STATUS "GCC detected, adding compile flags")
# additional c++ flags for release mode for our projects
if(CMAKE_BUILD_TYPE MATCHES "Release")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /Ob2")
endif()
# linker flags
set(CMAKE_EXE_LINKER_FLAGS "/STACK:16000000,16384")
elseif(UNIX)
message(STATUS "GCC detected! Adding compile flags")
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} \
-Wall \
@ -28,16 +46,27 @@ if(UNIX)
-Wredundant-decls \
-Wshadow \
-Wsign-promo \
-fdiagnostics-color=always")
else()
-fdiagnostics-color=always \
-march=haswell")
# additional c++ flags for release mode for our projects
if(CMAKE_BUILD_TYPE MATCHES "Release")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
endif()
elseif(MSVC)
message(STATUS "MSVC detected!! Adding compile flags")
if(CMAKE_BUILD_TYPE MATCHES "Debug")
# This actually breaks some standard library things for some reason?
# message("Setting Flags to Enable Edit and Continue")
# set(CMAKE_CXX_FLAGS_DEBUG "/ZI")
endif()
set(CMAKE_CXX_FLAGS "/EHsc")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:16000000,16384")
endif(UNIX)
# c++ flags for all build types
set(CMAKE_CXX_FLAGS "/EHsc /utf-8 /arch:AVX")
# linker flags
set(CMAKE_EXE_LINKER_FLAGS "/STACK:16000000,16384")
endif()
if(WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
@ -100,9 +129,6 @@ add_subdirectory(third-party/glfw)
add_subdirectory(third-party/zstd)
# build libzip
add_subdirectory(third-party/11zip EXCLUDE_FROM_ALL)
# build imgui
include_directories(third-party/glad/include)
include_directories(third-party/glfw/include)

View File

@ -1,4 +1,4 @@
{
{
"version": 2,
"configurePresets": [
{
@ -17,11 +17,49 @@
}
},
{
"name": "Debug",
"displayName": "Windows x64 Debug",
"name": "Debug-clang",
"displayName": "Windows Debug (clang-cl)",
"description": "Target Windows with the Visual Studio development environment.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"binaryDir": "${sourceDir}/out/build/Debug",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"INSTALL_GTEST": "True",
"CMAKE_C_COMPILER": "clang-cl",
"CMAKE_CXX_COMPILER": "clang-cl"
},
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
},
{
"name": "Release-clang",
"displayName": "Windows Release (clang-cl)",
"description": "Target Windows with the Visual Studio development environment.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/Release",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"INSTALL_GTEST": "True",
"CMAKE_C_COMPILER": "clang-cl",
"CMAKE_CXX_COMPILER": "clang-cl"
},
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
},
{
"name": "Debug-msvc",
"displayName": "Windows Debug (msvc)",
"description": "Target Windows with the Visual Studio development environment.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/Debug",
"architecture": {
"value": "x64",
"strategy": "external"
@ -34,11 +72,11 @@
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
},
{
"name": "Release",
"displayName": "Windows x64 Release",
"name": "Release-msvc",
"displayName": "Windows Release (msvc)",
"description": "Target Windows with the Visual Studio development environment.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"binaryDir": "${sourceDir}/out/build/Release",
"architecture": {
"value": "x64",
"strategy": "external"

View File

@ -1,42 +1,40 @@
{
"configurations": [
{
"name": "Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"addressSanitizerEnabled": false,
"ctestCommandArgs": "",
"variables": [
{
"name": "INSTALL_GTEST",
"value": "True",
"type": "BOOL"
}
]
},
{
"name": "Release",
"generator": "Ninja",
"configurationType": "Release",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"addressSanitizerEnabled": false,
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ],
"variables": [
{
"name": "INSTALL_GTEST",
"value": "True",
"type": "BOOL"
}
]
}
]
"configurations": [
{
"name": "Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${configurationType}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"addressSanitizerEnabled": false
},
{
"name": "Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${configurationType}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"addressSanitizerEnabled": false
},
{
"name": "Debug (clang-cl)",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "clang_cl_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${configurationType}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"addressSanitizerEnabled": false
},
{
"name": "Release (clang-cl)",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [ "clang_cl_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${configurationType}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"addressSanitizerEnabled": false
}
]
}

View File

@ -51,9 +51,3 @@ if(WIN32)
else()
target_link_libraries(common stdc++fs)
endif()
if(UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
elseif(WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2")
endif()

View File

@ -167,17 +167,19 @@ Reader::Reader() {
m_valid_source_text_chars[(int)'\r'] = true;
// allow every character that gets transformed to something else
for (auto& remap : g_font_large_char_remap) {
for (auto rc : remap.chars) {
m_valid_source_text_chars[(u8)rc] = true;
for (auto& [version, font] : g_font_banks) {
for (auto& remap : *font->encode_info()) {
for (auto rc : remap.chars) {
m_valid_source_text_chars[(u8)rc] = true;
}
}
}
for (auto& remap : g_font_large_string_replace) {
for (auto rc : remap.to) {
m_valid_source_text_chars[(u8)rc] = true;
}
for (auto rc : remap.from) {
m_valid_source_text_chars[(u8)rc] = true;
for (auto& remap : *font->replace_info()) {
for (auto rc : remap.to) {
m_valid_source_text_chars[(u8)rc] = true;
}
for (auto rc : remap.from) {
m_valid_source_text_chars[(u8)rc] = true;
}
}
}
m_valid_source_text_chars[0] = false;

View File

@ -7,19 +7,167 @@
* Always verify the encoding if string detection suddenly goes awry.
*/
#include <algorithm>
#include "FontUtils.h"
#include "third-party/fmt/core.h"
#include <algorithm>
#include <functional>
#include <map>
#include <unordered_set>
GameTextFontBank::GameTextFontBank(GameTextVersion version,
std::vector<EncodeInfo>* encode_info,
std::vector<ReplaceInfo>* replace_info,
std::unordered_set<char>* passthrus)
: m_version(version),
m_encode_info(encode_info),
m_replace_info(replace_info),
m_passthrus(passthrus) {
std::sort(
m_encode_info->begin(), m_encode_info->end(),
[](const EncodeInfo& a, const EncodeInfo& b) { return a.bytes.size() > b.bytes.size(); });
std::sort(
m_replace_info->begin(), m_replace_info->end(),
[](const ReplaceInfo& a, const ReplaceInfo& b) { return a.from.size() > b.from.size(); });
}
/*!
* Remaps UTF-8 characters to the appropriate character fit for the game's large font.
* It is unfortunately quite large.
* Finds a remap info that best matches the byte sequence (is the longest match).
*/
std::vector<RemapInfo> g_font_large_char_remap = {
const EncodeInfo* GameTextFontBank::find_encode_to_utf8(const char* in) const {
const EncodeInfo* best_info = nullptr;
for (auto& info : *m_encode_info) {
if (info.bytes.size() == 0)
continue;
bool found = true;
for (int i = 0; found && i < (int)info.bytes.size(); ++i) {
if (uint8_t(in[i]) != info.bytes.at(i)) {
found = false;
}
}
if (found && (!best_info || info.chars.length() > best_info->chars.length())) {
best_info = &info;
}
}
return best_info;
}
/*!
* Finds a remap info that best matches the character sequence (is the longest match).
*/
const EncodeInfo* GameTextFontBank::find_encode_to_game(const std::string& in, int off) const {
const EncodeInfo* best_info = nullptr;
for (auto& info : *m_encode_info) {
if (info.chars.length() == 0)
continue;
bool found = true;
for (int i = 0; found && i < (int)info.chars.length() && i + off < in.size(); ++i) {
if (in.at(i + off) != info.chars.at(i)) {
found = false;
}
}
if (found && (!best_info || info.chars.length() > best_info->chars.length())) {
best_info = &info;
}
}
return best_info;
}
/*!
* Try to replace specific substrings with better variants.
* These are for hiding confusing text transforms.
*/
std::string GameTextFontBank::replace_to_utf8(std::string& str) const {
for (auto& info : *m_replace_info) {
auto pos = str.find(info.from);
while (pos != std::string::npos) {
str.replace(pos, info.from.size(), info.to);
pos = str.find(info.from, pos + info.to.size());
}
}
return str;
}
std::string GameTextFontBank::replace_to_game(std::string& str) const {
for (auto& info : *m_replace_info) {
auto pos = str.find(info.to);
while (pos != std::string::npos) {
str.replace(pos, info.to.size(), info.from);
pos = str.find(info.to, pos + info.from.size());
}
}
return str;
}
std::string GameTextFontBank::encode_utf8_to_game(std::string& str) const {
std::string new_str;
for (int i = 0; i < str.length();) {
auto remap = find_encode_to_game(str, i);
if (!remap) {
new_str.push_back(str.at(i));
i += 1;
} else {
for (auto b : remap->bytes) {
new_str.push_back(b);
}
i += remap->chars.length();
}
}
str = new_str;
return str;
}
/*!
* Turn a normal readable string into a string readable in the Jak 1 font encoding.
*/
std::string GameTextFontBank::convert_utf8_to_game(std::string str) const {
replace_to_game(str);
encode_utf8_to_game(str);
return str;
}
/*!
* Convert a string from the game-text font encoding to something normal.
* Unprintable characters become escape sequences, including tab and newline.
*/
std::string GameTextFontBank::convert_game_to_utf8(const char* in) const {
std::string result;
while (*in) {
auto remap = find_encode_to_utf8(in);
if (remap != nullptr) {
result.append(remap->chars);
in += remap->bytes.size() - 1;
} else if (((*in >= '0' && *in <= '9') || (*in >= 'A' && *in <= 'Z') ||
m_passthrus->find(*in) != m_passthrus->end()) &&
*in != '\\') {
result.push_back(*in);
} else if (*in == '\n') {
result += "\\n";
} else if (*in == '\t') {
result += "\\t";
} else if (*in == '\\') {
result += "\\\\";
} else {
result += fmt::format("\\c{:02x}", uint8_t(*in));
}
in++;
}
return replace_to_utf8(result);
}
/*!
* ===========================
* GAME TEXT FONT BANK - JAK 1
* ===========================
* This font is used in:
* - Jak & Daxter: The Precursor Legacy (Black Label)
*/
static std::unordered_set<char> passthrus = {'~', ' ', ',', '.', '-', '+', '(', ')', '!', ':', '?',
'=', '%', '*', '/', '#', ';', '<', '>', '@', '[', '_'};
static std::vector<EncodeInfo> g_encode_info_jak1 = {
// random
{"ˇ", {0x10}}, // caron
{"`", {0x11}}, // grave accent
@ -236,10 +384,8 @@ std::vector<RemapInfo> g_font_large_char_remap = {
{"", {1, 0xb0}}, // fune
{"", {1, 0xb1}}, // trademark
};
/*!
* Replaces specific UTF-8 strings with more readable variants.
*/
std::vector<ReplaceInfo> g_font_large_string_replace = {
static std::vector<ReplaceInfo> g_replace_info_jak1 = {
// \" -> " (confusing)
{"\\\"", "\""},
@ -350,129 +496,25 @@ std::vector<ReplaceInfo> g_font_large_string_replace = {
{"~Y~22L<~Z~Y~24L#~Z~Y~1L>~Z~Y~23L[~Z~+26H", "<PAD_SQUARE>"}, // custom
};
static bool remaps_inited = false;
static void init_remaps() {
if (!remaps_inited) {
std::sort(
g_font_large_char_remap.begin(), g_font_large_char_remap.end(),
[](const RemapInfo& a, const RemapInfo& b) { return a.bytes.size() > b.bytes.size(); });
std::sort(
g_font_large_string_replace.begin(), g_font_large_string_replace.end(),
[](const ReplaceInfo& a, const ReplaceInfo& b) { return a.from.size() > b.from.size(); });
remaps_inited = true;
}
}
GameTextFontBank g_font_bank_jak1(GameTextVersion::JAK1_V1,
&g_encode_info_jak1,
&g_replace_info_jak1,
&passthrus);
/*!
* Convert Jak 1 character encoding to something readable.
* ========================
* GAME TEXT FONT BANK LIST
* ========================
* The list of available font banks and a couple of helper functions.
*/
RemapInfo* jak1_bytes_to_utf8(const char* in) {
init_remaps();
for (auto& info : g_font_large_char_remap) {
if (info.bytes.size() == 0)
continue;
bool found = true;
for (int i = 0; found && i < (int)info.bytes.size(); ++i) {
if (uint8_t(in[i]) != info.bytes.at(i)) {
found = false;
}
}
if (found) {
return &info;
}
}
return nullptr;
std::map<GameTextVersion, GameTextFontBank*> g_font_banks = {
{GameTextVersion::JAK1_V1, &g_font_bank_jak1}};
const GameTextFontBank* get_font_bank(GameTextVersion version) {
return g_font_banks.at(version);
}
/*!
* Try to replace specific substrings with better variants.
* These are for hiding confusing text transforms.
*/
std::string& jak1_trans_to_utf8(std::string& str) {
init_remaps();
for (auto& info : g_font_large_string_replace) {
auto pos = str.find(info.from);
while (pos != std::string::npos) {
str.replace(pos, info.from.size(), info.to);
pos = str.find(info.from, pos + info.to.size());
}
}
return str;
}
std::string& utf8_trans_to_jak1(std::string& str) {
init_remaps();
for (auto& info : g_font_large_string_replace) {
auto pos = str.find(info.to);
while (pos != std::string::npos) {
str.replace(pos, info.to.size(), info.from);
pos = str.find(info.to, pos + info.from.size());
}
}
return str;
}
std::string& utf8_bytes_to_jak1(std::string& str) {
// find all instances of characters and save them
std::map<size_t, const RemapInfo*, std::greater<size_t>> remap_cache;
for (auto& info : g_font_large_char_remap) {
auto pos = str.find(info.chars);
while (pos != std::string::npos) {
remap_cache[pos] = &info;
pos = str.find(info.chars, pos + info.chars.size());
}
}
// go through the string backwards and replace saved chars
for (auto& remap : remap_cache) {
std::string temp;
for (auto b : remap.second->bytes) {
temp.push_back(b);
}
str.replace(remap.first, remap.second->chars.size(), temp);
}
return str;
}
/*!
* Turn a normal readable string into a string readable in the Jak 1 font encoding.
*/
std::string convert_to_jak1_encoding(std::string str) {
utf8_trans_to_jak1(str);
utf8_bytes_to_jak1(str);
return str;
}
static const std::unordered_set<char> passthrus = {'~', ' ', ',', '.', '-', '+', '(', ')',
'!', ':', '?', '=', '%', '*', '/', '#',
';', '<', '>', '@', '[', '_'};
/*!
* Convert a string from the Jak 1 large font encoding to something normal.
* Unprintable characters become escape sequences, including tab and newline.
*/
std::string convert_from_jak1_encoding(const char* in) {
std::string result;
while (*in) {
auto remap = jak1_bytes_to_utf8(in);
if (remap != nullptr) {
result.append(remap->chars);
in += remap->bytes.size() - 1;
} else if (((*in >= '0' && *in <= '9') || (*in >= 'A' && *in <= 'Z') ||
passthrus.find(*in) != passthrus.end()) &&
*in != '\\') {
result.push_back(*in);
} else if (*in == '\n') {
result += "\\n";
} else if (*in == '\t') {
result += "\\t";
} else if (*in == '\\') {
result += "\\\\";
} else {
result += fmt::format("\\c{:02x}", uint8_t(*in));
}
in++;
}
return jak1_trans_to_utf8(result);
bool font_bank_exists(GameTextVersion version) {
return g_font_banks.find(version) != g_font_banks.cend();
}

View File

@ -13,28 +13,66 @@
#include <string>
#include <vector>
#include <unordered_set>
#include <map>
struct RemapInfo {
// version of the game text file's text encoding. Not real, but we need to differentiate them
// somehow, since the encoding changes.
enum class GameTextVersion {
JAK1_V1 = 10, // jak 1 (ntsc-u v1)
JAK1_V2 = 11, // jak 1 (pal+)
JAK2 = 20, // jak 2
JAK3 = 30, // jak 3
JAKX = 40 // jak x
};
/*!
* What bytes a set of characters (UTF-8) correspond to. You can convert to and fro.
*/
struct EncodeInfo {
std::string chars;
std::vector<u8> bytes;
};
/*!
* Replace an unconventional string of characters with/from something more readable.
* For example, turns Ñ into N + ~ + a bunch of modifiers.
*/
struct ReplaceInfo {
std::string from;
std::string to;
};
/*!
* Remaps UTF-8 characters to the appropriate character fit for the game's large font.
* It is unfortunately quite large.
* All the information to convert UTF-8 text into game text.
*/
extern std::vector<RemapInfo> g_font_large_char_remap;
/*!
* Replaces specific UTF-8 strings with more readable variants.
*/
extern std::vector<ReplaceInfo> g_font_large_string_replace;
class GameTextFontBank {
GameTextVersion m_version; // the version of the game text. we determine this ourselves.
std::vector<EncodeInfo>* m_encode_info;
std::vector<ReplaceInfo>* m_replace_info;
std::unordered_set<char>* m_passthrus;
RemapInfo* jak1_bytes_to_utf8(const char* in);
std::string& jak1_trans_to_utf8(std::string& str);
const EncodeInfo* find_encode_to_utf8(const char* in) const;
const EncodeInfo* find_encode_to_game(const std::string& in, int off = 0) const;
std::string convert_to_jak1_encoding(std::string str);
std::string convert_from_jak1_encoding(const char* in);
std::string replace_to_utf8(std::string& str) const;
std::string replace_to_game(std::string& str) const;
std::string encode_utf8_to_game(std::string& str) const;
public:
GameTextFontBank(GameTextVersion version,
std::vector<EncodeInfo>* encode_info,
std::vector<ReplaceInfo>* replace_info,
std::unordered_set<char>* passthrus);
const std::vector<EncodeInfo>* encode_info() const { return m_encode_info; }
const std::vector<ReplaceInfo>* replace_info() const { return m_replace_info; }
const std::unordered_set<char>* passthrus() const { return m_passthrus; }
std::string convert_utf8_to_game(std::string str) const;
std::string convert_game_to_utf8(const char* in) const;
};
extern std::map<GameTextVersion, GameTextFontBank*> g_font_banks;
const GameTextFontBank* get_font_bank(GameTextVersion version);
bool font_bank_exists(GameTextVersion version);

View File

@ -79,12 +79,6 @@ add_library(
config.cpp)
if (UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
elseif (WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2")
endif ()
target_link_libraries(decomp
lzokay
common

View File

@ -2435,9 +2435,9 @@
;; - Types
(deftype curve (structure)
((cverts pointer :offset-assert 0)
((cverts (inline-array vector) :offset-assert 0)
(num-cverts int32 :offset-assert 4)
(knots (inline-array vector) :offset-assert 8)
(knots (pointer float) :offset-assert 8)
(num-knots int32 :offset-assert 12)
(length float :offset-assert 16)
)
@ -2756,13 +2756,13 @@
(define-extern vector-circle-tangent-new (function vector vector vector vector none))
(define-extern vector-circle-tangent (function vector vector vector vector none))
(define-extern find-knot-span (function int int float (inline-array vector) int))
(define-extern calculate-basis-functions-vector! (function (pointer float) int float (pointer float) (pointer float)))
(define-extern calculate-basis-functions-vector! (function vector int float (pointer float) vector))
(define-extern curve-closest-point (function curve vector float float int float float))
(define-extern vector-plane-distance (function vector plane vector float))
(define-extern curve-get-pos! (function vector float curve vector))
(define-extern curve-evaluate! (function vector float pointer int (inline-array vector) int vector))
(define-extern curve-evaluate! (function vector float (inline-array vector) int (pointer float) int vector))
(define-extern curve-length (function curve float))
(define-extern curve-copy! (function curve curve curve))
@ -6115,7 +6115,7 @@
;; - Types
(deftype frame-stats (structure)
((field-time uint64 2 :offset-assert 0)
((field-time int64 2 :offset-assert 0)
(field int32 :offset-assert 16)
)
:method-count-assert 9
@ -16308,7 +16308,7 @@
(define-extern add-debug-light (function symbol bucket-id light vector string symbol))
(define-extern add-debug-text-3d (function symbol bucket-id string vector font-color vector2h symbol))
(define-extern add-debug-x (function symbol bucket-id vector rgba symbol))
(define-extern add-debug-curve (function symbol bucket-id pointer int (inline-array vector) int rgba symbol))
(define-extern add-debug-curve (function symbol bucket-id (inline-array vector) int (pointer float) int rgba symbol))
(define-extern add-debug-sphere (function symbol bucket-id vector float rgba symbol))
(define-extern get-debug-text-3d (function debug-text-3d))
(define-extern internal-draw-debug-text-3d (function bucket-id string vector font-color vector2h pointer))
@ -17469,9 +17469,9 @@
(:methods
(current-task (_type_) game-task 9)
(current-status (_type_) task-status 10)
(close-current! (_type_) none 11)
(close-status! (_type_ task-status) int 12)
(first-any (_type_ symbol) int 13)
(close-current! (_type_) game-task 11)
(close-status! (_type_ task-status) game-task 12)
(first-any (_type_ symbol) game-task 13)
(reset! (_type_ symbol symbol) int 14)
(closed? (_type_ game-task task-status) symbol 15)
(get-reminder (_type_ int) int 16)
@ -17578,7 +17578,7 @@
(define-extern level-hint-spawn (function game-text-id string entity process-tree game-task none))
(define-extern get-game-count (function int count-info))
(define-extern activate-orb-all (function int int))
(define-extern close-specific-task! (function game-task task-status int))
(define-extern close-specific-task! (function game-task task-status game-task))
(define-extern reset-all-hint-controls (function none))
(define-extern reset-actors (function symbol none))
(define-extern set-blackout-frames (function int int))
@ -21193,14 +21193,14 @@
;; - Functions
(define-extern task-status->string (function task-status string))
(define-extern open-specific-task! (function game-task task-status int))
(define-extern open-specific-task! (function game-task task-status game-task))
(define-extern task-exists? (function game-task task-status symbol))
(define-extern sages-kidnapped? (function symbol))
;; - Symbols
(define-extern *null-task-control* task-control)
(define-extern *task-controls* (array basic))
(define-extern *task-controls* (array task-control))
(define-extern *assistant-tasks* task-control)
(define-extern *assistant-village2-tasks* task-control)
(define-extern *gambler-tasks* task-control)

View File

@ -15,494 +15,494 @@
"process-drawable": [[29, "(function string symbol)"]],
"task-control": [
[9, "(function task-control symbol)"],
[10, "(function task-control symbol)"],
[11, "(function task-control symbol)"],
[12, "(function task-control symbol)"],
[13, "(function task-control symbol)"],
[14, "(function task-control symbol)"],
[15, "(function task-control symbol)"],
[16, "(function task-control symbol)"],
[17, "(function task-control symbol)"],
[18, "(function task-control symbol)"],
[19, "(function task-control symbol)"],
[20, "(function task-control symbol)"],
[21, "(function task-control symbol)"],
[22, "(function task-control symbol)"],
[23, "(function task-control symbol)"],
[24, "(function task-control symbol)"],
[25, "(function task-control symbol)"],
[26, "(function task-control symbol)"],
[27, "(function task-control symbol)"],
[28, "(function task-control symbol)"],
[29, "(function task-control symbol)"],
[30, "(function task-control symbol)"],
[31, "(function task-control symbol)"],
[32, "(function task-control symbol)"],
[33, "(function task-control symbol)"],
[34, "(function task-control symbol)"],
[35, "(function task-control symbol)"],
[36, "(function task-control symbol)"],
[37, "(function task-control symbol)"],
[38, "(function task-control symbol)"],
[39, "(function task-control symbol)"],
[40, "(function task-control symbol)"],
[41, "(function task-control symbol)"],
[42, "(function task-control symbol)"],
[43, "(function task-control symbol)"],
[44, "(function task-control symbol)"],
[45, "(function task-control symbol)"],
[46, "(function task-control symbol)"],
[47, "(function task-control symbol)"],
[48, "(function task-control symbol)"],
[49, "(function task-control symbol)"],
[50, "(function task-control symbol)"],
[51, "(function task-control symbol)"],
[52, "(function task-control symbol)"],
[53, "(function task-control symbol)"],
[54, "(function task-control symbol)"],
[55, "(function task-control symbol)"],
[56, "(function task-control symbol)"],
[57, "(function task-control symbol)"],
[58, "(function task-control symbol)"],
[59, "(function task-control symbol)"],
[60, "(function task-control symbol)"],
[61, "(function task-control symbol)"],
[62, "(function task-control symbol)"],
[63, "(function task-control symbol)"],
[64, "(function task-control symbol)"],
[65, "(function task-control symbol)"],
[66, "(function task-control symbol)"],
[67, "(function task-control symbol)"],
[68, "(function task-control symbol)"],
[69, "(function task-control symbol)"],
[70, "(function task-control symbol)"],
[71, "(function task-control symbol)"],
[72, "(function task-control symbol)"],
[73, "(function task-control symbol)"],
[74, "(function task-control symbol)"],
[75, "(function task-control symbol)"],
[76, "(function task-control symbol)"],
[77, "(function task-control symbol)"],
[78, "(function task-control symbol)"],
[79, "(function task-control symbol)"],
[80, "(function task-control symbol)"],
[81, "(function task-control symbol)"],
[82, "(function task-control symbol)"],
[83, "(function task-control symbol)"],
[84, "(function task-control symbol)"],
[85, "(function task-control symbol)"],
[86, "(function task-control symbol)"],
[87, "(function task-control symbol)"],
[88, "(function task-control symbol)"],
[89, "(function task-control symbol)"],
[90, "(function task-control symbol)"],
[91, "(function task-control symbol)"],
[92, "(function task-control symbol)"],
[93, "(function task-control symbol)"],
[94, "(function task-control symbol)"],
[95, "(function task-control symbol)"],
[96, "(function task-control symbol)"],
[97, "(function task-control symbol)"],
[98, "(function task-control symbol)"],
[99, "(function task-control symbol)"],
[100, "(function task-control symbol)"],
[101, "(function task-control symbol)"],
[102, "(function task-control symbol)"],
[103, "(function task-control symbol)"],
[104, "(function task-control symbol)"],
[105, "(function task-control symbol)"],
[106, "(function task-control symbol)"],
[107, "(function task-control symbol)"],
[108, "(function task-control symbol)"],
[109, "(function task-control symbol)"],
[110, "(function task-control symbol)"],
[111, "(function task-control symbol)"],
[112, "(function task-control symbol)"],
[113, "(function task-control symbol)"],
[114, "(function task-control symbol)"],
[115, "(function task-control symbol)"],
[116, "(function task-control symbol)"],
[117, "(function task-control symbol)"],
[118, "(function task-control symbol)"],
[119, "(function task-control symbol)"],
[120, "(function task-control symbol)"],
[121, "(function task-control symbol)"],
[122, "(function task-control symbol)"],
[123, "(function task-control symbol)"],
[124, "(function task-control symbol)"],
[125, "(function task-control symbol)"],
[126, "(function task-control symbol)"],
[127, "(function task-control symbol)"],
[128, "(function task-control symbol)"],
[129, "(function task-control symbol)"],
[130, "(function task-control symbol)"],
[131, "(function task-control symbol)"],
[132, "(function task-control symbol)"],
[133, "(function task-control symbol)"],
[134, "(function task-control symbol)"],
[135, "(function task-control symbol)"],
[136, "(function task-control symbol)"],
[137, "(function task-control symbol)"],
[138, "(function task-control symbol)"],
[139, "(function task-control symbol)"],
[140, "(function task-control symbol)"],
[141, "(function task-control symbol)"],
[142, "(function task-control symbol)"],
[143, "(function task-control symbol)"],
[144, "(function task-control symbol)"],
[145, "(function task-control symbol)"],
[146, "(function task-control symbol)"],
[147, "(function task-control symbol)"],
[148, "(function task-control symbol)"],
[149, "(function task-control symbol)"],
[150, "(function task-control symbol)"],
[151, "(function task-control symbol)"],
[152, "(function task-control symbol)"],
[153, "(function task-control symbol)"],
[154, "(function task-control symbol)"],
[155, "(function task-control symbol)"],
[156, "(function task-control symbol)"],
[157, "(function task-control symbol)"],
[158, "(function task-control symbol)"],
[159, "(function task-control symbol)"],
[160, "(function task-control symbol)"],
[161, "(function task-control symbol)"],
[162, "(function task-control symbol)"],
[163, "(function task-control symbol)"],
[164, "(function task-control symbol)"],
[165, "(function task-control symbol)"],
[166, "(function task-control symbol)"],
[167, "(function task-control symbol)"],
[168, "(function task-control symbol)"],
[169, "(function task-control symbol)"],
[170, "(function task-control symbol)"],
[171, "(function task-control symbol)"],
[172, "(function task-control symbol)"],
[173, "(function task-control symbol)"],
[174, "(function task-control symbol)"],
[175, "(function task-control symbol)"],
[176, "(function task-control symbol)"],
[177, "(function task-control symbol)"],
[178, "(function task-control symbol)"],
[179, "(function task-control symbol)"],
[180, "(function task-control symbol)"],
[181, "(function task-control symbol)"],
[182, "(function task-control symbol)"],
[183, "(function task-control symbol)"],
[184, "(function task-control symbol)"],
[185, "(function task-control symbol)"],
[186, "(function task-control symbol)"],
[187, "(function task-control symbol)"],
[188, "(function task-control symbol)"],
[189, "(function task-control symbol)"],
[190, "(function task-control symbol)"],
[191, "(function task-control symbol)"],
[192, "(function task-control symbol)"],
[193, "(function task-control symbol)"],
[194, "(function task-control symbol)"],
[195, "(function task-control symbol)"],
[196, "(function task-control symbol)"],
[197, "(function task-control symbol)"],
[198, "(function task-control symbol)"],
[199, "(function task-control symbol)"],
[200, "(function task-control symbol)"],
[201, "(function task-control symbol)"],
[202, "(function task-control symbol)"],
[203, "(function task-control symbol)"],
[204, "(function task-control symbol)"],
[205, "(function task-control symbol)"],
[206, "(function task-control symbol)"],
[207, "(function task-control symbol)"],
[208, "(function task-control symbol)"],
[209, "(function task-control symbol)"],
[210, "(function task-control symbol)"],
[211, "(function task-control symbol)"],
[212, "(function task-control symbol)"],
[213, "(function task-control symbol)"],
[214, "(function task-control symbol)"],
[215, "(function task-control symbol)"],
[216, "(function task-control symbol)"],
[217, "(function task-control symbol)"],
[218, "(function task-control symbol)"],
[219, "(function task-control symbol)"],
[220, "(function task-control symbol)"],
[221, "(function task-control symbol)"],
[222, "(function task-control symbol)"],
[223, "(function task-control symbol)"],
[224, "(function task-control symbol)"],
[225, "(function task-control symbol)"],
[226, "(function task-control symbol)"],
[227, "(function task-control symbol)"],
[228, "(function task-control symbol)"],
[229, "(function task-control symbol)"],
[230, "(function task-control symbol)"],
[231, "(function task-control symbol)"],
[232, "(function task-control symbol)"],
[233, "(function task-control symbol)"],
[234, "(function task-control symbol)"],
[235, "(function task-control symbol)"],
[236, "(function task-control symbol)"],
[237, "(function task-control symbol)"],
[238, "(function task-control symbol)"],
[239, "(function task-control symbol)"],
[240, "(function task-control symbol)"],
[241, "(function task-control symbol)"],
[242, "(function task-control symbol)"],
[243, "(function task-control symbol)"],
[244, "(function task-control symbol)"],
[245, "(function task-control symbol)"],
[246, "(function task-control symbol)"],
[247, "(function task-control symbol)"],
[248, "(function task-control symbol)"],
[249, "(function task-control symbol)"],
[250, "(function task-control symbol)"],
[251, "(function task-control symbol)"],
[252, "(function task-control symbol)"],
[253, "(function task-control symbol)"],
[254, "(function task-control symbol)"],
[255, "(function task-control symbol)"],
[256, "(function task-control symbol)"],
[257, "(function task-control symbol)"],
[258, "(function task-control symbol)"],
[259, "(function task-control symbol)"],
[260, "(function task-control symbol)"],
[261, "(function task-control symbol)"],
[262, "(function task-control symbol)"],
[263, "(function task-control symbol)"],
[264, "(function task-control symbol)"],
[265, "(function task-control symbol)"],
[266, "(function task-control symbol)"],
[267, "(function task-control symbol)"],
[268, "(function task-control symbol)"],
[269, "(function task-control symbol)"],
[270, "(function task-control symbol)"],
[271, "(function task-control symbol)"],
[272, "(function task-control symbol)"],
[273, "(function task-control symbol)"],
[274, "(function task-control symbol)"],
[275, "(function task-control symbol)"],
[276, "(function task-control symbol)"],
[277, "(function task-control symbol)"],
[278, "(function task-control symbol)"],
[279, "(function task-control symbol)"],
[280, "(function task-control symbol)"],
[281, "(function task-control symbol)"],
[282, "(function task-control symbol)"],
[283, "(function task-control symbol)"],
[284, "(function task-control symbol)"],
[285, "(function task-control symbol)"],
[286, "(function task-control symbol)"],
[287, "(function task-control symbol)"],
[288, "(function task-control symbol)"],
[289, "(function task-control symbol)"],
[290, "(function task-control symbol)"],
[291, "(function task-control symbol)"],
[292, "(function task-control symbol)"],
[293, "(function task-control symbol)"],
[294, "(function task-control symbol)"],
[295, "(function task-control symbol)"],
[296, "(function task-control symbol)"],
[297, "(function task-control symbol)"],
[298, "(function task-control symbol)"],
[299, "(function task-control symbol)"],
[300, "(function task-control symbol)"],
[301, "(function task-control symbol)"],
[302, "(function task-control symbol)"],
[303, "(function task-control symbol)"],
[304, "(function task-control symbol)"],
[305, "(function task-control symbol)"],
[306, "(function task-control symbol)"],
[307, "(function task-control symbol)"],
[308, "(function task-control symbol)"],
[309, "(function task-control symbol)"],
[310, "(function task-control symbol)"],
[311, "(function task-control symbol)"],
[312, "(function task-control symbol)"],
[313, "(function task-control symbol)"],
[314, "(function task-control symbol)"],
[315, "(function task-control symbol)"],
[316, "(function task-control symbol)"],
[317, "(function task-control symbol)"],
[318, "(function task-control symbol)"],
[319, "(function task-control symbol)"],
[320, "(function task-control symbol)"],
[321, "(function task-control symbol)"],
[322, "(function task-control symbol)"],
[323, "(function task-control symbol)"],
[324, "(function task-control symbol)"],
[325, "(function task-control symbol)"],
[326, "(function task-control symbol)"],
[327, "(function task-control symbol)"],
[328, "(function task-control symbol)"],
[329, "(function task-control symbol)"],
[330, "(function task-control symbol)"],
[331, "(function task-control symbol)"],
[332, "(function task-control symbol)"],
[333, "(function task-control symbol)"],
[334, "(function task-control symbol)"],
[335, "(function task-control symbol)"],
[9, "(function task-control symbol :behavior process-taskable)"],
[10, "(function task-control symbol :behavior process-taskable)"],
[11, "(function task-control symbol :behavior process-taskable)"],
[12, "(function task-control symbol :behavior process-taskable)"],
[13, "(function task-control symbol :behavior process-taskable)"],
[14, "(function task-control symbol :behavior process-taskable)"],
[15, "(function task-control symbol :behavior process-taskable)"],
[16, "(function task-control symbol :behavior process-taskable)"],
[17, "(function task-control symbol :behavior process-taskable)"],
[18, "(function task-control symbol :behavior process-taskable)"],
[19, "(function task-control symbol :behavior process-taskable)"],
[20, "(function task-control symbol :behavior process-taskable)"],
[21, "(function task-control symbol :behavior process-taskable)"],
[22, "(function task-control symbol :behavior process-taskable)"],
[23, "(function task-control symbol :behavior process-taskable)"],
[24, "(function task-control symbol :behavior process-taskable)"],
[25, "(function task-control symbol :behavior process-taskable)"],
[26, "(function task-control symbol :behavior process-taskable)"],
[27, "(function task-control symbol :behavior process-taskable)"],
[28, "(function task-control symbol :behavior process-taskable)"],
[29, "(function task-control symbol :behavior process-taskable)"],
[30, "(function task-control symbol :behavior process-taskable)"],
[31, "(function task-control symbol :behavior process-taskable)"],
[32, "(function task-control symbol :behavior process-taskable)"],
[33, "(function task-control symbol :behavior process-taskable)"],
[34, "(function task-control symbol :behavior process-taskable)"],
[35, "(function task-control symbol :behavior process-taskable)"],
[36, "(function task-control symbol :behavior process-taskable)"],
[37, "(function task-control symbol :behavior process-taskable)"],
[38, "(function task-control symbol :behavior process-taskable)"],
[39, "(function task-control symbol :behavior process-taskable)"],
[40, "(function task-control symbol :behavior process-taskable)"],
[41, "(function task-control symbol :behavior process-taskable)"],
[42, "(function task-control symbol :behavior process-taskable)"],
[43, "(function task-control symbol :behavior process-taskable)"],
[44, "(function task-control symbol :behavior process-taskable)"],
[45, "(function task-control symbol :behavior process-taskable)"],
[46, "(function task-control symbol :behavior process-taskable)"],
[47, "(function task-control symbol :behavior process-taskable)"],
[48, "(function task-control symbol :behavior process-taskable)"],
[49, "(function task-control symbol :behavior process-taskable)"],
[50, "(function task-control symbol :behavior process-taskable)"],
[51, "(function task-control symbol :behavior process-taskable)"],
[52, "(function task-control symbol :behavior process-taskable)"],
[53, "(function task-control symbol :behavior process-taskable)"],
[54, "(function task-control symbol :behavior process-taskable)"],
[55, "(function task-control symbol :behavior process-taskable)"],
[56, "(function task-control symbol :behavior process-taskable)"],
[57, "(function task-control symbol :behavior process-taskable)"],
[58, "(function task-control symbol :behavior process-taskable)"],
[59, "(function task-control symbol :behavior process-taskable)"],
[60, "(function task-control symbol :behavior process-taskable)"],
[61, "(function task-control symbol :behavior process-taskable)"],
[62, "(function task-control symbol :behavior process-taskable)"],
[63, "(function task-control symbol :behavior process-taskable)"],
[64, "(function task-control symbol :behavior process-taskable)"],
[65, "(function task-control symbol :behavior process-taskable)"],
[66, "(function task-control symbol :behavior process-taskable)"],
[67, "(function task-control symbol :behavior process-taskable)"],
[68, "(function task-control symbol :behavior process-taskable)"],
[69, "(function task-control symbol :behavior process-taskable)"],
[70, "(function task-control symbol :behavior process-taskable)"],
[71, "(function task-control symbol :behavior process-taskable)"],
[72, "(function task-control symbol :behavior process-taskable)"],
[73, "(function task-control symbol :behavior process-taskable)"],
[74, "(function task-control symbol :behavior process-taskable)"],
[75, "(function task-control symbol :behavior process-taskable)"],
[76, "(function task-control symbol :behavior process-taskable)"],
[77, "(function task-control symbol :behavior process-taskable)"],
[78, "(function task-control symbol :behavior process-taskable)"],
[79, "(function task-control symbol :behavior process-taskable)"],
[80, "(function task-control symbol :behavior process-taskable)"],
[81, "(function task-control symbol :behavior process-taskable)"],
[82, "(function task-control symbol :behavior process-taskable)"],
[83, "(function task-control symbol :behavior process-taskable)"],
[84, "(function task-control symbol :behavior process-taskable)"],
[85, "(function task-control symbol :behavior process-taskable)"],
[86, "(function task-control symbol :behavior process-taskable)"],
[87, "(function task-control symbol :behavior process-taskable)"],
[88, "(function task-control symbol :behavior process-taskable)"],
[89, "(function task-control symbol :behavior process-taskable)"],
[90, "(function task-control symbol :behavior process-taskable)"],
[91, "(function task-control symbol :behavior process-taskable)"],
[92, "(function task-control symbol :behavior process-taskable)"],
[93, "(function task-control symbol :behavior process-taskable)"],
[94, "(function task-control symbol :behavior process-taskable)"],
[95, "(function task-control symbol :behavior process-taskable)"],
[96, "(function task-control symbol :behavior process-taskable)"],
[97, "(function task-control symbol :behavior process-taskable)"],
[98, "(function task-control symbol :behavior process-taskable)"],
[99, "(function task-control symbol :behavior process-taskable)"],
[100, "(function task-control symbol :behavior process-taskable)"],
[101, "(function task-control symbol :behavior process-taskable)"],
[102, "(function task-control symbol :behavior process-taskable)"],
[103, "(function task-control symbol :behavior process-taskable)"],
[104, "(function task-control symbol :behavior process-taskable)"],
[105, "(function task-control symbol :behavior process-taskable)"],
[106, "(function task-control symbol :behavior process-taskable)"],
[107, "(function task-control symbol :behavior process-taskable)"],
[108, "(function task-control symbol :behavior process-taskable)"],
[109, "(function task-control symbol :behavior process-taskable)"],
[110, "(function task-control symbol :behavior process-taskable)"],
[111, "(function task-control symbol :behavior process-taskable)"],
[112, "(function task-control symbol :behavior process-taskable)"],
[113, "(function task-control symbol :behavior process-taskable)"],
[114, "(function task-control symbol :behavior process-taskable)"],
[115, "(function task-control symbol :behavior process-taskable)"],
[116, "(function task-control symbol :behavior process-taskable)"],
[117, "(function task-control symbol :behavior process-taskable)"],
[118, "(function task-control symbol :behavior process-taskable)"],
[119, "(function task-control symbol :behavior process-taskable)"],
[120, "(function task-control symbol :behavior process-taskable)"],
[121, "(function task-control symbol :behavior process-taskable)"],
[122, "(function task-control symbol :behavior process-taskable)"],
[123, "(function task-control symbol :behavior process-taskable)"],
[124, "(function task-control symbol :behavior process-taskable)"],
[125, "(function task-control symbol :behavior process-taskable)"],
[126, "(function task-control symbol :behavior process-taskable)"],
[127, "(function task-control symbol :behavior process-taskable)"],
[128, "(function task-control symbol :behavior process-taskable)"],
[129, "(function task-control symbol :behavior process-taskable)"],
[130, "(function task-control symbol :behavior process-taskable)"],
[131, "(function task-control symbol :behavior process-taskable)"],
[132, "(function task-control symbol :behavior process-taskable)"],
[133, "(function task-control symbol :behavior process-taskable)"],
[134, "(function task-control symbol :behavior process-taskable)"],
[135, "(function task-control symbol :behavior process-taskable)"],
[136, "(function task-control symbol :behavior process-taskable)"],
[137, "(function task-control symbol :behavior process-taskable)"],
[138, "(function task-control symbol :behavior process-taskable)"],
[139, "(function task-control symbol :behavior process-taskable)"],
[140, "(function task-control symbol :behavior process-taskable)"],
[141, "(function task-control symbol :behavior process-taskable)"],
[142, "(function task-control symbol :behavior process-taskable)"],
[143, "(function task-control symbol :behavior process-taskable)"],
[144, "(function task-control symbol :behavior process-taskable)"],
[145, "(function task-control symbol :behavior process-taskable)"],
[146, "(function task-control symbol :behavior process-taskable)"],
[147, "(function task-control symbol :behavior process-taskable)"],
[148, "(function task-control symbol :behavior process-taskable)"],
[149, "(function task-control symbol :behavior process-taskable)"],
[150, "(function task-control symbol :behavior process-taskable)"],
[151, "(function task-control symbol :behavior process-taskable)"],
[152, "(function task-control symbol :behavior process-taskable)"],
[153, "(function task-control symbol :behavior process-taskable)"],
[154, "(function task-control symbol :behavior process-taskable)"],
[155, "(function task-control symbol :behavior process-taskable)"],
[156, "(function task-control symbol :behavior process-taskable)"],
[157, "(function task-control symbol :behavior process-taskable)"],
[158, "(function task-control symbol :behavior process-taskable)"],
[159, "(function task-control symbol :behavior process-taskable)"],
[160, "(function task-control symbol :behavior process-taskable)"],
[161, "(function task-control symbol :behavior process-taskable)"],
[162, "(function task-control symbol :behavior process-taskable)"],
[163, "(function task-control symbol :behavior process-taskable)"],
[164, "(function task-control symbol :behavior process-taskable)"],
[165, "(function task-control symbol :behavior process-taskable)"],
[166, "(function task-control symbol :behavior process-taskable)"],
[167, "(function task-control symbol :behavior process-taskable)"],
[168, "(function task-control symbol :behavior process-taskable)"],
[169, "(function task-control symbol :behavior process-taskable)"],
[170, "(function task-control symbol :behavior process-taskable)"],
[171, "(function task-control symbol :behavior process-taskable)"],
[172, "(function task-control symbol :behavior process-taskable)"],
[173, "(function task-control symbol :behavior process-taskable)"],
[174, "(function task-control symbol :behavior process-taskable)"],
[175, "(function task-control symbol :behavior process-taskable)"],
[176, "(function task-control symbol :behavior process-taskable)"],
[177, "(function task-control symbol :behavior process-taskable)"],
[178, "(function task-control symbol :behavior process-taskable)"],
[179, "(function task-control symbol :behavior process-taskable)"],
[180, "(function task-control symbol :behavior process-taskable)"],
[181, "(function task-control symbol :behavior process-taskable)"],
[182, "(function task-control symbol :behavior process-taskable)"],
[183, "(function task-control symbol :behavior process-taskable)"],
[184, "(function task-control symbol :behavior process-taskable)"],
[185, "(function task-control symbol :behavior process-taskable)"],
[186, "(function task-control symbol :behavior process-taskable)"],
[187, "(function task-control symbol :behavior process-taskable)"],
[188, "(function task-control symbol :behavior process-taskable)"],
[189, "(function task-control symbol :behavior process-taskable)"],
[190, "(function task-control symbol :behavior process-taskable)"],
[191, "(function task-control symbol :behavior process-taskable)"],
[192, "(function task-control symbol :behavior process-taskable)"],
[193, "(function task-control symbol :behavior process-taskable)"],
[194, "(function task-control symbol :behavior process-taskable)"],
[195, "(function task-control symbol :behavior process-taskable)"],
[196, "(function task-control symbol :behavior process-taskable)"],
[197, "(function task-control symbol :behavior process-taskable)"],
[198, "(function task-control symbol :behavior process-taskable)"],
[199, "(function task-control symbol :behavior process-taskable)"],
[200, "(function task-control symbol :behavior process-taskable)"],
[201, "(function task-control symbol :behavior process-taskable)"],
[202, "(function task-control symbol :behavior process-taskable)"],
[203, "(function task-control symbol :behavior process-taskable)"],
[204, "(function task-control symbol :behavior process-taskable)"],
[205, "(function task-control symbol :behavior process-taskable)"],
[206, "(function task-control symbol :behavior process-taskable)"],
[207, "(function task-control symbol :behavior process-taskable)"],
[208, "(function task-control symbol :behavior process-taskable)"],
[209, "(function task-control symbol :behavior process-taskable)"],
[210, "(function task-control symbol :behavior process-taskable)"],
[211, "(function task-control symbol :behavior process-taskable)"],
[212, "(function task-control symbol :behavior process-taskable)"],
[213, "(function task-control symbol :behavior process-taskable)"],
[214, "(function task-control symbol :behavior process-taskable)"],
[215, "(function task-control symbol :behavior process-taskable)"],
[216, "(function task-control symbol :behavior process-taskable)"],
[217, "(function task-control symbol :behavior process-taskable)"],
[218, "(function task-control symbol :behavior process-taskable)"],
[219, "(function task-control symbol :behavior process-taskable)"],
[220, "(function task-control symbol :behavior process-taskable)"],
[221, "(function task-control symbol :behavior process-taskable)"],
[222, "(function task-control symbol :behavior process-taskable)"],
[223, "(function task-control symbol :behavior process-taskable)"],
[224, "(function task-control symbol :behavior process-taskable)"],
[225, "(function task-control symbol :behavior process-taskable)"],
[226, "(function task-control symbol :behavior process-taskable)"],
[227, "(function task-control symbol :behavior process-taskable)"],
[228, "(function task-control symbol :behavior process-taskable)"],
[229, "(function task-control symbol :behavior process-taskable)"],
[230, "(function task-control symbol :behavior process-taskable)"],
[231, "(function task-control symbol :behavior process-taskable)"],
[232, "(function task-control symbol :behavior process-taskable)"],
[233, "(function task-control symbol :behavior process-taskable)"],
[234, "(function task-control symbol :behavior process-taskable)"],
[235, "(function task-control symbol :behavior process-taskable)"],
[236, "(function task-control symbol :behavior process-taskable)"],
[237, "(function task-control symbol :behavior process-taskable)"],
[238, "(function task-control symbol :behavior process-taskable)"],
[239, "(function task-control symbol :behavior process-taskable)"],
[240, "(function task-control symbol :behavior process-taskable)"],
[241, "(function task-control symbol :behavior process-taskable)"],
[242, "(function task-control symbol :behavior process-taskable)"],
[243, "(function task-control symbol :behavior process-taskable)"],
[244, "(function task-control symbol :behavior process-taskable)"],
[245, "(function task-control symbol :behavior process-taskable)"],
[246, "(function task-control symbol :behavior process-taskable)"],
[247, "(function task-control symbol :behavior process-taskable)"],
[248, "(function task-control symbol :behavior process-taskable)"],
[249, "(function task-control symbol :behavior process-taskable)"],
[250, "(function task-control symbol :behavior process-taskable)"],
[251, "(function task-control symbol :behavior process-taskable)"],
[252, "(function task-control symbol :behavior process-taskable)"],
[253, "(function task-control symbol :behavior process-taskable)"],
[254, "(function task-control symbol :behavior process-taskable)"],
[255, "(function task-control symbol :behavior process-taskable)"],
[256, "(function task-control symbol :behavior process-taskable)"],
[257, "(function task-control symbol :behavior process-taskable)"],
[258, "(function task-control symbol :behavior process-taskable)"],
[259, "(function task-control symbol :behavior process-taskable)"],
[260, "(function task-control symbol :behavior process-taskable)"],
[261, "(function task-control symbol :behavior process-taskable)"],
[262, "(function task-control symbol :behavior process-taskable)"],
[263, "(function task-control symbol :behavior process-taskable)"],
[264, "(function task-control symbol :behavior process-taskable)"],
[265, "(function task-control symbol :behavior process-taskable)"],
[266, "(function task-control symbol :behavior process-taskable)"],
[267, "(function task-control symbol :behavior process-taskable)"],
[268, "(function task-control symbol :behavior process-taskable)"],
[269, "(function task-control symbol :behavior process-taskable)"],
[270, "(function task-control symbol :behavior process-taskable)"],
[271, "(function task-control symbol :behavior process-taskable)"],
[272, "(function task-control symbol :behavior process-taskable)"],
[273, "(function task-control symbol :behavior process-taskable)"],
[274, "(function task-control symbol :behavior process-taskable)"],
[275, "(function task-control symbol :behavior process-taskable)"],
[276, "(function task-control symbol :behavior process-taskable)"],
[277, "(function task-control symbol :behavior process-taskable)"],
[278, "(function task-control symbol :behavior process-taskable)"],
[279, "(function task-control symbol :behavior process-taskable)"],
[280, "(function task-control symbol :behavior process-taskable)"],
[281, "(function task-control symbol :behavior process-taskable)"],
[282, "(function task-control symbol :behavior process-taskable)"],
[283, "(function task-control symbol :behavior process-taskable)"],
[284, "(function task-control symbol :behavior process-taskable)"],
[285, "(function task-control symbol :behavior process-taskable)"],
[286, "(function task-control symbol :behavior process-taskable)"],
[287, "(function task-control symbol :behavior process-taskable)"],
[288, "(function task-control symbol :behavior process-taskable)"],
[289, "(function task-control symbol :behavior process-taskable)"],
[290, "(function task-control symbol :behavior process-taskable)"],
[291, "(function task-control symbol :behavior process-taskable)"],
[292, "(function task-control symbol :behavior process-taskable)"],
[293, "(function task-control symbol :behavior process-taskable)"],
[294, "(function task-control symbol :behavior process-taskable)"],
[295, "(function task-control symbol :behavior process-taskable)"],
[296, "(function task-control symbol :behavior process-taskable)"],
[297, "(function task-control symbol :behavior process-taskable)"],
[298, "(function task-control symbol :behavior process-taskable)"],
[299, "(function task-control symbol :behavior process-taskable)"],
[300, "(function task-control symbol :behavior process-taskable)"],
[301, "(function task-control symbol :behavior process-taskable)"],
[302, "(function task-control symbol :behavior process-taskable)"],
[303, "(function task-control symbol :behavior process-taskable)"],
[304, "(function task-control symbol :behavior process-taskable)"],
[305, "(function task-control symbol :behavior process-taskable)"],
[306, "(function task-control symbol :behavior process-taskable)"],
[307, "(function task-control symbol :behavior process-taskable)"],
[308, "(function task-control symbol :behavior process-taskable)"],
[309, "(function task-control symbol :behavior process-taskable)"],
[310, "(function task-control symbol :behavior process-taskable)"],
[311, "(function task-control symbol :behavior process-taskable)"],
[312, "(function task-control symbol :behavior process-taskable)"],
[313, "(function task-control symbol :behavior process-taskable)"],
[314, "(function task-control symbol :behavior process-taskable)"],
[315, "(function task-control symbol :behavior process-taskable)"],
[316, "(function task-control symbol :behavior process-taskable)"],
[317, "(function task-control symbol :behavior process-taskable)"],
[318, "(function task-control symbol :behavior process-taskable)"],
[319, "(function task-control symbol :behavior process-taskable)"],
[320, "(function task-control symbol :behavior process-taskable)"],
[321, "(function task-control symbol :behavior process-taskable)"],
[322, "(function task-control symbol :behavior process-taskable)"],
[323, "(function task-control symbol :behavior process-taskable)"],
[324, "(function task-control symbol :behavior process-taskable)"],
[325, "(function task-control symbol :behavior process-taskable)"],
[326, "(function task-control symbol :behavior process-taskable)"],
[327, "(function task-control symbol :behavior process-taskable)"],
[328, "(function task-control symbol :behavior process-taskable)"],
[329, "(function task-control symbol :behavior process-taskable)"],
[330, "(function task-control symbol :behavior process-taskable)"],
[331, "(function task-control symbol :behavior process-taskable)"],
[332, "(function task-control symbol :behavior process-taskable)"],
[333, "(function task-control symbol :behavior process-taskable)"],
[334, "(function task-control symbol :behavior process-taskable)"],
[335, "(function task-control symbol :behavior process-taskable)"],
[336, "(function task-control task-control symbol)"],
[337, "(function task-control task-control symbol)"],
[338, "(function task-control symbol)"],
[339, "(function task-control symbol)"],
[340, "(function task-control symbol)"],
[341, "(function task-control symbol)"],
[342, "(function task-control symbol)"],
[343, "(function task-control symbol)"],
[344, "(function task-control symbol)"],
[345, "(function task-control symbol)"],
[346, "(function task-control symbol)"],
[347, "(function task-control symbol)"],
[348, "(function task-control symbol)"],
[349, "(function task-control symbol)"],
[350, "(function task-control symbol)"],
[351, "(function task-control symbol)"],
[352, "(function task-control symbol)"],
[353, "(function task-control symbol)"],
[354, "(function task-control symbol)"],
[355, "(function task-control symbol)"],
[356, "(function task-control symbol)"],
[357, "(function task-control symbol)"],
[358, "(function task-control symbol)"],
[359, "(function task-control symbol)"],
[360, "(function task-control symbol)"],
[361, "(function task-control symbol)"],
[338, "(function task-control symbol :behavior process-taskable)"],
[339, "(function task-control symbol :behavior process-taskable)"],
[340, "(function task-control symbol :behavior process-taskable)"],
[341, "(function task-control symbol :behavior process-taskable)"],
[342, "(function task-control symbol :behavior process-taskable)"],
[343, "(function task-control symbol :behavior process-taskable)"],
[344, "(function task-control symbol :behavior process-taskable)"],
[345, "(function task-control symbol :behavior process-taskable)"],
[346, "(function task-control symbol :behavior process-taskable)"],
[347, "(function task-control symbol :behavior process-taskable)"],
[348, "(function task-control symbol :behavior process-taskable)"],
[349, "(function task-control symbol :behavior process-taskable)"],
[350, "(function task-control symbol :behavior process-taskable)"],
[351, "(function task-control symbol :behavior process-taskable)"],
[352, "(function task-control symbol :behavior process-taskable)"],
[353, "(function task-control symbol :behavior process-taskable)"],
[354, "(function task-control symbol :behavior process-taskable)"],
[355, "(function task-control symbol :behavior process-taskable)"],
[356, "(function task-control symbol :behavior process-taskable)"],
[357, "(function task-control symbol :behavior process-taskable)"],
[358, "(function task-control symbol :behavior process-taskable)"],
[359, "(function task-control symbol :behavior process-taskable)"],
[360, "(function task-control symbol :behavior process-taskable)"],
[361, "(function task-control symbol :behavior process-taskable)"],
[362, "(function task-control task-control symbol)"],
[363, "(function task-control task-control symbol)"],
[364, "(function task-control task-control symbol)"],
[365, "(function task-control task-control symbol)"],
[366, "(function task-control symbol)"],
[367, "(function task-control symbol)"],
[368, "(function task-control symbol)"],
[369, "(function task-control symbol)"],
[370, "(function task-control symbol)"],
[371, "(function task-control symbol)"],
[372, "(function task-control symbol)"],
[373, "(function task-control symbol)"],
[374, "(function task-control symbol)"],
[375, "(function task-control symbol)"],
[376, "(function task-control symbol)"],
[377, "(function task-control symbol)"],
[378, "(function task-control symbol)"],
[379, "(function task-control symbol)"],
[380, "(function task-control symbol)"],
[381, "(function task-control symbol)"],
[382, "(function task-control symbol)"],
[383, "(function task-control symbol)"],
[384, "(function task-control symbol)"],
[385, "(function task-control symbol)"],
[386, "(function task-control symbol)"],
[387, "(function task-control symbol)"],
[388, "(function task-control symbol)"],
[389, "(function task-control symbol)"],
[390, "(function task-control symbol)"],
[391, "(function task-control symbol)"],
[392, "(function task-control symbol)"],
[393, "(function task-control symbol)"],
[394, "(function task-control symbol)"],
[395, "(function task-control symbol)"],
[396, "(function task-control symbol)"],
[397, "(function task-control symbol)"],
[398, "(function task-control symbol)"],
[399, "(function task-control symbol)"],
[400, "(function task-control symbol)"],
[401, "(function task-control symbol)"],
[402, "(function task-control symbol)"],
[403, "(function task-control symbol)"],
[404, "(function task-control symbol)"],
[405, "(function task-control symbol)"],
[406, "(function task-control symbol)"],
[407, "(function task-control symbol)"],
[408, "(function task-control symbol)"],
[409, "(function task-control symbol)"],
[410, "(function task-control symbol)"],
[411, "(function task-control symbol)"],
[412, "(function task-control symbol)"],
[413, "(function task-control symbol)"],
[366, "(function task-control symbol :behavior process-taskable)"],
[367, "(function task-control symbol :behavior process-taskable)"],
[368, "(function task-control symbol :behavior process-taskable)"],
[369, "(function task-control symbol :behavior process-taskable)"],
[370, "(function task-control symbol :behavior process-taskable)"],
[371, "(function task-control symbol :behavior process-taskable)"],
[372, "(function task-control symbol :behavior process-taskable)"],
[373, "(function task-control symbol :behavior process-taskable)"],
[374, "(function task-control symbol :behavior process-taskable)"],
[375, "(function task-control symbol :behavior process-taskable)"],
[376, "(function task-control symbol :behavior process-taskable)"],
[377, "(function task-control symbol :behavior process-taskable)"],
[378, "(function task-control symbol :behavior process-taskable)"],
[379, "(function task-control symbol :behavior process-taskable)"],
[380, "(function task-control symbol :behavior process-taskable)"],
[381, "(function task-control symbol :behavior process-taskable)"],
[382, "(function task-control symbol :behavior process-taskable)"],
[383, "(function task-control symbol :behavior process-taskable)"],
[384, "(function task-control symbol :behavior process-taskable)"],
[385, "(function task-control symbol :behavior process-taskable)"],
[386, "(function task-control symbol :behavior process-taskable)"],
[387, "(function task-control symbol :behavior process-taskable)"],
[388, "(function task-control symbol :behavior process-taskable)"],
[389, "(function task-control symbol :behavior process-taskable)"],
[390, "(function task-control symbol :behavior process-taskable)"],
[391, "(function task-control symbol :behavior process-taskable)"],
[392, "(function task-control symbol :behavior process-taskable)"],
[393, "(function task-control symbol :behavior process-taskable)"],
[394, "(function task-control symbol :behavior process-taskable)"],
[395, "(function task-control symbol :behavior process-taskable)"],
[396, "(function task-control symbol :behavior process-taskable)"],
[397, "(function task-control symbol :behavior process-taskable)"],
[398, "(function task-control symbol :behavior process-taskable)"],
[399, "(function task-control symbol :behavior process-taskable)"],
[400, "(function task-control symbol :behavior process-taskable)"],
[401, "(function task-control symbol :behavior process-taskable)"],
[402, "(function task-control symbol :behavior process-taskable)"],
[403, "(function task-control symbol :behavior process-taskable)"],
[404, "(function task-control symbol :behavior process-taskable)"],
[405, "(function task-control symbol :behavior process-taskable)"],
[406, "(function task-control symbol :behavior process-taskable)"],
[407, "(function task-control symbol :behavior process-taskable)"],
[408, "(function task-control symbol :behavior process-taskable)"],
[409, "(function task-control symbol :behavior process-taskable)"],
[410, "(function task-control symbol :behavior process-taskable)"],
[411, "(function task-control symbol :behavior process-taskable)"],
[412, "(function task-control symbol :behavior process-taskable)"],
[413, "(function task-control symbol :behavior process-taskable)"],
[414, "(function task-control task-control symbol)"],
[415, "(function task-control task-control symbol)"],
[416, "(function task-control symbol)"],
[417, "(function task-control symbol)"],
[418, "(function task-control symbol)"],
[419, "(function task-control symbol)"],
[420, "(function task-control symbol)"],
[421, "(function task-control symbol)"],
[422, "(function task-control symbol)"],
[423, "(function task-control symbol)"],
[424, "(function task-control symbol)"],
[416, "(function task-control symbol :behavior process-taskable)"],
[417, "(function task-control symbol :behavior process-taskable)"],
[418, "(function task-control symbol :behavior process-taskable)"],
[419, "(function task-control symbol :behavior process-taskable)"],
[420, "(function task-control symbol :behavior process-taskable)"],
[421, "(function task-control symbol :behavior process-taskable)"],
[422, "(function task-control symbol :behavior process-taskable)"],
[423, "(function task-control symbol :behavior process-taskable)"],
[424, "(function task-control symbol :behavior process-taskable)"],
[425, "(function task-control task-control symbol)"],
[426, "(function task-control task-control symbol)"],
[427, "(function task-control symbol)"],
[428, "(function task-control symbol)"],
[429, "(function task-control symbol)"],
[430, "(function task-control symbol)"],
[431, "(function task-control symbol)"],
[427, "(function task-control symbol :behavior process-taskable)"],
[428, "(function task-control symbol :behavior process-taskable)"],
[429, "(function task-control symbol :behavior process-taskable)"],
[430, "(function task-control symbol :behavior process-taskable)"],
[431, "(function task-control symbol :behavior process-taskable)"],
[432, "(function task-control task-control symbol)"],
[433, "(function task-control task-control symbol)"],
[434, "(function task-control task-control symbol)"],
[435, "(function task-control symbol)"],
[435, "(function task-control symbol :behavior process-taskable)"],
[436, "(function task-control task-control symbol)"],
[437, "(function task-control task-control symbol)"],
[438, "(function task-control task-control symbol)"],
[439, "(function task-control symbol)"],
[440, "(function task-control symbol)"],
[441, "(function task-control symbol)"],
[442, "(function task-control symbol)"],
[439, "(function task-control symbol :behavior process-taskable)"],
[440, "(function task-control symbol :behavior process-taskable)"],
[441, "(function task-control symbol :behavior process-taskable)"],
[442, "(function task-control symbol :behavior process-taskable)"],
[443, "(function task-control task-control symbol)"],
[444, "(function task-control task-control symbol)"],
[445, "(function task-control symbol)"],
[445, "(function task-control symbol :behavior process-taskable)"],
[446, "(function task-control task-control symbol)"],
[447, "(function task-control task-control symbol)"],
[448, "(function task-control task-control symbol)"],
[449, "(function task-control symbol)"],
[450, "(function task-control symbol)"],
[451, "(function task-control symbol)"],
[452, "(function task-control symbol)"],
[449, "(function task-control symbol :behavior process-taskable)"],
[450, "(function task-control symbol :behavior process-taskable)"],
[451, "(function task-control symbol :behavior process-taskable)"],
[452, "(function task-control symbol :behavior process-taskable)"],
[453, "(function task-control task-control symbol)"],
[454, "(function task-control task-control symbol)"],
[455, "(function task-control symbol)"],
[455, "(function task-control symbol :behavior process-taskable)"],
[456, "(function task-control task-control symbol)"],
[457, "(function task-control task-control symbol)"],
[458, "(function task-control task-control symbol)"],
[459, "(function task-control symbol)"],
[460, "(function task-control symbol)"],
[461, "(function task-control symbol)"],
[462, "(function task-control symbol)"],
[463, "(function task-control symbol)"],
[464, "(function task-control symbol)"],
[465, "(function task-control symbol)"],
[466, "(function task-control symbol)"],
[467, "(function task-control symbol)"],
[468, "(function task-control symbol)"],
[469, "(function task-control symbol)"],
[470, "(function task-control symbol)"],
[471, "(function task-control symbol)"],
[472, "(function task-control symbol)"],
[473, "(function task-control symbol)"],
[459, "(function task-control symbol :behavior process-taskable)"],
[460, "(function task-control symbol :behavior process-taskable)"],
[461, "(function task-control symbol :behavior process-taskable)"],
[462, "(function task-control symbol :behavior process-taskable)"],
[463, "(function task-control symbol :behavior process-taskable)"],
[464, "(function task-control symbol :behavior process-taskable)"],
[465, "(function task-control symbol :behavior process-taskable)"],
[466, "(function task-control symbol :behavior process-taskable)"],
[467, "(function task-control symbol :behavior process-taskable)"],
[468, "(function task-control symbol :behavior process-taskable)"],
[469, "(function task-control symbol :behavior process-taskable)"],
[470, "(function task-control symbol :behavior process-taskable)"],
[471, "(function task-control symbol :behavior process-taskable)"],
[472, "(function task-control symbol :behavior process-taskable)"],
[473, "(function task-control symbol :behavior process-taskable)"],
[474, "(function task-control task-control symbol)"],
[475, "(function task-control task-control symbol)"],
[476, "(function task-control task-control symbol)"],
[477, "(function task-control task-control symbol)"],
[478, "(function task-control symbol)"],
[479, "(function task-control symbol)"],
[480, "(function task-control symbol)"],
[481, "(function task-control symbol)"],
[482, "(function task-control symbol)"],
[483, "(function task-control symbol)"],
[484, "(function task-control symbol)"],
[485, "(function task-control symbol)"],
[486, "(function task-control symbol)"],
[487, "(function task-control symbol)"],
[488, "(function task-control symbol)"],
[489, "(function task-control symbol)"],
[490, "(function task-control symbol)"],
[491, "(function task-control symbol)"],
[492, "(function task-control symbol)"],
[493, "(function task-control symbol)"],
[494, "(function task-control symbol)"],
[495, "(function task-control symbol)"],
[496, "(function task-control symbol)"]
[478, "(function task-control symbol :behavior process-taskable)"],
[479, "(function task-control symbol :behavior process-taskable)"],
[480, "(function task-control symbol :behavior process-taskable)"],
[481, "(function task-control symbol :behavior process-taskable)"],
[482, "(function task-control symbol :behavior process-taskable)"],
[483, "(function task-control symbol :behavior process-taskable)"],
[484, "(function task-control symbol :behavior process-taskable)"],
[485, "(function task-control symbol :behavior process-taskable)"],
[486, "(function task-control symbol :behavior process-taskable)"],
[487, "(function task-control symbol :behavior process-taskable)"],
[488, "(function task-control symbol :behavior process-taskable)"],
[489, "(function task-control symbol :behavior process-taskable)"],
[490, "(function task-control symbol :behavior process-taskable)"],
[491, "(function task-control symbol :behavior process-taskable)"],
[492, "(function task-control symbol :behavior process-taskable)"],
[493, "(function task-control symbol :behavior process-taskable)"],
[494, "(function task-control symbol :behavior process-taskable)"],
[495, "(function task-control symbol :behavior process-taskable)"],
[496, "(function task-control symbol :behavior process-taskable)"]
],
"game-info": [

View File

@ -378,7 +378,7 @@
"find-knot-span": [0, 1, 2, 3, 5, 6, 7, 8, 9],
"curve-evaluate!": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"curve-evaluate!": [0, 2, 5, 6, 7, 8, 9],
"(method 9 texture-page-dir)": [4, 5],

View File

@ -25,7 +25,7 @@
["L72", "vector"]
],
"geometry": [["L112", "(pointer float)", 4]],
"geometry": [["L112", "vector"]],
"trigonometry": [
["L98", "(pointer float)", 32],

View File

@ -827,10 +827,6 @@
[[157, 162], "a1", "dma-packet"]
],
"(top-level-login task-control)": [[165, "v1", "symbol"]],
"task-control-reset": [
[[7, 13], "a0", "task-control"],
[[17, 21], "a0", "task-control"]
],
"(anon-function 494 task-control)": [[32, "v0", "float"]],
"(anon-function 493 task-control)": [[32, "v0", "float"]],
"(anon-function 480 task-control)": [[13, "v0", "float"]],
@ -7899,6 +7895,10 @@
[20, "a0", "process-drawable"]
],
"curve-evaluate!": [
[62, "s5", "pointer"]
],
"setup-blerc-chains": [
[43, "v1", "int"],
[80, "s0", "int"],

View File

@ -3979,5 +3979,12 @@
}
},
"curve-evaluate!": {
"vars": {
"t2-1": ["t2-1", "(pointer float)"],
"v1-5": ["v1-5", "(pointer float)"]
}
},
"aaaaaaaaaaaaaaaaaaaaaaa": {}
}

View File

@ -7,7 +7,6 @@
#include "decompiler/ObjectFile/ObjectFileDB.h"
#include "common/goos/Reader.h"
#include "common/util/BitUtils.h"
#include "common/util/FontUtils.h"
namespace decompiler {
namespace {
@ -99,9 +98,11 @@ GameTextResult process_game_text(ObjectFileData& data, GameTextVersion version)
}
// escape characters
result.text[text_id] = version == GameTextVersion::JAK1_V1
? convert_from_jak1_encoding(text.c_str())
: goos::get_readable_string(text.c_str()); // HACK!
if (font_bank_exists(version)) {
result.text[text_id] = get_font_bank(version)->convert_game_to_utf8(text.c_str());
} else {
result.text[text_id] = goos::get_readable_string(text.c_str()); // HACK!
}
// remember what we read (-1 for the type tag)
auto string_start = (text_label.offset / 4) - 1;
@ -144,7 +145,7 @@ std::string write_game_text(
// build map
std::map<int, std::vector<std::string>> text_by_id;
for (auto lang : langauges) {
for (auto text : data.at(lang)) {
for (auto& text : data.at(lang)) {
text_by_id[text.first].push_back(text.second);
}
}

View File

@ -1,6 +1,7 @@
#pragma once
#include <string>
#include <unordered_map>
#include "common/util/FontUtils.h"
namespace decompiler {
struct ObjectFileData;
@ -12,8 +13,6 @@ struct GameTextResult {
int total_chars = 0;
};
enum class GameTextVersion { JAK1_V1 = 10, JAK1_V2 = 11, JAK2 = 20, JAK3 = 30, JAKX = 40 };
GameTextResult process_game_text(ObjectFileData& data, GameTextVersion version);
std::string write_game_text(
const std::unordered_map<int, std::unordered_map<int, std::string>>& data);

View File

@ -1,29 +1,6 @@
# We define our own compilation flags here.
set(CMAKE_CXX_STANDARD 17)
# Set default compile flags for GCC
# optimization level can be set here. Note that game/ overwrites this for building game C++ code.
if(UNIX)
message(STATUS "GCC detected, adding compile flags")
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} \
-Wall \
-Winit-self \
-ggdb \
-Wextra \
-Wno-cast-align \
-Wcast-qual \
-Wdisabled-optimization \
-Wformat \
-Wmissing-include-dirs \
-Woverloaded-virtual \
-Wredundant-decls \
-Wshadow \
-Wsign-promo -O3 -march=haswell")
else()
set(CMAKE_CXX_FLAGS "/EHsc")
endif(UNIX)
enable_language(ASM_NASM)
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS ${CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS} asm)
set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <INCLUDES> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")

View File

@ -25,7 +25,6 @@ class GfxDisplay {
int m_xpos;
int m_ypos;
bool m_update_fullscreen = false;
int m_fullscreen_mode = 0;
int m_fullscreen_screen;
int m_fullscreen_target_mode;
@ -50,17 +49,15 @@ class GfxDisplay {
void get_scale(float* w, float* h);
const char* title() const { return m_title; }
bool fullscreen_pending() { return m_update_fullscreen; }
bool fullscreen_pending() { return m_fullscreen_mode != m_fullscreen_target_mode; }
void fullscreen_flush() {
m_renderer->set_fullscreen(this, m_fullscreen_target_mode, m_fullscreen_target_screen);
m_fullscreen_mode = m_fullscreen_target_mode;
m_fullscreen_screen = m_fullscreen_target_screen;
m_update_fullscreen = false;
}
void set_fullscreen(int mode, int screen) {
m_fullscreen_target_mode = mode;
m_fullscreen_target_screen = screen;
m_update_fullscreen = true;
}
int fullscreen_mode() { return m_fullscreen_mode; }
int fullscreen_screen() { return m_fullscreen_screen; }

View File

@ -72,9 +72,6 @@ ShaderLibrary::ShaderLibrary() {
at(ShaderId::SPRITE) = {"sprite_3d"};
at(ShaderId::SKY) = {"sky"};
at(ShaderId::SKY_BLEND) = {"sky_blend"};
at(ShaderId::DEBUG_BUFFERED) = {"debug_buffered"};
at(ShaderId::BUFFERED_TCC0) = {"buffered_tcc0"};
at(ShaderId::BUFFERED_TCC1) = {"buffered_tcc1"};
at(ShaderId::TFRAG3) = {"tfrag3"};
at(ShaderId::TFRAG3_NO_TEX) = {"tfrag3_no_tex"};
at(ShaderId::SPRITE3) = {"sprite3_3d"};

View File

@ -31,9 +31,9 @@ enum class ShaderId {
// SPRITE_CPU_AFAIL = 6,
SKY = 7,
SKY_BLEND = 8,
DEBUG_BUFFERED = 9,
BUFFERED_TCC0 = 10,
BUFFERED_TCC1 = 11,
// DEBUG_BUFFERED = 9,
// BUFFERED_TCC0 = 10,
// BUFFERED_TCC1 = 11,
TFRAG3 = 12,
TFRAG3_NO_TEX = 13,
SPRITE = 14,

View File

@ -1,18 +0,0 @@
#version 430 core
out vec4 color;
in vec4 fragment_color;
in vec3 tex_coord;
uniform sampler2D tex_T0;
uniform float alpha_reject;
void main() {
//vec4 T0 = textureProj(tex_T0, vec3(tex_coord.xy, 1.0));
vec4 T0 = texture(tex_T0, tex_coord.xy / tex_coord.z);
T0.w = 1.0;
color = fragment_color * T0 * 2.0;
if (color.a <= alpha_reject) {
discard;
}
}

View File

@ -1,16 +0,0 @@
#version 430 core
layout (location = 0) in vec3 position_in;
layout (location = 1) in vec4 rgba_in;
layout (location = 2) in vec3 tex_coord_in;
out vec4 fragment_color;
out vec3 tex_coord;
void main() {
gl_Position = vec4((position_in.x - 0.5) * 16, -(position_in.y - 0.5) * 32, position_in.z * 2 - 1, 1.0);
// scissoring area adjust
gl_Position.y *= 512.0/448.0;
fragment_color = vec4(rgba_in.rgb, rgba_in.a * 2);
tex_coord = tex_coord_in;
}

View File

@ -1,17 +0,0 @@
#version 430 core
out vec4 color;
in vec4 fragment_color;
in vec3 tex_coord;
uniform sampler2D tex_T0;
uniform float alpha_reject;
void main() {
//vec4 T0 = texture(tex_T0, tex_coord);
vec4 T0 = texture(tex_T0, tex_coord.xy / tex_coord.z);
color = fragment_color * T0 * 2.0;
if (color.a <= alpha_reject) {
discard;
}
}

View File

@ -1,16 +0,0 @@
#version 430 core
layout (location = 0) in vec3 position_in;
layout (location = 1) in vec4 rgba_in;
layout (location = 2) in vec3 tex_coord_in;
out vec4 fragment_color;
out vec3 tex_coord;
void main() {
gl_Position = vec4((position_in.x - 0.5) * 16, -(position_in.y - 0.5) * 32, position_in.z * 2 - 1, 1.0);
// scissoring area adjust
gl_Position.y *= 512.0/448.0;
fragment_color = vec4(rgba_in.rgb, rgba_in.a * 2);
tex_coord = tex_coord_in;
}

View File

@ -1,9 +0,0 @@
#version 430 core
out vec4 color;
in vec4 fragment_color;
void main() {
color = fragment_color;
}

View File

@ -1,19 +0,0 @@
// Shader for debugging the buffered renderer.
// no texture
#version 430 core
layout (location = 0) in vec3 position_in;
layout (location = 1) in vec4 rgba_in;
layout (location = 2) in vec3 stq_in;
out vec4 fragment_color;
void main() {
// Note: position.y is multiplied by 32 instead of 16 to undo the half-height for interlacing stuff.
gl_Position = vec4((position_in.x - 0.5) * 16., -(position_in.y - 0.5) * 32, position_in.z * 2 - 1., 1.0);
// scissoring area adjust
gl_Position.y *= 512.0/448.0;
fragment_color = vec4(rgba_in.x, rgba_in.y, rgba_in.z, rgba_in.w + 0.5);
//fragment_color = vec4(1.0, 0, 0, 0.7);
}

View File

@ -150,6 +150,10 @@ static std::shared_ptr<GfxDisplay> gl_make_main_display(int width,
glfwMakeContextCurrent(window);
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);
if (!gl_inited && !gladLoadGL()) {
lg::error("GL init fail");
return NULL;
}
std::string image_path = fmt::format("{}/docs/favicon-nobg.png", file_util::get_project_path());
@ -158,11 +162,6 @@ static std::shared_ptr<GfxDisplay> gl_make_main_display(int width,
stbi_load(image_path.c_str(), &images[0].width, &images[0].height, 0, 4); // rgba channels
glfwSetWindowIcon(window, 1, images);
stbi_image_free(images[0].pixels);
if (!gl_inited && !gladLoadGL()) {
lg::error("GL init fail");
return NULL;
}
g_gfx_data = std::make_unique<GraphicsData>();
gl_inited = true;
@ -368,7 +367,7 @@ static void gl_set_fullscreen(GfxDisplay* display, int mode, int /*screen*/) {
glfwSetWindowAttrib(window, GLFW_FLOATING, GLFW_TRUE);
glfwSetWindowFocusCallback(window, FocusCallback);
#ifdef _WIN32
glfwSetWindowMonitor(window, NULL, x, y - 1, vmode->width, vmode->height + 1, GLFW_DONT_CARE);
glfwSetWindowMonitor(window, NULL, x, y, vmode->width, vmode->height + 1, GLFW_DONT_CARE);
#else
glfwSetWindowMonitor(window, NULL, x, y, vmode->width, vmode->height, GLFW_DONT_CARE);
#endif
@ -400,8 +399,16 @@ static void gl_render_display(GfxDisplay* display) {
fbuf_h--;
}
#endif
// horizontal letterbox size
int lbox_w = (fbuf_w - width) / 2;
// vertical letterbox size
int lbox_h = (fbuf_h - height) / 2;
#ifdef _WIN32
if (display->fullscreen_mode() == 2) {
// add one pixel of vertical letterbox on borderless to make up for extra line
lbox_h++;
}
#endif
// render game!
if (g_gfx_data->debug_gui.want_dump_replay()) {

View File

@ -18,6 +18,11 @@
(-> gp-0 vertex 2)
t1-0
)
(#when PC_PORT
(add-debug-outline-triangle #t (bucket-id debug-draw1) (-> gp-0 vertex 0) (-> gp-0 vertex 1) (-> gp-0 vertex 2)
(static-rgba 0 0 0 64)
)
)
)
(&+! gp-0 64)
)

View File

@ -49,7 +49,7 @@
;; joint-anim-compressed is the only type of joint-anim actually used.
;; the actual data isn't in here, this is just some metadata
;; again, this refers to a single joing
;; again, this refers to a single joint
(deftype joint-anim-compressed (joint-anim)
((data uint32 :dynamic :offset-assert 12) ;; seems to always just be 1 zero.
)
@ -58,7 +58,7 @@
:flag-assert #x90000000c
)
;; a single "frame" in an animtion, consists of matrices for each joint.
;; a single "frame" in an animation, consists of matrices for each joint.
;; unlike the previous types, this is for all of the joints involved in an animation.
(deftype joint-anim-frame (structure)
((matrices matrix 2 :inline :offset-assert 0) ;; everybody has at least 2 matrices

View File

@ -756,7 +756,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(curve-data (get-property-data obj points-name 'exact time (the pointer #f) (& points-tag) *res-static-buf*)))
(when curve-data
(set! (-> curve-target cverts) curve-data)
(set! (-> curve-target cverts) (the-as (inline-array vector) curve-data))
(set! (-> curve-target num-cverts) (the int (-> points-tag elt-count)))
(when (< MAX_CURVE_CONTROL_POINTS (-> curve-target num-cverts))
@ -771,7 +771,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(set! curve-data (get-property-data obj knots-name 'exact time (the pointer #f) (& knots-tag) *res-static-buf*))
(when curve-data
(set! (-> curve-target knots) (the (inline-array vector) curve-data))
(set! (-> curve-target knots) (the (pointer float) curve-data))
(set! (-> curve-target num-knots) (the int (-> knots-tag elt-count)))
(set! result #t)
)

View File

@ -776,7 +776,7 @@
#f
)
(defun-debug add-debug-curve ((arg0 symbol) (arg1 bucket-id) (arg2 pointer) (arg3 int) (arg4 (inline-array vector)) (arg5 int) (arg6 rgba))
(defun-debug add-debug-curve ((arg0 symbol) (arg1 bucket-id) (arg2 (inline-array vector)) (arg3 int) (arg4 (pointer float)) (arg5 int) (arg6 rgba))
(if (not arg0)
(return #f)
@ -785,7 +785,7 @@
(sv-48 (new-stack-vector0))
(sv-64 (* arg3 4))
)
(curve-evaluate! sv-48 (-> arg4 0 x) arg2 arg3 arg4 arg5)
(curve-evaluate! sv-48 (-> arg4 0) arg2 arg3 arg4 arg5)
(let ((sv-80 0))
(while (< sv-80 sv-64)
(set! (-> s0-0 quad) (-> sv-48 quad))

View File

@ -4288,14 +4288,13 @@
(function "Toggle game aspect" #f (lambda ()
(cond
((= (-> *setting-control* default aspect-ratio) 'aspect4x3)
(set-aspect-ratio 'aspect16x9)
(set! (-> *setting-control* default aspect-ratio) 'aspect16x9)
)
(else
(set-aspect-ratio 'aspect4x3)
(set! (-> *setting-control* default aspect-ratio) 'aspect4x3)
)
)
(set-aspect-ratio (-> *setting-control* default aspect-ratio))
))
(flag "Auto aspect" #f ,(dm-lambda-boolean-flag (-> *pc-settings* aspect-ratio-auto?)))
(menu "Aspect test"
@ -4336,26 +4335,27 @@
(function "512 x 512" #f (lambda () (set-size! *pc-settings* 512 512)))
)
(flag "Letterbox" #f ,(dm-lambda-boolean-flag (-> *pc-settings* letterbox?)))
(flag "Skip movies" #f ,(dm-lambda-boolean-flag (-> *pc-settings* skip-movies?)))
(flag "Subtitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* subtitles?)))
(flag "Hinttitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* hinttitles?)))
;(flag "Skip movies" #f ,(dm-lambda-boolean-flag (-> *pc-settings* skip-movies?)))
;(flag "Subtitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* subtitles?)))
;(flag "Hinttitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* hinttitles?)))
(menu "Game fixes"
(flag "sagecage crash" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes crash-sagecage)))
(flag "memory crash" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes crash-dma)))
(flag "light eco crash" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes crash-light-eco)))
(flag "softlock pelican" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes lockout-pelican)))
(flag "softlock pipegame" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes lockout-pipegame)))
(flag "softlock gambler" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes lockout-gambler)))
(flag "fix movies" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes fix-movies)))
(flag "fix credits" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes fix-credits)))
;(flag "memory crash" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes crash-dma)))
;(flag "light eco crash" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes crash-light-eco)))
;(flag "softlock pelican" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes lockout-pelican)))
;(flag "softlock pipegame" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes lockout-pipegame)))
;(flag "softlock gambler" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes lockout-gambler)))
;(flag "fix movies" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes fix-movies)))
;(flag "fix credits" #f ,(dm-lambda-boolean-flag (-> *pc-settings* fixes fix-credits)))
)
(menu "PS2 settings"
(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?)))
;(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?)))
(flag "PS2 Particles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-parts?)))
(flag "PS2 Music" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-music?)))
(flag "PS2 Sound effects" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-se?)))
(flag "PS2 Hints" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-hints?)))
;(flag "PS2 Music" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-music?)))
;(flag "PS2 Sound effects" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-se?)))
;(flag "PS2 Hints" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-hints?)))
)
#|
(menu "Level of detail"
(flag "PS2 LOD " #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-lod-dist?)))
(int-var "LOD Tfrag" 0 dm-lod-int 0 1 #t 0 3)
@ -4363,7 +4363,9 @@
(int-var "LOD Ocean" 2 dm-lod-int 0 1 #t 0 3)
(int-var "LOD Actor" 3 dm-lod-int 0 1 #t 0 3)
)
|#
;(flag "Alt load boundaries" #f ,(dm-lambda-boolean-flag (-> *pc-settings* new-lb?)))
(flag "All actors" #f ,(dm-lambda-boolean-flag (-> *pc-settings* force-actors?)))
(function "Reset" #f (lambda () (reset *pc-settings*)))
(function "Save" #f (lambda () (write-to-file *pc-settings* PC_SETTINGS_FILE_NAME)))
(function "Load" #f (lambda () (read-from-file *pc-settings* PC_SETTINGS_FILE_NAME)))

View File

@ -11,7 +11,6 @@
;; - between 1 and 8 roots.
;; - each child has between 1 and 8 children
;; - all leaves are stored at the same depth
;; - leaves at the same depth
;; - all nodes and leaves have visibility IDs
;; shrub does not have these properties

View File

@ -1702,13 +1702,9 @@
)
)
)
(set! (-> *ACTOR-bank* pause-dist)
(seek (-> *ACTOR-bank* pause-dist) f0-5 (* 81920.0 (-> *display* seconds-per-frame)))
)
(seek! (-> *ACTOR-bank* pause-dist) f0-5 (* 81920.0 (-> *display* seconds-per-frame)))
)
(set! (-> *ACTOR-bank* birth-max)
(seekl (-> *ACTOR-bank* birth-max) (the int (lerp-scale 25.0 1.0 (the float s5-1) 2000.0 7000.0)) 10)
)
(seekl! (-> *ACTOR-bank* birth-max) (the int (lerp-scale 25.0 1.0 (the float s5-1) 2000.0 7000.0)) 10)
)
(if (movie?)
(set! (-> *ACTOR-bank* birth-max) 1000)
@ -1954,7 +1950,7 @@
(add-debug-text-3d #t (bucket-id debug-draw1) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8)))
;; start writing text
(let ((cur-y (- 16 (* (-> inspect-info scroll-y) 8))) (y-adv 8))
(let* ((begin-y (- 16 (* (-> inspect-info scroll-y) 8))) (cur-y begin-y) (y-adv 8))
(with-dma-buffer-add-bucket ((debug-buf (-> (current-frame) debug-buf))
(bucket-id debug-draw1))
;; basic info, actor id, etc
@ -1962,6 +1958,17 @@
(string-format "~3L~A~0L ~A~%tags: ~D size: ~D aid: #x~x~%R1/L1 scroll L3 toggle display-actor-info~%--------------------" (-> e type) name (length e) (asize-of e) (-> e aid))
debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
(+! cur-y (* 8 4))
(cond
((type-type? (-> e type) entity-actor)
(let ((actor (the entity-actor e)))
;; print info for entity-actors
(draw-string-xy
(string-format "etype: ~A~%nav: ~A vis: ~D task: ~S" (-> actor etype) (!= #f (-> actor nav-mesh)) (-> actor vis-id) (game-task->string (-> actor task)))
debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
(+! cur-y (* 8 2))
)
)
)
;; draw each tag in entity
(dotimes (i (length e))
@ -1972,6 +1979,7 @@
;; tag data - special cases first
(cond
;; some water-height info
((and (= (-> e tag i name) 'water-height) (= (-> e tag i elt-count) 4) (= (-> e tag i elt-type) float))
(format *debug-temp-string* " ~mm ~mm ~mm ~f"
(-> (the (pointer float) data) 0)
@ -1980,12 +1988,15 @@
(-> (the (pointer float) data) 3)
)
)
;; music flava (music ambients)
((and (= (-> e tag i name) 'flava) (= (-> e tag i elt-count) 1) (= (-> e tag i elt-type) int32))
(format *debug-temp-string* " (music-flava ~S)" (enum->string music-flava (-> (the (pointer int32) data) 0)))
)
;; text id (can be hint ambient)
((and (= (-> e tag i name) 'text-id) (= (-> e tag i elt-count) 1) (= (-> e tag i elt-type) int32))
(format *debug-temp-string* " (game-text-id ~S)" (enum->string game-text-id (-> (the (pointer int32) data) 0)))
)
;; eco-info, like in vents, crates, or collectibles in general
((and (= (-> e tag i name) 'eco-info) (= (-> e tag i elt-count) 2) (= (-> e tag i elt-type) int32))
(format *debug-temp-string* " ~S " (pickup-type->string (the-as pickup-type (-> (the (pointer int32) data) 0))))
(if (= (pickup-type fuel-cell) (-> (the (pointer int32) data) 0))
@ -1996,11 +2007,13 @@
(format *debug-temp-string* " ~S" (game-task->string (the-as game-task (logand #xffff (-> (the (pointer int32) data) 1)))))
)
)
;; fact options, usually enemies or crates
((and (= (-> e tag i name) 'options) (= (-> e tag i elt-count) 1) (= (-> e tag i elt-type) uint32))
(format *debug-temp-string* " (fact-options ")
(bit-enum->string fact-options (-> (the (pointer uint32) data) 0) *debug-temp-string*)
(format *debug-temp-string* ")")
)
;; these can be displayed visually with other tools.
((and (= (-> e tag i name) 'visvol) (= (-> e tag i elt-count) 2) (= (-> e tag i elt-type) vector))
(format *debug-temp-string* " display actor-vis!")
)
@ -2011,6 +2024,7 @@
(format *debug-temp-string* " display vol marks!")
)
(else
;; more generic tag info
(dotimes (ii (-> e tag i elt-count))
(format *debug-temp-string* " ")
(case (-> e tag i elt-type)
@ -2018,10 +2032,12 @@
(format *debug-temp-string* "~A" (-> (the (pointer basic) data) ii)))
((float)
(case (-> e tag i name)
;; meters are better here
(('spring-height 'vis-dist 'height-info 'distance 'cam-notice-dist 'cam-vert 'cam-horz 'idle-distance
'nearest-y-threshold 'center-point 'center-radius 'notice-dist 'trigger-height 'notice-top)
(format *debug-temp-string* "~mm" (-> (the (pointer float) data) ii))
)
;; degrees are better for these
(('rotoffset 'fov 'rotmin 'rotmax 'tiltmin 'tiltmax 'rotspeed)
(format *debug-temp-string* "~rdeg" (-> (the (pointer float) data) ii))
)
@ -2047,6 +2063,7 @@
)
((uint8)
(case (-> e tag i name)
;; not sure
(('shadow-mask)
(format *debug-temp-string* "#b~b" (-> (the (pointer uint8) data) ii))
)
@ -2058,12 +2075,14 @@
((uint16) (format *debug-temp-string* "#x~x" (-> (the (pointer uint16) data) ii)))
((uint32)
(case (-> e tag i name)
;; actually actor-id
(('nav-mesh-actor 'open-actor 'trigger-actor 'path-actor 'state-actor 'alt-actor 'next-actor 'prev-actor
'spawner-blocker-actor 'spawner-trigger-actor 'kill-actor 'fade-actor 'water-actor 'target-actor)
(format *debug-temp-string* "~%#x~x (~S)" (-> (the (pointer uint32) data) ii)
(res-lump-struct (entity-by-aid (-> (the (pointer uint32) data) ii)) 'name string))
(+! y-adv 8)
)
;; used for fuel-cell
(('movie-mask)
(format *debug-temp-string* "#b~b" (-> (the (pointer uint32) data) ii))
)
@ -2074,6 +2093,7 @@
)
((vector)
(case (-> e tag i name)
;; guess
(('movie-pos)
(format *debug-temp-string* "~%(~mm ~mm ~mm ~rdeg)"
(-> (the (inline-array vector) data) ii x)
@ -2082,6 +2102,7 @@
(-> (the (inline-array vector) data) ii w)
)
)
;; not super useful
(('nav-mesh-sphere)
(format *debug-temp-string* "~%(~mm ~mm ~mm ~mm)"
(-> (the (inline-array vector) data) ii x)
@ -2100,8 +2121,9 @@
)
)
(+! y-adv 8))
;; no clue! please report this.
(else
(format *debug-temp-string* "<unknown tag type ~A>" (-> e tag i elt-type))
(format *debug-temp-string* "<unknown res-tag type ~A>" (-> e tag i elt-type))
(set! ii (the int (-> e tag i elt-count)))
)
)
@ -2109,11 +2131,14 @@
)
)
;; draw a string for each tag instead of all at once. allows using smaller strings.
(draw-string-xy *debug-temp-string* debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
(+! cur-y y-adv)
(set! y-adv 8)
))
;; set max scroll based on how large the whole text was, ignore first 20 lines.
(set! (-> inspect-info scroll-y-max) (max 0 (+ -20 (/ (- cur-y begin-y) 8))))
)
)))

View File

@ -421,18 +421,11 @@
;; increment power cells!
(set! (-> obj fuel) (+ 1.0 (-> obj fuel)))
;; mark as completed
(set! (-> obj task-perm-list data s5-1 status)
(logior (-> obj task-perm-list data s5-1 status)
(entity-perm-status real-complete)
)
)
(logior! (-> obj task-perm-list data s5-1 status) (entity-perm-status real-complete))
;; unused.
(get-task-control (the game-task s5-1))
;; close the task!
(close-specific-task!
(the-as game-task s5-1)
(task-status need-resolution)
)
(close-specific-task! (the-as game-task s5-1) (task-status need-resolution))
)
)
(-> obj fuel)

View File

@ -130,7 +130,7 @@
;; unused.
(deftype frame-stats (structure)
((field-time uint64 2 :offset-assert 0)
((field-time int64 2 :offset-assert 0)
(field int32 :offset-assert 16)
)
:method-count-assert 9

View File

@ -635,8 +635,8 @@
)
)
(countdown (s4-2 (-> (scratchpad-object terrain-context) work ambient ambient-list num-items))
(execute-ambient (-> (scratchpad-object terrain-context) work ambient ambient-list items s4-2) s5-1)
(countdown (s4-2 (-> (scratchpad-object terrain-context) work ambient ambient-list num-items))
(execute-ambient (-> (scratchpad-object terrain-context) work ambient ambient-list items s4-2) s5-1)
)
)
)
@ -768,8 +768,8 @@
(dotimes (i LEVEL_COUNT)
(format *stdcon* "level ~D ~12A ~A~%" i (-> *level* level i name) (-> *level* level i display?))
)
(format *stdcon* "music ~A (f: ~D) sound ~A ~A~%"
(-> *setting-control* current music) (-> *setting-control* current sound-flava)
(format *stdcon* "music ~A (f: ~D/~D) sound ~A ~A~%"
(-> *setting-control* current music) (-> *setting-control* current sound-flava) (-> *setting-control* default sound-flava)
*sound-bank-1* *sound-bank-2*)
(let ((pos (target-pos 0)))
(format *stdcon* "target ~m ~m ~m~%" (-> pos x) (-> pos y) (-> pos z))
@ -779,7 +779,7 @@
)
(let ((rot (new 'stack 'quaternion)))
(matrix->quaternion rot (-> *math-camera* camera-rot))
(format *stdcon* "cam-rot ~f ~f ~f~%" (-> rot x) (-> rot y) (-> rot z))
(format *stdcon* "cam-rot ~f ~f ~f ~f~%" (-> rot x) (-> rot y) (-> rot z) (-> rot w))
)
)
(when (-> *pc-settings* display-heap-status)

View File

@ -80,9 +80,9 @@
(:methods
(current-task (_type_) game-task 9)
(current-status (_type_) task-status 10)
(close-current! (_type_) none 11)
(close-status! (_type_ task-status) int 12)
(first-any (_type_ symbol) int 13)
(close-current! (_type_) game-task 11)
(close-status! (_type_ task-status) game-task 12)
(first-any (_type_ symbol) game-task 13)
(reset! (_type_ symbol symbol) int 14)
(closed? (_type_ game-task task-status) symbol 15)
(get-reminder (_type_ int) int 16)
@ -184,4 +184,4 @@
(define-extern task-closed? (function game-task task-status symbol))
(define-extern get-task-status (function game-task task-status))
(define-extern get-task-control (function game-task task-control))
(define-extern close-specific-task! (function game-task task-status int))
(define-extern close-specific-task! (function game-task task-status game-task))

File diff suppressed because it is too large Load Diff

View File

@ -10,11 +10,11 @@
;; A 3 dimensional polynomial spline with arbitrarily placed knot points
;; It's used for camera paths and similar and can be generated by offline tools.
(deftype curve (structure)
((cverts pointer :offset-assert 0)
(num-cverts int32 :offset-assert 4)
(knots (inline-array vector) :offset-assert 8)
(num-knots int32 :offset-assert 12)
(length float :offset-assert 16)
((cverts (inline-array vector) :offset-assert 0)
(num-cverts int32 :offset-assert 4)
(knots (pointer float) :offset-assert 8)
(num-knots int32 :offset-assert 12)
(length float :offset-assert 16)
)
:method-count-assert 9
:size-assert #x14
@ -33,9 +33,9 @@
:size-assert #x30
:flag-assert #xb00000030
(:methods
(debug-draw! (_type_) none 9)
(point-past-plane? (_type_ vector) symbol 10)
)
(debug-draw! (_type_) none 9)
(point-past-plane? (_type_ vector) symbol 10)
)
)
(defun-extern quaternion-from-two-vectors-max-angle! quaternion vector vector float quaternion)

View File

@ -1132,7 +1132,7 @@
v0-0
)
(defun calculate-basis-functions-vector! ((arg0 (pointer float)) (arg1 int) (arg2 float) (arg3 (pointer float)))
(defun calculate-basis-functions-vector! ((arg0 vector) (arg1 int) (arg2 float) (arg3 (pointer float)))
"Calculate polynomial basis for a given control point."
(local-vars (v1-0 int) (v1-1 object))
;;(.sll v1-0 arg1 2)
@ -1182,17 +1182,17 @@
(f2-5 (+ (* f3-1 f1-2) f2-4))
(f0-4 (* f0-3 f1-2))
)
(set! (-> arg0 0) f4-1)
(set! (-> arg0 1) f5-4)
(set! (-> arg0 2) f2-5)
(set! (-> arg0 3) f0-4)
(set! (-> arg0 x) f4-1)
(set! (-> arg0 y) f5-4)
(set! (-> arg0 z) f2-5)
(set! (-> arg0 w) f0-4)
)
)
)
arg0
)
(defun curve-evaluate! ((arg0 vector) (arg1 float) (arg2 pointer) (arg3 int) (arg4 (inline-array vector)) (arg5 int))
(defun curve-evaluate! ((arg0 vector) (arg1 float) (arg2 (inline-array vector)) (arg3 int) (arg4 (pointer float)) (arg5 int))
"Evaluate a curve.
arg0 is the output
arg1 is the input.
@ -1212,11 +1212,11 @@
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s4-0 (new 'static 'array float 4 0.0 0.0 0.0 0.0)))
(let ((s4-0 (new 'static 'vector)))
0
;; lookup knot
(let* ((f0-0 (-> arg4 0 x))
(f1-0 (-> (&-> arg4 0 data (+ arg5 -1)) 0))
(let* ((f0-0 (-> arg4 0))
(f1-0 (-> (&-> arg4 (+ arg5 -1)) 0))
(a2-1 (fmax (fmin (* arg1 f1-0) f1-0) f0-0))
)
(let* ((a1-1 (+ arg5 -5))
@ -1225,13 +1225,13 @@
(v1-5 arg4)
(f0-3 f0-2)
)
(b! (= f0-3 (-> (&-> v1-5 0 data (+ a1-1 1)) 0))
(b! (= f0-3 (-> (&-> v1-5 (+ a1-1 1)) 0))
cfg-11
:delay (set! s3-0 a1-1)
)
(let ((a0-4 (the int f0-3)))
(let* ((t1-1 (+ a0-4 3))
(t2-1 (&-> v1-5 0 data t1-1))
(t2-1 (&-> v1-5 t1-1))
(f1-4 (-> t2-1 0))
(f2-3 (-> t2-1 1))
)
@ -1245,7 +1245,7 @@
)
(label cfg-5)
(let ((t1-3 (/ (+ a3-2 a1-2) 2)))
(let ((t2-3 (&-> v1-5 0 data t1-3)))
(let ((t2-3 (&-> v1-5 t1-3)))
(b! (>= f0-3 (-> t2-3 0)) cfg-7)
(b! #t cfg-5 :delay (set! a1-2 t1-3))
(label cfg-7)
@ -1312,14 +1312,7 @@
(defun curve-get-pos! ((arg0 vector) (arg1 float) (arg2 curve))
"Get the position on the curve at the given input."
(curve-evaluate!
arg0
arg1
(-> arg2 cverts)
(-> arg2 num-cverts)
(-> arg2 knots)
(-> arg2 num-knots)
)
(curve-evaluate! arg0 arg1 (-> arg2 cverts) (-> arg2 num-cverts) (-> arg2 knots) (-> arg2 num-knots))
)
(defun curve-length ((arg0 curve))
@ -1329,28 +1322,28 @@
(s3-0 (* 3 (-> arg0 num-cverts)))
(f30-0 0.0)
)
(curve-evaluate!
s4-0
(-> arg0 knots 0 x)
(-> arg0 cverts)
(-> arg0 num-cverts)
(-> arg0 knots)
(-> arg0 num-knots)
)
(dotimes (s2-0 s3-0)
(set! (-> s5-0 quad) (-> s4-0 quad))
(curve-evaluate!
s4-0
(/ (the float (+ s2-0 1)) (the float s3-0))
(-> arg0 cverts)
(-> arg0 num-cverts)
(-> arg0 knots)
(-> arg0 num-knots)
)
(+! f30-0 (vector-vector-distance s5-0 s4-0))
s4-0
(-> arg0 knots 0)
(-> arg0 cverts)
(-> arg0 num-cverts)
(-> arg0 knots)
(-> arg0 num-knots)
)
(dotimes (s2-0 s3-0)
(set! (-> s5-0 quad) (-> s4-0 quad))
(curve-evaluate!
s4-0
(/ (the float (+ s2-0 1)) (the float s3-0))
(-> arg0 cverts)
(-> arg0 num-cverts)
(-> arg0 knots)
(-> arg0 num-knots)
)
(+! f30-0 (vector-vector-distance s5-0 s4-0))
)
f30-0
)
f30-0
)
)
(defun curve-copy! ((arg0 curve) (arg1 curve))

View File

@ -1045,6 +1045,13 @@
;; method 10 level
(defmethod is-object-visible? level ((obj level) (arg0 int))
"Is arg0 visible? Note that this will return #f if the visibility data is not loaded."
;; note : pc port added option to show every actor regardless
(#when PC_PORT
(cond
((actor-force-visible? *pc-settings*) #t)
(else
;; check the vis bits!
(let* (;; lwu v1, 388(a0)
(vis-data (-> obj vis-bits))
@ -1065,6 +1072,10 @@
;; movz v0, s7, v1 if (csw >= 0) result = false
;;(format 0 "vis check ~D ~X ~X ~A~%" arg0 vis-byte check-sign-word (>= check-sign-word 0))
(< check-sign-word 0)
)
)
)
)
)

View File

@ -84,13 +84,13 @@
(cond
(data
;; success, we got some data
(set! (-> obj curve cverts) data)
(set! (-> obj cverts) (the-as (inline-array vector) data))
(set! (-> obj curve num-cverts) (the-as int (-> tag elt-count)))
)
(else
;; did not find the data. Set flags and zero stuff
(logior! (-> obj flags) (path-control-flag not-found))
(set! (-> obj curve cverts) (the-as pointer #f))
(set! (-> obj cverts) (the-as (inline-array vector) #f))
(set! (-> obj curve num-cverts) 0)
)
)
@ -153,7 +153,7 @@
;; couldn't get anything, mark as bad.
(logior! (-> obj flags) (path-control-flag not-found))
(set! (-> obj flags) (logior (-> obj flags) (path-control-flag not-found)))
(set! (-> obj curve cverts) (the-as pointer #f))
(set! (-> obj curve cverts) (the-as (inline-array vector) #f))
(set! (-> obj curve num-cverts) 0)
)
)

View File

@ -5,338 +5,233 @@
;; name in dgo: path
;; dgos: GAME, ENGINE
;; definition for method 9 of type path-control
;; INFO: Return type mismatch int vs none.
;; DECOMP BEGINS
(defmethod dummy-9 path-control ((obj path-control))
(cond
((nonzero? (logand (-> obj flags) (path-control-flag not-found)))
(when
(and
(type-type? (-> obj process type) process-drawable)
*display-entity-errors*
)
(let ((s5-0 add-debug-text-3d)
(s4-0 #t)
(s3-0 68)
)
(format
(clear *temp-string*)
"path data error in ~S"
(-> obj process name)
)
(s5-0
s4-0
(the-as bucket-id s3-0)
*temp-string*
(-> obj process root trans)
(font-color orange-red)
(the-as vector2h #f)
)
)
)
)
((let ((a0-5 obj))
(and
*display-path-marks*
(logtest? (-> a0-5 flags) (path-control-flag display))
)
)
(dotimes (s5-1 (-> obj curve num-cverts))
(let ((s4-1 (-> obj cverts s5-1)))
(if
(and
(nonzero? (logand (-> obj flags) (path-control-flag draw-line)))
(< s5-1 (+ (-> obj curve num-cverts) -1))
)
(add-debug-line
#t
(bucket-id debug-draw1)
s4-1
(-> obj cverts (+ s5-1 1))
(new 'static 'rgba :r #xff :g #x80 :a #x80)
#f
(the-as rgba -1)
)
)
(if (nonzero? (logand (-> obj flags) (path-control-flag draw-point)))
(add-debug-x
#t
(bucket-id debug-draw1)
s4-1
(new 'static 'rgba :r #xff :a #x80)
)
)
(when (nonzero? (logand (-> obj flags) (path-control-flag draw-text)))
(let ((s3-1 add-debug-text-3d)
(s2-1 #t)
(s1-0 68)
((logtest? (-> obj flags) (path-control-flag not-found))
(when (and (type-type? (-> obj process type) process-drawable) *display-entity-errors*)
(let ((s5-0 add-debug-text-3d)
(s4-0 #t)
(s3-0 68)
)
(format (clear *temp-string*) "~D" s5-1)
(s3-1
s2-1
(the-as bucket-id s1-0)
*temp-string*
s4-1
(font-color bright-orange-red)
(the-as vector2h #f)
(format (clear *temp-string*) "path data error in ~S" (-> obj process name))
(s5-0
s4-0
(the-as bucket-id s3-0)
*temp-string*
(-> obj process root trans)
(font-color orange-red)
(the-as vector2h #f)
)
)
)
)
((let ((a0-5 obj))
(and *display-path-marks* (logtest? (-> a0-5 flags) (path-control-flag display)))
)
(dotimes (s5-1 (-> obj curve num-cverts))
(let ((s4-1 (-> obj cverts s5-1)))
(if (and (logtest? (-> obj flags) (path-control-flag draw-line)) (< s5-1 (+ (-> obj curve num-cverts) -1)))
(add-debug-line
#t
(bucket-id debug-draw1)
s4-1
(-> obj cverts (+ s5-1 1))
(new 'static 'rgba :r #xff :g #x80 :a #x80)
#f
(the-as rgba -1)
)
)
(if (logtest? (-> obj flags) (path-control-flag draw-point))
(add-debug-x #t (bucket-id debug-draw1) s4-1 (new 'static 'rgba :r #xff :a #x80))
)
(when (logtest? (-> obj flags) (path-control-flag draw-text))
(let ((s3-1 add-debug-text-3d)
(s2-1 #t)
(s1-0 68)
)
(format (clear *temp-string*) "~D" s5-1)
(s3-1 s2-1 (the-as bucket-id s1-0) *temp-string* s4-1 (font-color bright-orange-red) (the-as vector2h #f))
)
)
)
)
)
)
)
)
)
0
(none)
)
;; definition for method 16 of type path-control
(defmethod path-distance path-control ((obj path-control))
(let ((f30-0 0.0))
(dotimes (s5-0 (+ (-> obj curve num-cverts) -1))
(+!
f30-0
(vector-vector-distance (-> obj cverts s5-0) (-> obj cverts (+ s5-0 1)))
)
(dotimes (s5-0 (+ (-> obj curve num-cverts) -1))
(+! f30-0 (vector-vector-distance (-> obj cverts s5-0) (-> obj cverts (+ s5-0 1))))
)
f30-0
)
f30-0
)
)
;; definition for method 16 of type curve-control
(defmethod path-distance curve-control ((obj curve-control))
(let ((f0-0 (-> obj curve length)))
(when (= f0-0 0.0)
(set! f0-0 (curve-length (the-as curve (&-> obj cverts))))
(set! (-> obj curve length) f0-0)
(when (= f0-0 0.0)
(set! f0-0 (curve-length (the-as curve (&-> obj cverts))))
(set! (-> obj curve length) f0-0)
)
f0-0
)
f0-0
)
)
;; definition for method 10 of type path-control
;; Used lq/sq
(defmethod
eval-path-curve-div!
path-control
((obj path-control) (arg0 vector) (arg1 float) (arg2 symbol))
(defmethod eval-path-curve-div! path-control ((obj path-control) (arg0 vector) (arg1 float) (arg2 symbol))
(let ((a1-1 (-> obj curve num-cverts))
(f0-3 (the float (the int arg1)))
)
(cond
((< arg1 0.0)
(set! (-> arg0 quad) (-> obj cverts 0 quad))
)
((>= f0-3 (the float (+ a1-1 -1)))
(set! (-> arg0 quad) (-> obj cverts (+ a1-1 -1) quad))
)
(else
(if (or (= arg2 'exact) (= f0-3 arg1))
(set! (-> arg0 quad) (-> obj cverts (the int f0-3) quad))
(vector-lerp!
arg0
(-> obj cverts (the int f0-3))
(-> obj cverts (the int (+ 1.0 f0-3)))
(- arg1 f0-3)
(cond
((< arg1 0.0)
(set! (-> arg0 quad) (-> obj cverts 0 quad))
)
((>= f0-3 (the float (+ a1-1 -1)))
(set! (-> arg0 quad) (-> obj cverts (+ a1-1 -1) quad))
)
((or (= arg2 'exact) (= f0-3 arg1))
(set! (-> arg0 quad) (-> obj cverts (the int f0-3) quad))
)
(else
(vector-lerp! arg0 (-> obj cverts (the int f0-3)) (-> obj cverts (the int (+ 1.0 f0-3))) (- arg1 f0-3))
)
)
)
)
)
arg0
)
;; definition for method 11 of type path-control
;; Used lq/sq
(defmethod get-random-point path-control ((obj path-control) (arg0 vector))
(with-pp
(cond
((> (-> obj curve num-cverts) 0)
(let ((s4-0 (rand-vu-int-count (-> obj curve num-cverts))))
(when *run-time-assert-enable*
(set-pos *__private-assert-info* "path" (the-as uint 83) (the-as uint 6))
(__assert-zero-lim-range-int
s4-0
(-> obj curve num-cverts)
"rand-index"
"(-> obj num-cverts)"
)
)
(set! (-> arg0 quad) (-> obj cverts s4-0 quad))
)
)
(else
(format
#t
"WARNING: method get-random-point called on a path-control object with no vertices.~%"
)
(if pp
(format #t "current process is ~A~%" (-> pp name))
)
(set! (-> arg0 quad) (-> *null-vector* quad))
)
)
arg0
)
)
;; definition for method 13 of type path-control
(defmethod
eval-path-curve!
path-control
((obj path-control) (arg0 vector) (arg1 float) (arg2 symbol))
(eval-path-curve-div!
obj
arg0
(* arg1 (the float (+ (-> obj curve num-cverts) -1)))
arg2
)
)
;; definition for method 13 of type curve-control
;; INFO: Return type mismatch object vs vector.
(defmethod
eval-path-curve!
curve-control
((obj curve-control) (arg0 vector) (arg1 float) (arg2 symbol))
(the-as
vector
(if (nonzero? (logand (-> obj flags) (path-control-flag not-found)))
0.0
(curve-evaluate!
arg0
arg1
(the-as pointer (-> obj cverts))
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
)
)
)
;; definition for method 10 of type curve-control
;; INFO: Return type mismatch object vs vector.
(defmethod
eval-path-curve-div!
curve-control
((obj curve-control) (arg0 vector) (arg1 float) (arg2 symbol))
(the-as
vector
(if (nonzero? (logand (-> obj flags) (path-control-flag not-found)))
0.0
(curve-evaluate!
arg0
(/ arg1 (the float (+ (-> obj curve num-cverts) -1)))
(the-as pointer (-> obj cverts))
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
)
)
)
;; definition for method 12 of type path-control
(defmethod
TODO-RENAME-12
path-control
((obj path-control) (arg0 vector) (arg1 float))
(when (zero? (logand (-> obj flags) (path-control-flag not-found)))
(let ((v1-3 (-> obj curve num-cverts))
(f0-3 (the float (the int arg1)))
(cond
((> (-> obj curve num-cverts) 0)
(let ((s4-0 (rand-vu-int-count (-> obj curve num-cverts))))
(when *run-time-assert-enable*
(set-pos *__private-assert-info* "path" (the-as uint 83) (the-as uint 6))
(__assert-zero-lim-range-int s4-0 (-> obj curve num-cverts) "rand-index" "(-> obj num-cverts)")
)
(set! (-> arg0 quad) (-> obj cverts s4-0 quad))
)
(cond
((< v1-3 2)
)
((< arg1 0.0)
(vector-! arg0 (-> obj cverts 1) (-> obj cverts 0))
)
(else
(let ((f0-4 (fmin f0-3 (the float (+ v1-3 -2)))))
(vector-!
arg0
(-> obj cverts (the int (+ 1.0 f0-4)))
(-> obj cverts (the int f0-4))
)
(else
(format #t "WARNING: method get-random-point called on a path-control object with no vertices.~%")
(if pp
(format #t "current process is ~A~%" (-> pp name))
)
(set! (-> arg0 quad) (-> *null-vector* quad))
)
)
)
)
arg0
)
)
(vector-normalize! arg0 1.0)
)
;; definition for method 14 of type path-control
(defmethod
TODO-RENAME-14
path-control
((obj path-control) (arg0 vector) (arg1 float))
(TODO-RENAME-12
obj
arg0
(* arg1 (the float (+ (-> obj curve num-cverts) -1)))
)
(defmethod eval-path-curve! path-control ((obj path-control) (arg0 vector) (arg1 float) (arg2 symbol))
(eval-path-curve-div! obj arg0 (* arg1 (the float (+ (-> obj curve num-cverts) -1))) arg2)
)
;; definition for method 14 of type curve-control
(defmethod
TODO-RENAME-14
curve-control
((obj curve-control) (arg0 vector) (arg1 float))
(defmethod eval-path-curve! curve-control ((obj curve-control) (arg0 vector) (arg1 float) (arg2 symbol))
(the-as vector (if (logtest? (-> obj flags) (path-control-flag not-found))
0.0
(curve-evaluate!
arg0
arg1
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
)
)
)
(defmethod eval-path-curve-div! curve-control ((obj curve-control) (arg0 vector) (arg1 float) (arg2 symbol))
(the-as vector (if (logtest? (-> obj flags) (path-control-flag not-found))
0.0
(curve-evaluate!
arg0
(/ arg1 (the float (+ (-> obj curve num-cverts) -1)))
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
)
)
)
(defmethod TODO-RENAME-12 path-control ((obj path-control) (arg0 vector) (arg1 float))
(when (zero? (logand (-> obj flags) (path-control-flag not-found)))
(let ((s4-0 (new 'stack-no-clear 'vector)))
(curve-evaluate!
arg0
arg1
(the-as pointer (-> obj cverts))
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
(cond
((< arg1 0.99)
(curve-evaluate!
s4-0
(+ 0.01 arg1)
(the-as pointer (-> obj cverts))
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
(vector-! arg0 s4-0 arg0)
(let ((v1-3 (-> obj curve num-cverts))
(f0-3 (the float (the int arg1)))
)
(cond
((< v1-3 2)
)
((< arg1 0.0)
(vector-! arg0 (-> obj cverts 1) (-> obj cverts 0))
)
(else
(let ((f0-4 (fmin f0-3 (the float (+ v1-3 -2)))))
(vector-! arg0 (-> obj cverts (the int (+ 1.0 f0-4))) (-> obj cverts (the int f0-4)))
)
)
)
)
(else
(curve-evaluate!
s4-0
(+ -0.01 arg1)
(the-as pointer (-> obj cverts))
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
(vector-! arg0 arg0 s4-0)
)
)
)
)
(vector-normalize! arg0 1.0)
)
;; definition for method 12 of type curve-control
(defmethod
TODO-RENAME-12
curve-control
((obj curve-control) (arg0 vector) (arg1 float))
(TODO-RENAME-14
obj
arg0
(/ arg1 (the float (+ (-> obj curve num-cverts) -1)))
)
(defmethod TODO-RENAME-14 path-control ((obj path-control) (arg0 vector) (arg1 float))
(TODO-RENAME-12 obj arg0 (* arg1 (the float (+ (-> obj curve num-cverts) -1))))
)
(defmethod TODO-RENAME-14 curve-control ((obj curve-control) (arg0 vector) (arg1 float))
(when (zero? (logand (-> obj flags) (path-control-flag not-found)))
(let ((s4-0 (new 'stack-no-clear 'vector)))
(curve-evaluate!
arg0
arg1
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
(cond
((< arg1 0.99)
(curve-evaluate!
s4-0
(+ 0.01 arg1)
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
(vector-! arg0 s4-0 arg0)
)
(else
(curve-evaluate!
s4-0
(+ -0.01 arg1)
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
)
(vector-! arg0 arg0 s4-0)
)
)
)
)
(vector-normalize! arg0 1.0)
)
(defmethod TODO-RENAME-12 curve-control ((obj curve-control) (arg0 vector) (arg1 float))
(TODO-RENAME-14 obj arg0 (/ arg1 (the float (+ (-> obj curve num-cverts) -1))))
)
;; definition for method 19 of type path-control
;; Used lq/sq
(defmethod TODO-RENAME-19 path-control ((obj path-control))
(let ((s5-0 (new 'stack-no-clear 'vector))
(s4-0 (new 'stack-no-clear 'vector))
@ -344,120 +239,83 @@
(f30-0 4096000000.0)
(f28-0 0.0)
)
(let ((s2-0 (new 'stack-no-clear 'vector)))
(set! (-> s3-0 quad) (-> (target-pos 0) quad))
(set! (-> s3-0 y) 0.0)
(eval-path-curve-div! obj s4-0 0.0 'interp)
(set! (-> s4-0 y) 0.0)
(dotimes (s1-1 (+ (-> obj curve num-cverts) -1))
(set! (-> s5-0 quad) (-> s4-0 quad))
(eval-path-curve-div! obj s4-0 (the float (+ s1-1 1)) 'interp)
(set! (-> s4-0 y) 0.0)
(let ((f0-5 (vector-segment-distance-point! s3-0 s5-0 s4-0 s2-0)))
(when (< f0-5 f30-0)
(set! f30-0 f0-5)
(set!
f28-0
(+
(/
(vector-vector-xz-distance s2-0 s5-0)
(vector-vector-xz-distance s4-0 s5-0)
(let ((s2-0 (new 'stack-no-clear 'vector)))
(set! (-> s3-0 quad) (-> (target-pos 0) quad))
(set! (-> s3-0 y) 0.0)
(eval-path-curve-div! obj s4-0 0.0 'interp)
(set! (-> s4-0 y) 0.0)
(dotimes (s1-1 (+ (-> obj curve num-cverts) -1))
(set! (-> s5-0 quad) (-> s4-0 quad))
(eval-path-curve-div! obj s4-0 (the float (+ s1-1 1)) 'interp)
(set! (-> s4-0 y) 0.0)
(let ((f0-5 (vector-segment-distance-point! s3-0 s5-0 s4-0 s2-0)))
(when (< f0-5 f30-0)
(set! f30-0 f0-5)
(set! f28-0
(+ (/ (vector-vector-xz-distance s2-0 s5-0) (vector-vector-xz-distance s4-0 s5-0)) (the float s1-1))
)
)
)
(the float s1-1)
)
)
)
)
)
f28-0
)
f28-0
)
)
;; definition for method 20 of type path-control
(defmethod TODO-RENAME-20 path-control ((obj path-control))
(/ (TODO-RENAME-19 obj) (the float (+ (-> obj curve num-cverts) -1)))
)
;; definition for method 9 of type curve-control
;; INFO: Return type mismatch int vs none.
(defmethod dummy-9 curve-control ((obj curve-control))
(cond
((nonzero? (logand (-> obj flags) (path-control-flag not-found)))
(when
(and
(type-type? (-> obj process type) process-drawable)
*display-entity-errors*
)
(let ((s5-0 add-debug-text-3d)
(s4-0 #t)
(s3-0 68)
)
(format
(clear *temp-string*)
"curve data error in ~S"
(-> obj process name)
)
(s5-0
s4-0
(the-as bucket-id s3-0)
*temp-string*
(-> obj process root trans)
(font-color orange-red)
(the-as vector2h #f)
)
)
)
)
((let ((a0-5 obj))
(and
*display-path-marks*
(logtest? (-> a0-5 flags) (path-control-flag display))
)
)
(if
(and
(logtest? (-> obj flags) (path-control-flag draw-line))
(> (-> obj curve num-cverts) 0)
)
(add-debug-curve2
#t
(bucket-id debug-draw1)
(the-as curve (&-> obj cverts))
(new 'static 'rgba :r #xff :g #x80 :a #x80)
#f
)
)
(dotimes (s5-1 (-> obj curve num-cverts))
(let ((s4-1 (-> obj cverts s5-1)))
(if (nonzero? (logand (-> obj flags) (path-control-flag draw-point)))
(add-debug-x
#t
(bucket-id debug-draw1)
s4-1
(new 'static 'rgba :r #xff :a #x80)
)
)
(when (nonzero? (logand (-> obj flags) (path-control-flag draw-text)))
(let ((s3-1 add-debug-text-3d)
(s2-1 #t)
(s1-0 68)
((logtest? (-> obj flags) (path-control-flag not-found))
(when (and (type-type? (-> obj process type) process-drawable) *display-entity-errors*)
(let ((s5-0 add-debug-text-3d)
(s4-0 #t)
(s3-0 68)
)
(format (clear *temp-string*) "~D" s5-1)
(s3-1
s2-1
(the-as bucket-id s1-0)
*temp-string*
s4-1
(font-color bright-orange-red)
(the-as vector2h #f)
(format (clear *temp-string*) "curve data error in ~S" (-> obj process name))
(s5-0
s4-0
(the-as bucket-id s3-0)
*temp-string*
(-> obj process root trans)
(font-color orange-red)
(the-as vector2h #f)
)
)
)
)
((let ((a0-5 obj))
(and *display-path-marks* (logtest? (-> a0-5 flags) (path-control-flag display)))
)
(if (and (logtest? (-> obj flags) (path-control-flag draw-line)) (> (-> obj curve num-cverts) 0))
(add-debug-curve2
#t
(bucket-id debug-draw1)
(the-as curve (&-> obj cverts))
(new 'static 'rgba :r #xff :g #x80 :a #x80)
#f
)
)
(dotimes (s5-1 (-> obj curve num-cverts))
(let ((s4-1 (-> obj cverts s5-1)))
(if (logtest? (-> obj flags) (path-control-flag draw-point))
(add-debug-x #t (bucket-id debug-draw1) s4-1 (new 'static 'rgba :r #xff :a #x80))
)
(when (logtest? (-> obj flags) (path-control-flag draw-text))
(let ((s3-1 add-debug-text-3d)
(s2-1 #t)
(s1-0 68)
)
(format (clear *temp-string*) "~D" s5-1)
(s3-1 s2-1 (the-as bucket-id s1-0) *temp-string* s4-1 (font-color bright-orange-red) (the-as vector2h #f))
)
)
)
)
)
)
)
)
)
0
(none)
)

View File

@ -232,6 +232,7 @@
(lod-force-ocean int8) ;; ocean lod tier override
(lod-force-actor int8) ;; merc lod tier override
(force-actors? symbol) ;; see actor-force-visible?
(music-fade? symbol) ;; if off, music has no fade in
(use-vis? symbol) ;; if off, don't use vis trees. this MUST be off for custom (non-cropping) aspect ratios.
(skip-movies? symbol) ;; if on, enable cutscene skipping
@ -268,6 +269,7 @@
(set-aspect-ratio! (_type_ float) int)
(read-from-file (_type_ string) symbol)
(write-to-file (_type_ string) symbol)
(actor-force-visible? (_type_) symbol)
)
)
@ -412,6 +414,11 @@
(set! (-> obj secrets hud-counters?) #t)
(none))
(defmethod actor-force-visible? pc-settings ((obj pc-settings))
"return #t if actors should be visible regardless of vis."
(declare (inline))
(and (not (-> obj use-vis?)) (-> obj force-actors?))
)
)

View File

@ -155,6 +155,11 @@
)
)
)
(when (actor-force-visible? obj)
(set! (-> *ACTOR-bank* birth-dist) (meters 10000))
(set! (-> *ACTOR-bank* pause-dist) (meters 10000))
(set! (-> *ACTOR-bank* birth-max) 10000)
)
(none))
@ -600,7 +605,8 @@
(deftype entity-debug-inspect (basic)
(
(scroll-y int32)
(scroll-y int16)
(scroll-y-max int16)
(entity entity)
(show-actor-info symbol)
)
@ -617,6 +623,7 @@
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(set! (-> obj scroll-y) 0)
(set! (-> obj scroll-y-max) 0)
(set! (-> obj entity) (the entity #f))
(set! (-> obj show-actor-info) #f)
obj
@ -637,10 +644,13 @@
(defmethod update-pad entity-debug-inspect ((obj entity-debug-inspect) (pad-idx int))
"respond to pad inputs"
(if (cpad-pressed? pad-idx r1)
(1+! (-> obj scroll-y)))
;; scroll up
(if (cpad-pressed? pad-idx l1)
(set! (-> obj scroll-y) (max 0 (1- (-> obj scroll-y)))))
;; scroll down
(if (cpad-pressed? pad-idx r1)
(set! (-> obj scroll-y) (min (-> obj scroll-y-max) (1+ (-> obj scroll-y)))))
;; toggle actor info
(if (cpad-pressed? pad-idx l3)
(not! (-> obj show-actor-info)))

View File

@ -183,6 +183,11 @@
(vector<-cspace! s3-0 (-> s5-0 icons (logand s4-0 3) icon 0 node-list data v1-0))
(vector<-cspace! s2-0 (-> s5-0 icons (logand s4-0 3) icon 0 node-list data 3))
(vector-! s3-0 s3-0 s2-0)
(#when PC_PORT
(when (not (-> *pc-settings* use-vis?))
(*! (-> s3-0 x) (-> *video-parms* relative-x-scale))
)
)
(set! (-> arg2 vector 0 x) (* 48.0 (-> s3-0 x)))
(set! (-> arg2 vector 0 y) (* 60.0 (-> s3-0 y)))
(set! (-> arg2 vector 0 z) (* 32.0 (-> s3-0 z)))

View File

@ -621,7 +621,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro align-n (val n)
"align val to n-byte boundaries"
`(logand ,(- n) (+ (the-as int ,val) ,(- n 1)))
`(logand (- ,n) (+ (the-as int ,val) (- ,n 1)))
)
(defmacro align16 (val)

View File

@ -46,7 +46,11 @@
(defconstant PROCESS_STACK_SAVE_SIZE 256)
;; the size of the shared heap used by dynamically sized processes
(defconstant PROCESS_HEAP_SIZE (* 984 1024))
(#if PC_BIG_MEMORY
(defconstant PROCESS_HEAP_MULT 3) ;; 3x actors
(defconstant PROCESS_HEAP_MULT 1)
)
(defconstant PROCESS_HEAP_SIZE (* PROCESS_HEAP_MULT 984 1024))
;; -system-

View File

@ -122,9 +122,8 @@
;; make sure the scratchpad is 16kb aligned
(let* ((mem (new 'global 'array 'uint8 (* (+ 16 16) 1024)))
(aligned (logand (&+ mem 16384) (lognot 16383)))
)
(define *fake-scratchpad-data* aligned)
(define *fake-scratchpad-data* (the pointer (align-n mem (* 16 1024))))
)
;; We will move stacks on the scratchpad to here.
@ -2503,7 +2502,7 @@
(define *debug-dead-pool* (new 'debug 'dead-pool-heap '*debug-dead-pool* 768 (* 1024 1024)))
)
(define *nk-dead-pool* (new 'global 'dead-pool-heap '*nk-dead-pool* 768 PROCESS_HEAP_SIZE))
(define *nk-dead-pool* (new 'global 'dead-pool-heap '*nk-dead-pool* (* PROCESS_HEAP_MULT 768) PROCESS_HEAP_SIZE))
(define *default-dead-pool* (the dead-pool *nk-dead-pool*))
(define *pickup-dead-pool* (the dead-pool *nk-dead-pool*))

View File

@ -50,12 +50,6 @@ if (WIN32)
target_link_libraries(compiler mman)
endif ()
if (UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
elseif (WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2")
endif ()
add_executable(goalc main.cpp)
target_link_libraries(goalc common Zydis compiler)

View File

@ -127,7 +127,9 @@ std::vector<std::unordered_map<int, std::string>> parse(const goos::Object& data
throw std::runtime_error("Entry appears more than once");
}
map[id] = convert_to_jak1_encoding(entry.as_string()->data);
// TODO
auto font = get_font_bank(GameTextVersion::JAK1_V1);
map[id] = font->convert_utf8_to_game(entry.as_string()->data);
} else {
throw std::runtime_error("Each entry must be a string");
}

View File

@ -9,17 +9,21 @@
std::string disassemble_x86(u8* data, int len, u64 base_addr) {
std::string result;
ZydisDecoder decoder;
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_ADDRESS_WIDTH_64);
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64);
ZydisFormatter formatter;
ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_INTEL);
ZydisDecodedInstruction instr;
ZydisDecodedOperand op[ZYDIS_MAX_OPERAND_COUNT_VISIBLE];
constexpr int print_buff_size = 512;
char print_buff[print_buff_size];
int offset = 0;
while (ZYAN_SUCCESS(ZydisDecoderDecodeBuffer(&decoder, data + offset, len - offset, &instr))) {
while (ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, data + offset, len - offset, &instr, op,
ZYDIS_MAX_OPERAND_COUNT_VISIBLE,
ZYDIS_DFLAG_VISIBLE_OPERANDS_ONLY))) {
result += fmt::format("[0x{:x}] ", base_addr);
ZydisFormatterFormatInstruction(&formatter, &instr, print_buff, print_buff_size, base_addr);
ZydisFormatterFormatInstruction(&formatter, &instr, op, instr.operand_count_visible, print_buff,
print_buff_size, base_addr);
result += print_buff;
result += "\n";
@ -33,10 +37,11 @@ std::string disassemble_x86(u8* data, int len, u64 base_addr) {
std::string disassemble_x86(u8* data, int len, u64 base_addr, u64 highlight_addr) {
std::string result;
ZydisDecoder decoder;
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_ADDRESS_WIDTH_64);
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64);
ZydisFormatter formatter;
ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_INTEL);
ZydisDecodedInstruction instr;
ZydisDecodedOperand op[ZYDIS_MAX_OPERAND_COUNT_VISIBLE];
constexpr int print_buff_size = 512;
char print_buff[print_buff_size];
@ -46,9 +51,12 @@ std::string disassemble_x86(u8* data, int len, u64 base_addr, u64 highlight_addr
int mark_offset = int(highlight_addr - base_addr);
while (offset < len) {
char prefix = (offset == mark_offset) ? '-' : ' ';
if (ZYAN_SUCCESS(ZydisDecoderDecodeBuffer(&decoder, data + offset, len - offset, &instr))) {
if (ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, data + offset, len - offset, &instr, op,
ZYDIS_MAX_OPERAND_COUNT_VISIBLE,
ZYDIS_DFLAG_VISIBLE_OPERANDS_ONLY))) {
result += fmt::format("{:c} [0x{:x}] ", prefix, base_addr);
ZydisFormatterFormatInstruction(&formatter, &instr, print_buff, print_buff_size, base_addr);
ZydisFormatterFormatInstruction(&formatter, &instr, op, instr.operand_count_visible,
print_buff, print_buff_size, base_addr);
result += print_buff;
result += "\n";
offset += instr.length;
@ -76,10 +84,11 @@ std::string disassemble_x86_function(u8* data,
bool* had_failure) {
std::string result;
ZydisDecoder decoder;
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_ADDRESS_WIDTH_64);
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64);
ZydisFormatter formatter;
ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_INTEL);
ZydisDecodedInstruction instr;
ZydisDecodedOperand op[ZYDIS_MAX_OPERAND_COUNT_VISIBLE];
const auto& irs = fenv->code();
@ -102,7 +111,9 @@ std::string disassemble_x86_function(u8* data,
int mark_offset = int(highlight_addr - base_addr);
while (offset < len) {
char prefix = (offset == mark_offset) ? '-' : ' ';
if (ZYAN_SUCCESS(ZydisDecoderDecodeBuffer(&decoder, data + offset, len - offset, &instr))) {
if (ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, data + offset, len - offset, &instr, op,
ZYDIS_MAX_OPERAND_COUNT_VISIBLE,
ZYDIS_DFLAG_VISIBLE_OPERANDS_ONLY))) {
bool warn_messed_up = false;
bool print_ir = false;
// we should have a next instruction.
@ -168,7 +179,8 @@ std::string disassemble_x86_function(u8* data,
line += fmt::format("{:c} [0x{:X}] ", prefix, base_addr);
}
ZydisFormatterFormatInstruction(&formatter, &instr, print_buff, print_buff_size, base_addr);
ZydisFormatterFormatInstruction(&formatter, &instr, op, instr.operand_count_visible,
print_buff, print_buff_size, base_addr);
line += print_buff;
if (print_ir && current_ir_idx >= 0 && current_ir_idx < int(irs.size())) {

View File

@ -0,0 +1,14 @@
import zipfile
p2s_name = input("Select savestate (.p2s) file (drag and drop):")
out_dir = input("Select output directory:")
if (p2s_name.startswith('"')):
p2s_name = p2s_name[1:len(p2s_name)-1]
if (out_dir.startswith('"')):
out_dir = out_dir[1:len(out_dir)-1]
with zipfile.ZipFile(p2s_name, 'r') as p2s:
p2s.extractall(out_dir + "/savestate_out")
print("Savestate extracted")

View File

@ -396,10 +396,8 @@
)
)
(arg3
(set! (-> obj vec 0 quad) (-> (the-as (pointer uint128) (&+ (-> arg3 cverts) 0))))
(set! (-> obj vec 1 quad)
(-> (the-as (pointer uint128) (&+ (-> arg3 cverts) (* (+ (-> arg3 num-cverts) -1) 16))))
)
(set! (-> obj vec 0 quad) (-> arg3 cverts 0 quad))
(set! (-> obj vec 1 quad) (-> arg3 cverts (+ (-> arg3 num-cverts) -1) quad))
)
(else
(return #f)

View File

@ -753,7 +753,7 @@
)
)
(when a0-2
(set! (-> arg0 cverts) a0-2)
(set! (-> arg0 cverts) (the-as (inline-array vector) a0-2))
(set! (-> arg0 num-cverts) (the-as int (-> sv-16 elt-count)))
(when (< 256 (-> arg0 num-cverts))
(format
@ -770,7 +770,7 @@
)
)
(when a0-6
(set! (-> arg0 knots) (the-as (inline-array vector) a0-6))
(set! (-> arg0 knots) (the-as (pointer float) a0-6))
(set! (-> arg0 num-knots) (the-as int (-> sv-32 elt-count)))
(set! s5-0 #t)
)

View File

@ -1118,7 +1118,14 @@
;; definition (debug) for function add-debug-curve
;; Used lq/sq
(defun-debug add-debug-curve ((arg0 symbol) (arg1 bucket-id) (arg2 pointer) (arg3 int) (arg4 (inline-array vector)) (arg5 int) (arg6 rgba))
(defun-debug add-debug-curve ((arg0 symbol)
(arg1 bucket-id)
(arg2 (inline-array vector))
(arg3 int)
(arg4 (pointer float))
(arg5 int)
(arg6 rgba)
)
(local-vars (sv-48 vector) (sv-64 int) (sv-80 int))
(if (not arg0)
(return #f)
@ -1127,7 +1134,7 @@
(set! sv-48 (new 'stack-no-clear 'vector))
(set! (-> sv-48 quad) (the-as uint128 0))
(set! sv-64 (* arg3 4))
(curve-evaluate! sv-48 (-> arg4 0 x) arg2 arg3 arg4 arg5)
(curve-evaluate! sv-48 (-> arg4 0) arg2 arg3 arg4 arg5)
(set! sv-80 0)
(while (< sv-80 sv-64)
(set! (-> s0-0 quad) (-> sv-48 quad))

View File

@ -3183,7 +3183,7 @@
)
;; definition for function dm-give-cell
;; INFO: Return type mismatch int vs none.
;; INFO: Return type mismatch game-task vs none.
(defun dm-give-cell ((arg0 game-task))
(send-event *target* 'get-pickup 6 (the float arg0))
(close-specific-task! arg0 (task-status need-resolution))

View File

@ -285,8 +285,8 @@
;; definition of type frame-stats
(deftype frame-stats (structure)
((field-time uint64 2 :offset-assert 0)
(field int32 :offset-assert 16)
((field-time int64 2 :offset-assert 0)
(field int32 :offset-assert 16)
)
:method-count-assert 9
:size-assert #x14

View File

@ -43,9 +43,9 @@
(:methods
(current-task (_type_) game-task 9)
(current-status (_type_) task-status 10)
(close-current! (_type_) none 11)
(close-status! (_type_ task-status) int 12)
(first-any (_type_ symbol) int 13)
(close-current! (_type_) game-task 11)
(close-status! (_type_ task-status) game-task 12)
(first-any (_type_ symbol) game-task 13)
(reset! (_type_ symbol symbol) int 14)
(closed? (_type_ game-task task-status) symbol 15)
(get-reminder (_type_ int) int 16)

File diff suppressed because it is too large Load Diff

View File

@ -3,9 +3,9 @@
;; definition of type curve
(deftype curve (structure)
((cverts pointer :offset-assert 0)
((cverts (inline-array vector) :offset-assert 0)
(num-cverts int32 :offset-assert 4)
(knots (inline-array vector) :offset-assert 8)
(knots (pointer float) :offset-assert 8)
(num-knots int32 :offset-assert 12)
(length float :offset-assert 16)
)

View File

@ -985,7 +985,7 @@
;; definition for function calculate-basis-functions-vector!
;; WARN: Unsupported inline assembly instruction kind - [sll v1, a1, 2]
;; WARN: Unsupported inline assembly instruction kind - [addu v1, a3, v1]
(defun calculate-basis-functions-vector! ((arg0 (pointer float)) (arg1 int) (arg2 float) (arg3 (pointer float)))
(defun calculate-basis-functions-vector! ((arg0 vector) (arg1 int) (arg2 float) (arg3 (pointer float)))
(local-vars (v1-0 int) (v1-1 object))
(.sll v1-0 arg1 2)
(let ((a1-1 #x3f800000)
@ -1032,10 +1032,10 @@
(f2-5 (+ (* f3-1 f1-2) f2-4))
(f0-4 (* f0-3 f1-2))
)
(set! (-> arg0 0) f4-1)
(set! (-> arg0 1) f5-4)
(set! (-> arg0 2) f2-5)
(set! (-> arg0 3) f0-4)
(set! (-> arg0 x) f4-1)
(set! (-> arg0 y) f5-4)
(set! (-> arg0 z) f2-5)
(set! (-> arg0 w) f0-4)
)
)
)
@ -1045,7 +1045,7 @@
;; definition for function curve-evaluate!
;; WARN: Unsupported inline assembly instruction kind - [addiu v1, s3, -3]
;; WARN: Unsupported inline assembly instruction kind - [sll v1, v1, 4]
(defun curve-evaluate! ((arg0 vector) (arg1 float) (arg2 pointer) (arg3 int) (arg4 (inline-array vector)) (arg5 int))
(defun curve-evaluate! ((arg0 vector) (arg1 float) (arg2 (inline-array vector)) (arg3 int) (arg4 (pointer float)) (arg5 int))
(local-vars (v1-7 int) (v1-8 int) (v1-10 float) (s3-0 int))
(rlet ((acc :class vf)
(vf0 :class vf)
@ -1057,10 +1057,10 @@
(vf6 :class vf)
)
(init-vf0-vector)
(let ((s4-0 (new 'static 'array float 4 0.0 0.0 0.0 0.0)))
(let ((s4-0 (new 'static 'vector)))
0
(let* ((f0-0 (-> arg4 0 x))
(f1-0 (-> (&-> arg4 0 data (+ arg5 -1)) 0))
(let* ((f0-0 (-> arg4 0))
(f1-0 (-> arg4 (+ arg5 -1)))
(a2-1 (fmax (fmin (* arg1 f1-0) f1-0) f0-0))
)
(let* ((a1-1 (+ arg5 -5))
@ -1069,44 +1069,47 @@
(v1-5 arg4)
(f0-3 f0-2)
)
(b! (= f0-3 (-> (&-> v1-5 0 data (+ a1-1 1)) 0)) cfg-11 :delay (set! s3-0 a1-1))
(let ((a0-4 (the int f0-3)))
(let* ((t1-1 (+ a0-4 3))
(t2-1 (&-> v1-5 0 data t1-1))
(f1-4 (-> t2-1 0))
(f2-3 (-> t2-1 1))
)
(b! (> f1-4 f0-3) cfg-4)
(b! (>= f0-3 f2-3) cfg-4 :delay (set! s3-0 t1-1))
)
(b! #t cfg-11 :delay (nop!))
(label cfg-4)
(let ((a3-2 a3-1)
(a1-2 (+ a1-1 1))
(b! (= f0-3 (-> v1-5 (+ a1-1 1))) cfg-11 :delay (set! s3-0 a1-1))
(let* ((a0-4 (the int f0-3))
(t1-1 (+ a0-4 3))
(t2-1 (+ (* t1-1 4) (the-as int v1-5)))
(f1-4 (dynamic-array-field-access t2-1 PLACEHOLDER))
(f2-3 (-> t2-1 1))
)
(cond
((<= f1-4 f0-3)
(b! (>= f0-3 f2-3) cfg-4 :delay (set! s3-0 t1-1))
)
(else
(label cfg-4)
(let ((a3-2 a3-1)
(a1-2 (+ a1-1 1))
)
(label cfg-5)
(let ((t1-3 (/ (+ a3-2 a1-2) 2)))
(let ((t2-3 (&+ v1-5 (* t1-3 4))))
(b! (>= f0-3 (dynamic-array-field-access t2-3 PLACEHOLDER)) cfg-7)
(b! #t cfg-5 :delay (set! a1-2 t1-3))
(label cfg-7)
(b! (< f0-3 (-> t2-3 1)) cfg-9)
)
(b! #t cfg-5 :delay (set! a3-2 t1-3))
(label cfg-9)
(set! s3-0 t1-3)
)
)
(label cfg-5)
(let ((t1-3 (/ (+ a3-2 a1-2) 2)))
(let ((t2-3 (&-> v1-5 0 data t1-3)))
(b! (>= f0-3 (-> t2-3 0)) cfg-7)
(b! #t cfg-5 :delay (set! a1-2 t1-3))
(label cfg-7)
(b! (< f0-3 (-> t2-3 1)) cfg-9)
)
(b! #t cfg-5 :delay (set! a3-2 t1-3))
(label cfg-9)
(set! s3-0 t1-3)
(b! (= s3-0 a0-4) cfg-11 :delay (nop!))
(nop!)
(nop!)
)
)
(b! (= s3-0 a0-4) cfg-11 :delay (nop!))
)
)
(nop!)
(nop!)
(label cfg-11)
(calculate-basis-functions-vector! s4-0 s3-0 a2-1 (the-as (pointer float) arg4))
(calculate-basis-functions-vector! s4-0 s3-0 a2-1 arg4)
)
(.addiu v1-7 s3-0 -3)
(.lvf vf6 s4-0)
(.lvf vf6 (&-> s4-0 quad))
)
(.sll v1-8 v1-7 4)
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
@ -1157,7 +1160,7 @@
)
(curve-evaluate!
s4-0
(-> arg0 knots 0 x)
(-> arg0 knots 0)
(-> arg0 cverts)
(-> arg0 num-cverts)
(-> arg0 knots)

View File

@ -143,7 +143,7 @@
(curve-evaluate!
arg0
arg1
(the-as pointer (-> obj cverts))
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
@ -160,7 +160,7 @@
(curve-evaluate!
arg0
(/ arg1 (the float (+ (-> obj curve num-cverts) -1)))
(the-as pointer (-> obj cverts))
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
@ -204,7 +204,7 @@
(curve-evaluate!
arg0
arg1
(the-as pointer (-> obj cverts))
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
@ -214,7 +214,7 @@
(curve-evaluate!
s4-0
(+ 0.01 arg1)
(the-as pointer (-> obj cverts))
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)
@ -225,7 +225,7 @@
(curve-evaluate!
s4-0
(+ -0.01 arg1)
(the-as pointer (-> obj cverts))
(-> obj cverts)
(-> obj curve num-cverts)
(-> obj curve knots)
(-> obj curve num-knots)

View File

@ -1484,6 +1484,133 @@
;; failed to figure out what this is:
(defstate plant-boss-intro (plant-boss)
:code
(behavior ()
(set-setting! *setting-control* self 'music 'danger (-> (new 'static 'array float 1 0.0) 0) 0)
(send-event *target* 'reset-pickup 'eco)
(let ((v1-9 (-> self entity extra perm)))
(logior! (-> v1-9 status) (entity-perm-status user-set-from-cstage))
(b! (zero? (-> v1-9 user-int8 2)) cfg-5 :delay (empty-form))
)
(ja-channel-push! 1 150)
(let ((gp-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 10))
num-func-identity
)
(set! (-> gp-0 frame-num) (ja-aframe (the-as float 510.0) 0))
)
(b! #t cfg-3 :delay (nop!))
(label cfg-2)
(set! (-> self energy)
(seek (-> self energy) (-> (new 'static 'array float 1 1.0) 0) (* 2.0 (-> *display* seconds-per-frame)))
)
(suspend)
(label cfg-3)
(let ((v1-22 (-> self skel channel)))
(b! (!= (-> self skel root-channel 0) v1-22) cfg-2 :delay (nop!))
)
(set-mode! (-> self neck) (joint-mod-handler-mode world-look-at))
(set-mode! (-> self body) (joint-mod-handler-mode world-look-at))
(b! #t cfg-17 :delay (nop!))
(label cfg-5)
(when (not (handle->process (-> self cam-tracker)))
(let ((gp-1 (get-process *default-dead-pool* camera-tracker #x4000)))
(set! (-> self cam-tracker)
(ppointer->handle (when gp-1
(let ((t9-9 (method-of-type camera-tracker activate)))
(t9-9 (the-as camera-tracker gp-1) self 'camera-tracker (the-as pointer #x70004000))
)
(run-now-in-process
gp-1
camera-tracker-init
(lambda :behavior camera-tracker
()
(while (not (process-grab? *target*))
(suspend)
)
(ambient-hint-spawn "gamcam28" (the-as vector #f) *entity-pool* 'ambient)
(send-event *camera* 'blend-from-as-fixed)
(camera-look-at (the-as pair (ppointer->process (-> self parent))) (the-as uint 13))
(camera-change-to "camera-220" 0 #f)
(while (let ((a1-4 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-4 from) self)
(set! (-> a1-4 num-params) 0)
(set! (-> a1-4 message) 'intro-done?)
(not (send-event-function *camera* a1-4))
)
(suspend)
)
(camera-change-to "camera-222" 600 #f)
(let ((gp-0 (-> *display* base-frame-counter)))
(until (>= (- (-> *display* base-frame-counter) gp-0) 600)
(suspend)
)
)
(while (not (process-release? (handle->process (-> self grab-target))))
(suspend)
)
(send-event *camera* 'blend-from-as-fixed)
(camera-look-at (the-as pair *target*) (the-as uint 0))
(camera-change-to (the-as string 'base) 150 #f)
(none)
)
)
(-> gp-1 ppointer)
)
)
)
)
)
(let ((v1-37 (-> self neck)))
(set! (-> v1-37 blend) 0.0)
)
(let ((v1-38 (-> self body)))
(set! (-> v1-38 blend) 0.0)
)
(set-mode! (-> self neck) (joint-mod-handler-mode world-look-at))
(set-mode! (-> self body) (joint-mod-handler-mode world-look-at))
(set! (-> self body flex-blend) 0.0)
(let ((a0-25 (-> self skel root-channel 0)))
(set! (-> a0-25 param 0) (-> (new 'static 'array float 1 1.0) 0))
(joint-control-channel-group! a0-25 (the-as art-joint-anim #f) num-func-loop!)
)
(ja-channel-push! 1 150)
(let ((gp-2 (-> self skel root-channel 0)))
(set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 10)))
(set! (-> gp-2 param 0) (ja-aframe (the-as float 510.0) 0))
(set! (-> gp-2 param 1) (-> (new 'static 'array float 1 1.0) 0))
(set! (-> gp-2 frame-num) 0.0)
(joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!)
)
(until (ja-done? 0)
(set! (-> self energy)
(seek (-> self energy) (-> (new 'static 'array float 1 1.0) 0) (* 0.2 (-> *display* seconds-per-frame)))
)
(ja-blend-eval)
(suspend)
(let ((gp-3 (-> self skel root-channel 0)))
(set! (-> gp-3 param 0) (ja-aframe (the-as float 510.0) 0))
(set! (-> gp-3 param 1) (-> (new 'static 'array float 1 1.0) 0))
(joint-control-channel-group-eval! gp-3 (the-as art-joint-anim #f) num-func-seek!)
)
)
(let ((a0-33 (-> self skel root-channel 0)))
(set! (-> a0-33 param 0) (the float (+ (-> a0-33 frame-group data 0 length) -1)))
(set! (-> a0-33 param 1) (-> (new 'static 'array float 1 1.0) 0))
(joint-control-channel-group! a0-33 (the-as art-joint-anim #f) num-func-seek!)
)
(let ((v1-77 (-> self entity extra perm)))
(logior! (-> v1-77 status) (entity-perm-status user-set-from-cstage))
(set! (-> v1-77 user-int8 2) 1)
)
(label cfg-17)
(set! (-> self cycle-count) 0)
(set! (-> self snap-count) 0)
(go plant-boss-reset 0)
(none)
)
:post
(the-as (function none :behavior plant-boss) ja-post)
)

View File

@ -623,6 +623,60 @@
)
:trans
(the-as (function none :behavior orbit-plat) plat-trans)
:code
(behavior ()
(set! (-> self plat-status) (the-as uint 2))
(set! (-> self is-reset?) #f)
(let ((gp-0 (new 'stack-no-clear 'vector)))
0.0
(let ((a0-0 (new 'stack-no-clear 'vector))
(s5-0 (new 'stack-no-clear 'vector))
)
(let ((v1-1 gp-0)
(a1-0 (-> self other))
)
(set! (-> v1-1 quad) (-> (the-as orbit-plat (if a1-0
(-> a1-0 extra process)
)
)
root-override
trans
quad
)
)
)
(vector-! a0-0 (-> self basetrans) gp-0)
(let ((f30-0 (vector-length a0-0)))
(set! (-> self reset-length) f30-0)
(let ((a0-1 (-> self skel root-channel 0)))
(set! (-> a0-1 param 0) 0.0)
(set! (-> a0-1 param 1) 1.0)
(joint-control-channel-group! a0-1 (the-as art-joint-anim #f) num-func-seek!)
)
(label cfg-3)
(dotimes (s4-0 2)
(get-rotate-point! s5-0 gp-0 (-> self basetrans) (the-as vector f30-0) (-> self rot-dir) 40960.0)
(b! (not (dummy-16 (-> self nav) s5-0)) cfg-6 :delay (empty-form))
(set! (-> self basetrans quad) (-> s5-0 quad))
(b! #t cfg-9 :delay (nop!))
(label cfg-6)
(set! (-> self rot-dir) (- (-> self rot-dir)))
)
)
)
)
(label cfg-9)
(suspend)
(when (not (ja-done? 0))
(let ((a0-7 (-> self skel root-channel 0)))
(set! (-> a0-7 param 0) 0.0)
(set! (-> a0-7 param 1) 1.0)
(joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!)
)
)
(b! #t cfg-3 :delay (nop!))
(none)
)
:post
(the-as (function none :behavior orbit-plat) plat-post)
)

View File

@ -219,22 +219,18 @@
"tie-near-init-engine",
"tie-near-end-buffer",
"(method 19 process-drawable)"
"(method 19 process-drawable)",
"curve-evaluate!"
],
"skip_compile_states": {
"cam-master-active": [
"event"
],
"plant-boss-intro": [
"code" // cfg
],
"energydoor-opened": [
"trans" // cfg
],
"orbit-plat-rotating": [
"code"
],
"ogreboss-missile-seek": [
"code" // inserts a bad cfg-1 goto
]

View File

@ -6,22 +6,29 @@ TEST(Zydis, Basic) {
// int3, return
u8 code[] = {0xcc, 0xc3};
ZydisDecoder decoder;
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_ADDRESS_WIDTH_64);
ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64);
ZydisFormatter formatter;
ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_INTEL);
ZydisDecodedInstruction instr;
ZydisDecodedOperand op[ZYDIS_MAX_OPERAND_COUNT_VISIBLE];
// should get first instruction
EXPECT_TRUE(ZYAN_SUCCESS(ZydisDecoderDecodeBuffer(&decoder, code, 2, &instr)));
EXPECT_TRUE(ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, code, 2, &instr, op,
ZYDIS_MAX_OPERAND_COUNT_VISIBLE,
ZYDIS_DFLAG_VISIBLE_OPERANDS_ONLY)));
char result[256];
ZydisFormatterFormatInstruction(&formatter, &instr, result, 256, 0);
ZydisFormatterFormatInstruction(&formatter, &instr, op, instr.operand_count_visible, result,
sizeof(result), 0);
EXPECT_EQ(std::string("int3"), result);
EXPECT_EQ(1, instr.length);
// should get second instruction
EXPECT_TRUE(ZYAN_SUCCESS(ZydisDecoderDecodeBuffer(&decoder, code + 1, 1, &instr)));
ZydisFormatterFormatInstruction(&formatter, &instr, result, 256, 0);
EXPECT_TRUE(ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, code + 1, 1, &instr, op,
ZYDIS_MAX_OPERAND_COUNT_VISIBLE,
ZYDIS_DFLAG_VISIBLE_OPERANDS_ONLY)));
ZydisFormatterFormatInstruction(&formatter, &instr, op, instr.operand_count_visible, result,
sizeof(result), 0);
EXPECT_EQ(std::string("ret"), result);
EXPECT_EQ(1, instr.length);
}
}

39
third-party/11zip/CMakeLists.txt generated vendored
View File

@ -1,39 +0,0 @@
project(elzip)
add_subdirectory(extlibs/minizip)
file(GLOB LZIP_HEADERS include/elzip/*.hpp)
if (USE_FILESYSTEM_FALLBACK)
set(ELZIP_CPP src/elzip_fs_fallback.cpp)
else()
set(ELZIP_CPP src/elzip.cpp)
endif()
file(GLOB LZIP_SOURCES
${ELZIP_CPP}
src/unzipper.cpp
src/zipper.cpp
)
add_library(elzip ${LZIP_HEADERS} ${LZIP_SOURCES})
target_link_libraries(elzip minizip)
if (USE_FILESYSTEM_FALLBACK)
target_link_libraries(elzip tinydir)
elseif (CMAKE_COMPILER_IS_GNUCXX)
target_link_libraries(elzip stdc++fs)
endif()
target_include_directories(elzip
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/elzip>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_EXTENSIONS OFF)

28
third-party/11zip/README.md generated vendored
View File

@ -1,28 +0,0 @@
# 11Zip
Dead simple zipping / unzipping C++ Lib
I didn't really wanted to make my own zipping / unzipping library but as I found nothing else, I made my own.
That's why I called this lib 11Zip, 11 is the atomic number of the sodium as it describes pretty well my salty feeling when searching for a zipping / unzipping C++ Lib.
By the same time it's also a reference to 7zip.
The lib is based on zlib & minizip : https://github.com/madler/zlib
It does also include some wrapper code from here : www.vilipetek.com/2013/11/22/zippingunzipping-files-in-c/
For now you have access to two functions which are really simple :
```
elz::extractZip(std::string zipName, std::string target = ".");
```
Which just unzip the content of a zip in "target" folder (which is current folder by default).
and the other function is :
```
elz::zipFolder(std::string folderName, std::string zipTarget = "");
```
Which just zip the folder "folderName" to "zipTarget" (Which is "folderName".zip by default).

View File

@ -1,25 +0,0 @@
project(minizip)
file(GLOB MZIP_HEADERS include/minizip/*.h)
file(GLOB MZIP_SOURCES src/*.c)
if (NOT WIN32)
list(REMOVE_ITEM MZIP_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/minizip/iowin32.h)
list(REMOVE_ITEM MZIP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/iowin32.c)
ENDIF()
add_library(minizip ${MZIP_HEADERS} ${MZIP_SOURCES})
if (BUILD_ANDROID)
target_compile_definitions(minizip PRIVATE USE_FILE32API)
endif()
target_include_directories(minizip
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/minizip>
${CMAKE_CURRENT_SOURCE_DIR}/src
)

View File

@ -1,441 +0,0 @@
/* crc32.h -- tables for rapid CRC calculation
* Generated automatically by crc32.c
*/
local const z_crc_t FAR crc_table[TBLS][256] =
{
{
0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
0x2d02ef8dUL
#ifdef BYFOUR
},
{
0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
0x9324fd72UL
},
{
0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
0xbe9834edUL
},
{
0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
0xde0506f1UL
},
{
0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
0x8def022dUL
},
{
0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
0x72fd2493UL
},
{
0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
0xed3498beUL
},
{
0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
0xf10605deUL
#endif
}
};

View File

@ -1,132 +0,0 @@
/* crypt.h -- base code for crypt/uncrypt ZIPfile
Version 1.01e, February 12th, 2005
Copyright (C) 1998-2005 Gilles Vollant
This code is a modified version of crypting code in Infozip distribution
The encryption/decryption parts of this source code (as opposed to the
non-echoing password parts) were originally written in Europe. The
whole source package can be freely distributed, including from the USA.
(Prior to January 2000, re-export from the US was a violation of US law.)
This encryption code is a direct transcription of the algorithm from
Roger Schlafly, described by Phil Katz in the file appnote.txt. This
file (appnote.txt) is distributed with the PKZIP program (even in the
version without encryption capabilities).
If you don't need crypting in your application, just define symbols
NOCRYPT and NOUNCRYPT.
This code support the "Traditional PKWARE Encryption".
The new AES encryption added on Zip format by Winzip (see the page
http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
Encryption is not supported.
*/
#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
/***********************************************************************
* Return the next byte in the pseudo-random sequence
*/
static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
{
unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
* unpredictable manner on 16-bit systems; not a problem
* with any known compiler so far, though */
temp = ((unsigned)(*(pkeys + 2)) & 0xffff) | 2;
return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
}
/***********************************************************************
* Update the encryption keys with the next byte of plain text
*/
static int update_keys(unsigned long* pkeys, const z_crc_t* pcrc_32_tab, int c)
{
(*(pkeys + 0)) = CRC32((*(pkeys+0)), c);
(*(pkeys + 1)) += (*(pkeys + 0)) & 0xff;
(*(pkeys + 1)) = (*(pkeys + 1)) * 134775813L + 1;
{
register int keyshift = (int)((*(pkeys + 1)) >> 24);
(*(pkeys + 2)) = CRC32((*(pkeys+2)), keyshift);
}
return c;
}
/***********************************************************************
* Initialize the encryption keys and the random header according to
* the given password.
*/
static void init_keys(const char* passwd, unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
{
*(pkeys + 0) = 305419896L;
*(pkeys + 1) = 591751049L;
*(pkeys + 2) = 878082192L;
while (*passwd != '\0')
{
update_keys(pkeys, pcrc_32_tab, (int)*passwd);
passwd++;
}
}
#define zdecode(pkeys,pcrc_32_tab,c) \
(update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
#define zencode(pkeys,pcrc_32_tab,c,t) \
(t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
#define RAND_HEAD_LEN 12
/* "last resort" source for second part of crypt seed pattern */
# ifndef ZCR_SEED2
# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
# endif
static int crypthead(const char* passwd, /* password string */
unsigned char* buf, /* where to write header */
int bufSize,
unsigned long* pkeys,
const z_crc_t* pcrc_32_tab,
unsigned long crcForCrypting)
{
int n; /* index in random header */
int t; /* temporary */
int c; /* random byte */
unsigned char header[RAND_HEAD_LEN - 2]; /* random header */
static unsigned calls = 0; /* ensure different random header each time */
if (bufSize < RAND_HEAD_LEN)
return 0;
/* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
* output of rand() to get less predictability, since rand() is
* often poorly implemented.
*/
if (++calls == 1)
{
srand((unsigned)(time(NULL) ^ ZCR_SEED2));
}
init_keys(passwd, pkeys, pcrc_32_tab);
for (n = 0; n < RAND_HEAD_LEN - 2; n++)
{
c = (rand() >> 7) & 0xff;
header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
}
/* Encrypt random header (last two bytes is high word of crc) */
init_keys(passwd, pkeys, pcrc_32_tab);
for (n = 0; n < RAND_HEAD_LEN - 2; n++)
{
buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
}
buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
return n;
}
#endif

View File

@ -1,355 +0,0 @@
/* deflate.h -- internal compression state
* Copyright (C) 1995-2016 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
/* @(#) $Id$ */
#ifndef DEFLATE_H
#define DEFLATE_H
#include "zutil.h"
/* define NO_GZIP when compiling if you want to disable gzip header and
trailer creation by deflate(). NO_GZIP would be used to avoid linking in
the crc code when it is not needed. For shared libraries, gzip encoding
should be left enabled. */
#ifndef NO_GZIP
# define GZIP
#endif
/* ===========================================================================
* Internal compression state.
*/
#define LENGTH_CODES 29
/* number of length codes, not counting the special END_BLOCK code */
#define LITERALS 256
/* number of literal bytes 0..255 */
#define L_CODES (LITERALS+1+LENGTH_CODES)
/* number of Literal or Length codes, including the END_BLOCK code */
#define D_CODES 30
/* number of distance codes */
#define BL_CODES 19
/* number of codes used to transfer the bit lengths */
#define HEAP_SIZE (2*L_CODES+1)
/* maximum heap size */
#define MAX_BITS 15
/* All codes must not exceed MAX_BITS bits */
#define Buf_size 16
/* size of bit buffer in bi_buf */
#define INIT_STATE 42 /* zlib header -> BUSY_STATE */
#ifdef GZIP
# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */
#endif
#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */
#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */
#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */
#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */
#define BUSY_STATE 113 /* deflate -> FINISH_STATE */
#define FINISH_STATE 666 /* stream complete */
/* Stream status */
/* Data structure describing a single value and its code string. */
typedef struct ct_data_s
{
union
{
ush freq; /* frequency count */
ush code; /* bit string */
} fc;
union
{
ush dad; /* father node in Huffman tree */
ush len; /* length of bit string */
} dl;
} FAR ct_data;
#define Freq fc.freq
#define Code fc.code
#define Dad dl.dad
#define Len dl.len
typedef struct static_tree_desc_s static_tree_desc;
typedef struct tree_desc_s
{
ct_data* dyn_tree; /* the dynamic tree */
int max_code; /* largest code with non zero frequency */
const static_tree_desc* stat_desc; /* the corresponding static tree */
} FAR tree_desc;
typedef ush Pos;
typedef Pos FAR Posf;
typedef unsigned IPos;
/* A Pos is an index in the character window. We use short instead of int to
* save space in the various tables. IPos is used only for parameter passing.
*/
typedef struct internal_state
{
z_streamp strm; /* pointer back to this zlib stream */
int status; /* as the name implies */
Bytef* pending_buf; /* output still pending */
ulg pending_buf_size; /* size of pending_buf */
Bytef* pending_out; /* next pending byte to output to the stream */
ulg pending; /* nb of bytes in the pending buffer */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
gz_headerp gzhead; /* gzip header information to write */
ulg gzindex; /* where in extra, name, or comment */
Byte method; /* can only be DEFLATED */
int last_flush; /* value of flush param for previous deflate call */
/* used by deflate.c: */
uInt w_size; /* LZ77 window size (32K by default) */
uInt w_bits; /* log2(w_size) (8..16) */
uInt w_mask; /* w_size - 1 */
Bytef* window;
/* Sliding window. Input bytes are read into the second half of the window,
* and move to the first half later to keep a dictionary of at least wSize
* bytes. With this organization, matches are limited to a distance of
* wSize-MAX_MATCH bytes, but this ensures that IO is always
* performed with a length multiple of the block size. Also, it limits
* the window size to 64K, which is quite useful on MSDOS.
* To do: use the user input buffer as sliding window.
*/
ulg window_size;
/* Actual size of window: 2*wSize, except when the user input buffer
* is directly used as sliding window.
*/
Posf* prev;
/* Link to older string with same hash index. To limit the size of this
* array to 64K, this link is maintained only for the last 32K strings.
* An index in this array is thus a window index modulo 32K.
*/
Posf* head; /* Heads of the hash chains or NIL. */
uInt ins_h; /* hash index of string to be inserted */
uInt hash_size; /* number of elements in hash table */
uInt hash_bits; /* log2(hash_size) */
uInt hash_mask; /* hash_size-1 */
uInt hash_shift;
/* Number of bits by which ins_h must be shifted at each input
* step. It must be such that after MIN_MATCH steps, the oldest
* byte no longer takes part in the hash key, that is:
* hash_shift * MIN_MATCH >= hash_bits
*/
long block_start;
/* Window position at the beginning of the current output block. Gets
* negative when the window is moved backwards.
*/
uInt match_length; /* length of best match */
IPos prev_match; /* previous match */
int match_available; /* set if previous match exists */
uInt strstart; /* start of string to insert */
uInt match_start; /* start of matching string */
uInt lookahead; /* number of valid bytes ahead in window */
uInt prev_length;
/* Length of the best match at previous step. Matches not greater than this
* are discarded. This is used in the lazy match evaluation.
*/
uInt max_chain_length;
/* To speed up deflation, hash chains are never searched beyond this
* length. A higher limit improves compression ratio but degrades the
* speed.
*/
uInt max_lazy_match;
/* Attempt to find a better match only when the current match is strictly
* smaller than this value. This mechanism is used only for compression
* levels >= 4.
*/
# define max_insert_length max_lazy_match
/* Insert new strings in the hash table only if the match length is not
* greater than this length. This saves time but degrades compression.
* max_insert_length is used only for compression levels <= 3.
*/
int level; /* compression level (1..9) */
int strategy; /* favor or force Huffman coding*/
uInt good_match;
/* Use a faster search when the previous match is longer than this */
int nice_match; /* Stop searching when current match exceeds this */
/* used by trees.c: */
/* Didn't use ct_data typedef below to suppress compiler warning */
struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
struct ct_data_s dyn_dtree[2 * D_CODES + 1]; /* distance tree */
struct ct_data_s bl_tree[2 * BL_CODES + 1]; /* Huffman tree for bit lengths */
struct tree_desc_s l_desc; /* desc. for literal tree */
struct tree_desc_s d_desc; /* desc. for distance tree */
struct tree_desc_s bl_desc; /* desc. for bit length tree */
ush bl_count[MAX_BITS + 1];
/* number of codes at each bit length for an optimal tree */
int heap[2 * L_CODES + 1]; /* heap used to build the Huffman trees */
int heap_len; /* number of elements in the heap */
int heap_max; /* element of largest frequency */
/* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
* The same heap array is used to build all trees.
*/
uch depth[2 * L_CODES + 1];
/* Depth of each subtree used as tie breaker for trees of equal frequency
*/
uchf* l_buf; /* buffer for literals or lengths */
uInt lit_bufsize;
/* Size of match buffer for literals/lengths. There are 4 reasons for
* limiting lit_bufsize to 64K:
* - frequencies can be kept in 16 bit counters
* - if compression is not successful for the first block, all input
* data is still in the window so we can still emit a stored block even
* when input comes from standard input. (This can also be done for
* all blocks if lit_bufsize is not greater than 32K.)
* - if compression is not successful for a file smaller than 64K, we can
* even emit a stored file instead of a stored block (saving 5 bytes).
* This is applicable only for zip (not gzip or zlib).
* - creating new Huffman trees less frequently may not provide fast
* adaptation to changes in the input data statistics. (Take for
* example a binary file with poorly compressible code followed by
* a highly compressible string table.) Smaller buffer sizes give
* fast adaptation but have of course the overhead of transmitting
* trees more frequently.
* - I can't count above 4
*/
uInt last_lit; /* running index in l_buf */
ushf* d_buf;
/* Buffer for distances. To simplify the code, d_buf and l_buf have
* the same number of elements. To use different lengths, an extra flag
* array would be necessary.
*/
ulg opt_len; /* bit length of current block with optimal trees */
ulg static_len; /* bit length of current block with static trees */
uInt matches; /* number of string matches in current block */
uInt insert; /* bytes at end of window left to insert */
#ifdef ZLIB_DEBUG
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
#endif
ush bi_buf;
/* Output buffer. bits are inserted starting at the bottom (least
* significant bits).
*/
int bi_valid;
/* Number of valid bits in bi_buf. All bits above the last valid bit
* are always zero.
*/
ulg high_water;
/* High water mark offset in window for initialized bytes -- bytes above
* this are set to zero in order to avoid memory check warnings when
* longest match routines access bytes past the input. This is then
* updated to the new high water mark.
*/
} FAR deflate_state;
/* Output a byte on the stream.
* IN assertion: there is enough room in pending_buf.
*/
#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
/* Minimum amount of lookahead, except at the end of the input file.
* See deflate.c for comments about the MIN_MATCH+1.
*/
#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
/* In order to simplify the code, particularly on 16 bit machines, match
* distances are limited to MAX_DIST instead of WSIZE.
*/
#define WIN_INIT MAX_MATCH
/* Number of bytes after end of data in window to initialize in order to avoid
memory checker errors from longest match routines */
/* in trees.c */
void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
ulg stored_len, int last));
void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
ulg stored_len, int last));
#define d_code(dist) \
((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
/* Mapping from a distance to a distance code. dist is the distance - 1 and
* must not have side effects. _dist_code[256] and _dist_code[257] are never
* used.
*/
#ifndef ZLIB_DEBUG
/* Inline versions of _tr_tally for speed: */
#if defined(GEN_TREES_H) || !defined(STDC)
extern uch ZLIB_INTERNAL _length_code[];
extern uch ZLIB_INTERNAL _dist_code[];
#else
extern const uch ZLIB_INTERNAL _length_code[];
extern const uch ZLIB_INTERNAL _dist_code[];
#endif
# define _tr_tally_lit(s, c, flush) \
{ uch cc = (c); \
s->d_buf[s->last_lit] = 0; \
s->l_buf[s->last_lit++] = cc; \
s->dyn_ltree[cc].Freq++; \
flush = (s->last_lit == s->lit_bufsize-1); \
}
# define _tr_tally_dist(s, distance, length, flush) \
{ uch len = (uch)(length); \
ush dist = (ush)(distance); \
s->d_buf[s->last_lit] = dist; \
s->l_buf[s->last_lit++] = len; \
dist--; \
s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
s->dyn_dtree[d_code(dist)].Freq++; \
flush = (s->last_lit == s->lit_bufsize-1); \
}
#else
# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
# define _tr_tally_dist(s, distance, length, flush) \
flush = _tr_tally(s, distance, length)
#endif
#endif /* DEFLATE_H */

View File

@ -1,224 +0,0 @@
/* gzguts.h -- zlib internal header definitions for gz* operations
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#ifdef _LARGEFILE64_SOURCE
# ifndef _LARGEFILE_SOURCE
# define _LARGEFILE_SOURCE 1
# endif
# ifdef _FILE_OFFSET_BITS
# undef _FILE_OFFSET_BITS
# endif
#endif
#ifdef HAVE_HIDDEN
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
#else
# define ZLIB_INTERNAL
#endif
#include <stdio.h>
#include "zlib.h"
#ifdef STDC
# include <string.h>
# include <stdlib.h>
# include <limits.h>
#endif
#ifndef _POSIX_SOURCE
# define _POSIX_SOURCE
#endif
#include <fcntl.h>
#ifdef _WIN32
# include <stddef.h>
#endif
#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
# include <io.h>
#endif
#if defined(_WIN32) || defined(__CYGWIN__)
# define WIDECHAR
#endif
#ifdef WINAPI_FAMILY
# define open _open
# define read _read
# define write _write
# define close _close
#endif
#ifdef NO_DEFLATE /* for compatibility with old definition */
# define NO_GZCOMPRESS
#endif
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#if defined(__CYGWIN__)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
# ifndef HAVE_VSNPRINTF
# define HAVE_VSNPRINTF
# endif
#endif
#ifndef HAVE_VSNPRINTF
# ifdef MSDOS
/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
but for now we just assume it doesn't. */
# define NO_vsnprintf
# endif
# ifdef __TURBOC__
# define NO_vsnprintf
# endif
# ifdef WIN32
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
# if !defined(vsnprintf) && !defined(NO_vsnprintf)
# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
# define vsnprintf _vsnprintf
# endif
# endif
# endif
# ifdef __SASC
# define NO_vsnprintf
# endif
# ifdef VMS
# define NO_vsnprintf
# endif
# ifdef __OS400__
# define NO_vsnprintf
# endif
# ifdef __MVS__
# define NO_vsnprintf
# endif
#endif
/* unlike snprintf (which is required in C99), _snprintf does not guarantee
null termination of the result -- however this is only used in gzlib.c where
the result is assured to fit in the space provided */
#if defined(_MSC_VER) && _MSC_VER < 1900
# define snprintf _snprintf
#endif
#ifndef local
# define local static
#endif
/* since "static" is used to mean two completely different things in C, we
define "local" for the non-static meaning of "static", for readability
(compile with -Dlocal if your debugger can't find static symbols) */
/* gz* functions always use library allocation functions */
#ifndef STDC
extern voidp malloc OF((uInt size));
extern void free OF((voidpf ptr));
#endif
/* get errno and strerror definition */
#if defined UNDER_CE
# include <windows.h>
# define zstrerror() gz_strwinerror((DWORD)GetLastError())
#else
# ifndef NO_STRERROR
# include <errno.h>
# define zstrerror() strerror(errno)
# else
# define zstrerror() "stdio error (consult errno)"
# endif
#endif
/* provide prototypes for these when building zlib without LFS */
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
#endif
/* default memLevel */
#if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8
#else
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
#endif
/* default i/o buffer size -- double this for output when reading (this and
twice this must be able to fit in an unsigned type) */
#define GZBUFSIZE 8192
/* gzip modes, also provide a little integrity check on the passed structure */
#define GZ_NONE 0
#define GZ_READ 7247
#define GZ_WRITE 31153
#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
/* values for gz_state how */
#define LOOK 0 /* look for a gzip header */
#define COPY 1 /* copy input directly */
#define GZIP 2 /* decompress a gzip stream */
#ifdef __unix__
#include <unistd.h>
#endif
/* internal gzip file state data structure */
typedef struct
{
/* exposed contents for gzgetc() macro */
struct gzFile_s x; /* "x" for exposed */
/* x.have: number of bytes available at x.next */
/* x.next: next output data to deliver or write */
/* x.pos: current position in uncompressed data */
/* used for both reading and writing */
int mode; /* see gzip modes above */
int fd; /* file descriptor */
char* path; /* path or fd for error messages */
unsigned size; /* buffer size, zero if not allocated yet */
unsigned want; /* requested buffer size, default is GZBUFSIZE */
unsigned char* in; /* input buffer (double-sized when writing) */
unsigned char* out; /* output buffer (double-sized when reading) */
int direct; /* 0 if processing gzip, 1 if transparent */
/* just for reading */
int how; /* 0: get header, 1: copy, 2: decompress */
z_off64_t start; /* where the gzip data started, for rewinding */
int eof; /* true if end of input file reached */
int past; /* true if read requested past end */
/* just for writing */
int level; /* compression level */
int strategy; /* compression strategy */
/* seek request */
z_off64_t skip; /* amount to skip (already rewound if backwards) */
int seek; /* true if seek request pending */
/* error information */
int err; /* error code */
char* msg; /* error message */
/* zlib inflate or deflate stream */
z_stream strm; /* stream structure in-place (not a pointer) */
} gz_state;
typedef gz_state FAR * gz_statep;
/* shared functions */
void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
#if defined UNDER_CE
char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
#endif
/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
value -- needed when comparing unsigned to z_off64_t, which is signed
(possible z_off64_t types off_t, off64_t, and long are all signed) */
#ifdef INT_MAX
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
#else
unsigned ZLIB_INTERNAL gz_intmax OF((void));
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
#endif

View File

@ -1,11 +0,0 @@
/* inffast.h -- header to use inffast.c
* Copyright (C) 1995-2003, 2010 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));

View File

@ -1,94 +0,0 @@
/* inffixed.h -- table for decoding fixed codes
* Generated automatically by makefixed().
*/
/* WARNING: this file should *not* be used by applications.
It is part of the implementation of this library and is
subject to change. Applications should only use zlib.h.
*/
static const code lenfix[512] = {
{96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
{0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
{0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
{0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
{0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
{21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
{0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
{0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
{18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
{0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
{0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
{0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
{20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
{0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
{0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
{16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
{0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
{0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
{0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
{0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
{0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
{0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
{0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
{17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
{0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
{0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
{0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
{19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
{0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
{0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
{16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
{0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
{0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
{0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
{0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
{20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
{0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
{0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
{17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
{0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
{0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
{0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
{20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
{0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
{0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
{0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
{16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
{0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
{0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
{0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
{0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
{0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
{0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
{0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
{16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
{0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
{0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
{0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
{19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
{0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
{0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
{16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
{0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
{0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
{0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
{0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
{64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
{0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
{0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
{18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
{0,9,255}
};
static const code distfix[32] = {
{16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
{21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
{18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
{19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
{16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
{22,5,193},{64,5,0}
};

View File

@ -1,127 +0,0 @@
/* inflate.h -- internal inflate state definition
* Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
/* define NO_GZIP when compiling if you want to disable gzip header and
trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
the crc code when it is not needed. For shared libraries, gzip decoding
should be left enabled. */
#ifndef NO_GZIP
# define GUNZIP
#endif
/* Possible inflate modes between inflate() calls */
typedef enum
{
HEAD = 16180, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */
EXLEN, /* i: waiting for extra length (gzip) */
EXTRA, /* i: waiting for extra bytes (gzip) */
NAME, /* i: waiting for end of file name (gzip) */
COMMENT, /* i: waiting for end of comment (gzip) */
HCRC, /* i: waiting for header crc (gzip) */
DICTID, /* i: waiting for dictionary check value */
DICT, /* waiting for inflateSetDictionary() call */
TYPE, /* i: waiting for type bits, including last-flag bit */
TYPEDO, /* i: same, but skip check to exit inflate on new block */
STORED, /* i: waiting for stored size (length and complement) */
COPY_, /* i/o: same as COPY below, but only first time in */
COPY, /* i/o: waiting for input or output to copy stored block */
TABLE, /* i: waiting for dynamic block table lengths */
LENLENS, /* i: waiting for code length code lengths */
CODELENS, /* i: waiting for length/lit and distance code lengths */
LEN_, /* i: same as LEN below, but only first time in */
LEN, /* i: waiting for length/lit/eob code */
LENEXT, /* i: waiting for length extra bits */
DIST, /* i: waiting for distance code */
DISTEXT, /* i: waiting for distance extra bits */
MATCH, /* o: waiting for output space to copy string */
LIT, /* o: waiting for output space to write literal */
CHECK, /* i: waiting for 32-bit check value */
LENGTH, /* i: waiting for 32-bit length (gzip) */
DONE, /* finished check, done -- remain here until reset */
BAD, /* got a data error -- remain here until reset */
MEM, /* got an inflate() memory error -- remain here until reset */
SYNC /* looking for synchronization bytes to restart inflate() */
} inflate_mode;
/*
State transitions between above modes -
(most modes can go to BAD or MEM on error -- not shown for clarity)
Process header:
HEAD -> (gzip) or (zlib) or (raw)
(gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
HCRC -> TYPE
(zlib) -> DICTID or TYPE
DICTID -> DICT -> TYPE
(raw) -> TYPEDO
Read deflate blocks:
TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
STORED -> COPY_ -> COPY -> TYPE
TABLE -> LENLENS -> CODELENS -> LEN_
LEN_ -> LEN
Read deflate codes in fixed or dynamic block:
LEN -> LENEXT or LIT or TYPE
LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
LIT -> LEN
Process trailer:
CHECK -> LENGTH -> DONE
*/
/* State maintained between inflate() calls -- approximately 7K bytes, not
including the allocated sliding window, which is up to 32K bytes. */
struct inflate_state
{
z_streamp strm; /* pointer back to this zlib stream */
inflate_mode mode; /* current inflate mode */
int last; /* true if processing last block */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
int flags; /* gzip header method and flags (0 if zlib) */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
unsigned long check; /* protected copy of check value */
unsigned long total; /* protected copy of output count */
gz_headerp head; /* where to save gzip header information */
/* sliding window */
unsigned wbits; /* log base 2 of requested window size */
unsigned wsize; /* window size or zero if not using window */
unsigned whave; /* valid bytes in the window */
unsigned wnext; /* window write index */
unsigned char FAR * window; /* allocated sliding window, if needed */
/* bit accumulator */
unsigned long hold; /* input bit accumulator */
unsigned bits; /* number of bits in "in" */
/* for string and stored block copying */
unsigned length; /* literal or length of data to copy */
unsigned offset; /* distance back to copy string from */
/* for table and code decoding */
unsigned extra; /* extra bits needed */
/* fixed and dynamic code tables */
code const FAR * lencode; /* starting table for length/literal codes */
code const FAR * distcode; /* starting table for distance codes */
unsigned lenbits; /* index bits for lencode */
unsigned distbits; /* index bits for distcode */
/* dynamic table building */
unsigned ncode; /* number of code length code lengths */
unsigned nlen; /* number of length code lengths */
unsigned ndist; /* number of distance code lengths */
unsigned have; /* number of code lengths in lens[] */
code FAR * next; /* next available space in codes[] */
unsigned short lens[320]; /* temporary storage for code lengths */
unsigned short work[288]; /* work area for code table building */
code codes[ENOUGH]; /* space for code tables */
int sane; /* if false, allow invalid distance too far */
int back; /* bits back of last unprocessed length/lit */
unsigned was; /* initial length of match */
};

View File

@ -1,64 +0,0 @@
/* inftrees.h -- header to use inftrees.c
* Copyright (C) 1995-2005, 2010 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
/* Structure for decoding tables. Each entry provides either the
information needed to do the operation requested by the code that
indexed that table entry, or it provides a pointer to another
table that indexes more bits of the code. op indicates whether
the entry is a pointer to another table, a literal, a length or
distance, an end-of-block, or an invalid code. For a table
pointer, the low four bits of op is the number of index bits of
that table. For a length or distance, the low four bits of op
is the number of extra bits to get after the code. bits is
the number of bits in this code or part of the code to drop off
of the bit buffer. val is the actual byte to output in the case
of a literal, the base length or distance, or the offset from
the current table to the next table. Each entry is four bytes. */
typedef struct
{
unsigned char op; /* operation, extra bits, table bits */
unsigned char bits; /* bits in this part of the code */
unsigned short val; /* offset in table or code value */
} code;
/* op values as set by inflate_table():
00000000 - literal
0000tttt - table link, tttt != 0 is the number of table index bits
0001eeee - length or distance, eeee is the number of extra bits
01100000 - end of block
01000000 - invalid code
*/
/* Maximum size of the dynamic table. The maximum number of code structures is
1444, which is the sum of 852 for literal/length codes and 592 for distance
codes. These values were found by exhaustive searches using the program
examples/enough.c found in the zlib distribtution. The arguments to that
program are the number of symbols, the initial root table size, and the
maximum bit length of a code. "enough 286 9 15" for literal/length codes
returns returns 852, and "enough 30 6 15" for distance codes returns 592.
The initial root table size (9 or 6) is found in the fifth argument of the
inflate_table() calls in inflate.c and infback.c. If the root table size is
changed, then these maximum sizes would be need to be recalculated and
updated. */
#define ENOUGH_LENS 852
#define ENOUGH_DISTS 592
#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
/* Type of code to build for inflate_table() */
typedef enum
{
CODES,
LENS,
DISTS
} codetype;
int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
unsigned codes, code FAR * FAR *table,
unsigned FAR *bits, unsigned short FAR *work));

View File

@ -1,205 +0,0 @@
/* ioapi.h -- IO base function header for compress/uncompress .zip
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
For more info read MiniZip_info.txt
Changes
Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)
Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.
More if/def section may be needed to support other platforms
Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.
(but you should use iowin32.c for windows instead)
*/
#ifndef _ZLIBIOAPI64_H
#define _ZLIBIOAPI64_H
#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
// Linux needs this to support file operation on files larger then 4+GB
// But might need better if/def to select just the platforms that needs them.
#ifndef __USE_FILE_OFFSET64
#define __USE_FILE_OFFSET64
#endif
#ifndef __USE_LARGEFILE64
#define __USE_LARGEFILE64
#endif
#ifndef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE
#endif
#ifndef _FILE_OFFSET_BIT
#define _FILE_OFFSET_BIT 64
#endif
#endif
#include <stdio.h>
#include <stdlib.h>
#include "zlib.h"
#if defined(USE_FILE32API)
#define fopen64 fopen
#define ftello64 ftell
#define fseeko64 fseek
#else
#ifdef __FreeBSD__
#define fopen64 fopen
#define ftello64 ftello
#define fseeko64 fseeko
#endif
#ifdef _MSC_VER
#define fopen64 fopen
#if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))
#define ftello64 _ftelli64
#define fseeko64 _fseeki64
#else // old MSC
#define ftello64 ftell
#define fseeko64 fseek
#endif
#endif
#endif
/*
#ifndef ZPOS64_T
#ifdef _WIN32
#define ZPOS64_T fpos_t
#else
#include <stdint.h>
#define ZPOS64_T uint64_t
#endif
#endif
*/
#ifdef HAVE_MINIZIP64_CONF_H
#include "mz64conf.h"
#endif
/* a type choosen by DEFINE */
#ifdef HAVE_64BIT_INT_CUSTOM
typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
#else
#ifdef HAS_STDINT_H
#include "stdint.h"
typedef uint64_t ZPOS64_T;
#else
/* Maximum unsigned 32-bit value used as placeholder for zip64 */
#define MAXU32 0xffffffff
#if defined(_MSC_VER) || defined(__BORLANDC__)
typedef unsigned __int64 ZPOS64_T;
#else
typedef unsigned long long int ZPOS64_T;
#endif
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define ZLIB_FILEFUNC_SEEK_CUR (1)
#define ZLIB_FILEFUNC_SEEK_END (2)
#define ZLIB_FILEFUNC_SEEK_SET (0)
#define ZLIB_FILEFUNC_MODE_READ (1)
#define ZLIB_FILEFUNC_MODE_WRITE (2)
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
#define ZLIB_FILEFUNC_MODE_EXISTING (4)
#define ZLIB_FILEFUNC_MODE_CREATE (8)
#ifndef ZCALLBACK
#if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
#define ZCALLBACK CALLBACK
#else
#define ZCALLBACK
#endif
#endif
typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
/* here is the "old" 32 bits structure structure */
typedef struct zlib_filefunc_def_s
{
open_file_func zopen_file;
read_file_func zread_file;
write_file_func zwrite_file;
tell_file_func ztell_file;
seek_file_func zseek_file;
close_file_func zclose_file;
testerror_file_func zerror_file;
voidpf opaque;
} zlib_filefunc_def;
typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream));
typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode));
typedef struct zlib_filefunc64_def_s
{
open64_file_func zopen64_file;
read_file_func zread_file;
write_file_func zwrite_file;
tell64_file_func ztell64_file;
seek64_file_func zseek64_file;
close_file_func zclose_file;
testerror_file_func zerror_file;
voidpf opaque;
} zlib_filefunc64_def;
void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
/* now internal definition, only for zip.c and unzip.h */
typedef struct zlib_filefunc64_32_def_s
{
zlib_filefunc64_def zfile_func64;
open_file_func zopen32_file;
tell_file_func ztell32_file;
seek_file_func zseek32_file;
} zlib_filefunc64_32_def;
#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size))
#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size))
//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream))
#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream))
voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32, const zlib_filefunc_def* p_filefunc32);
#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode)))
#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream)))
#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,28 +0,0 @@
/* iowin32.h -- IO base function header for compress/uncompress .zip
Version 1.1, February 14h, 2010
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
For more info read MiniZip_info.txt
*/
#include <windows.h>
#ifdef __cplusplus
extern "C" {
#endif
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));
void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));
void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));
#ifdef __cplusplus
}
#endif

View File

@ -1,37 +0,0 @@
/*
Additional tools for Minizip
Code: Xavier Roche '2004
License: Same as ZLIB (www.gzip.org)
*/
#ifndef _zip_tools_H
#define _zip_tools_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _ZLIB_H
#include "zlib.h"
#endif
#include "unzip.h"
/* Repair a ZIP file (missing central directory)
file: file to recover
fileOut: output file after recovery
fileOutTmp: temporary file name used for recovery
*/
extern int ZEXPORT unzRepair(const char* file,
const char* fileOut,
const char* fileOutTmp,
uLong* nRecovered,
uLong* bytesRecovered);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,127 +0,0 @@
/* header created automatically with -DGEN_TREES_H */
local const ct_data static_ltree[L_CODES + 2] = {
{{12},{8}}, {{140},{8}}, {{76},{8}}, {{204},{8}}, {{44},{8}},
{{172},{8}}, {{108},{8}}, {{236},{8}}, {{28},{8}}, {{156},{8}},
{{92},{8}}, {{220},{8}}, {{60},{8}}, {{188},{8}}, {{124},{8}},
{{252},{8}}, {{2},{8}}, {{130},{8}}, {{66},{8}}, {{194},{8}},
{{34},{8}}, {{162},{8}}, {{98},{8}}, {{226},{8}}, {{18},{8}},
{{146},{8}}, {{82},{8}}, {{210},{8}}, {{50},{8}}, {{178},{8}},
{{114},{8}}, {{242},{8}}, {{10},{8}}, {{138},{8}}, {{74},{8}},
{{202},{8}}, {{42},{8}}, {{170},{8}}, {{106},{8}}, {{234},{8}},
{{26},{8}}, {{154},{8}}, {{90},{8}}, {{218},{8}}, {{58},{8}},
{{186},{8}}, {{122},{8}}, {{250},{8}}, {{6},{8}}, {{134},{8}},
{{70},{8}}, {{198},{8}}, {{38},{8}}, {{166},{8}}, {{102},{8}},
{{230},{8}}, {{22},{8}}, {{150},{8}}, {{86},{8}}, {{214},{8}},
{{54},{8}}, {{182},{8}}, {{118},{8}}, {{246},{8}}, {{14},{8}},
{{142},{8}}, {{78},{8}}, {{206},{8}}, {{46},{8}}, {{174},{8}},
{{110},{8}}, {{238},{8}}, {{30},{8}}, {{158},{8}}, {{94},{8}},
{{222},{8}}, {{62},{8}}, {{190},{8}}, {{126},{8}}, {{254},{8}},
{{1},{8}}, {{129},{8}}, {{65},{8}}, {{193},{8}}, {{33},{8}},
{{161},{8}}, {{97},{8}}, {{225},{8}}, {{17},{8}}, {{145},{8}},
{{81},{8}}, {{209},{8}}, {{49},{8}}, {{177},{8}}, {{113},{8}},
{{241},{8}}, {{9},{8}}, {{137},{8}}, {{73},{8}}, {{201},{8}},
{{41},{8}}, {{169},{8}}, {{105},{8}}, {{233},{8}}, {{25},{8}},
{{153},{8}}, {{89},{8}}, {{217},{8}}, {{57},{8}}, {{185},{8}},
{{121},{8}}, {{249},{8}}, {{5},{8}}, {{133},{8}}, {{69},{8}},
{{197},{8}}, {{37},{8}}, {{165},{8}}, {{101},{8}}, {{229},{8}},
{{21},{8}}, {{149},{8}}, {{85},{8}}, {{213},{8}}, {{53},{8}},
{{181},{8}}, {{117},{8}}, {{245},{8}}, {{13},{8}}, {{141},{8}},
{{77},{8}}, {{205},{8}}, {{45},{8}}, {{173},{8}}, {{109},{8}},
{{237},{8}}, {{29},{8}}, {{157},{8}}, {{93},{8}}, {{221},{8}},
{{61},{8}}, {{189},{8}}, {{125},{8}}, {{253},{8}}, {{19},{9}},
{{275},{9}}, {{147},{9}}, {{403},{9}}, {{83},{9}}, {{339},{9}},
{{211},{9}}, {{467},{9}}, {{51},{9}}, {{307},{9}}, {{179},{9}},
{{435},{9}}, {{115},{9}}, {{371},{9}}, {{243},{9}}, {{499},{9}},
{{11},{9}}, {{267},{9}}, {{139},{9}}, {{395},{9}}, {{75},{9}},
{{331},{9}}, {{203},{9}}, {{459},{9}}, {{43},{9}}, {{299},{9}},
{{171},{9}}, {{427},{9}}, {{107},{9}}, {{363},{9}}, {{235},{9}},
{{491},{9}}, {{27},{9}}, {{283},{9}}, {{155},{9}}, {{411},{9}},
{{91},{9}}, {{347},{9}}, {{219},{9}}, {{475},{9}}, {{59},{9}},
{{315},{9}}, {{187},{9}}, {{443},{9}}, {{123},{9}}, {{379},{9}},
{{251},{9}}, {{507},{9}}, {{7},{9}}, {{263},{9}}, {{135},{9}},
{{391},{9}}, {{71},{9}}, {{327},{9}}, {{199},{9}}, {{455},{9}},
{{39},{9}}, {{295},{9}}, {{167},{9}}, {{423},{9}}, {{103},{9}},
{{359},{9}}, {{231},{9}}, {{487},{9}}, {{23},{9}}, {{279},{9}},
{{151},{9}}, {{407},{9}}, {{87},{9}}, {{343},{9}}, {{215},{9}},
{{471},{9}}, {{55},{9}}, {{311},{9}}, {{183},{9}}, {{439},{9}},
{{119},{9}}, {{375},{9}}, {{247},{9}}, {{503},{9}}, {{15},{9}},
{{271},{9}}, {{143},{9}}, {{399},{9}}, {{79},{9}}, {{335},{9}},
{{207},{9}}, {{463},{9}}, {{47},{9}}, {{303},{9}}, {{175},{9}},
{{431},{9}}, {{111},{9}}, {{367},{9}}, {{239},{9}}, {{495},{9}},
{{31},{9}}, {{287},{9}}, {{159},{9}}, {{415},{9}}, {{95},{9}},
{{351},{9}}, {{223},{9}}, {{479},{9}}, {{63},{9}}, {{319},{9}},
{{191},{9}}, {{447},{9}}, {{127},{9}}, {{383},{9}}, {{255},{9}},
{{511},{9}}, {{0},{7}}, {{64},{7}}, {{32},{7}}, {{96},{7}},
{{16},{7}}, {{80},{7}}, {{48},{7}}, {{112},{7}}, {{8},{7}},
{{72},{7}}, {{40},{7}}, {{104},{7}}, {{24},{7}}, {{88},{7}},
{{56},{7}}, {{120},{7}}, {{4},{7}}, {{68},{7}}, {{36},{7}},
{{100},{7}}, {{20},{7}}, {{84},{7}}, {{52},{7}}, {{116},{7}},
{{3},{8}}, {{131},{8}}, {{67},{8}}, {{195},{8}}, {{35},{8}},
{{163},{8}}, {{99},{8}}, {{227},{8}}
};
local const ct_data static_dtree[D_CODES] = {
{{0},{5}}, {{16},{5}}, {{8},{5}}, {{24},{5}}, {{4},{5}},
{{20},{5}}, {{12},{5}}, {{28},{5}}, {{2},{5}}, {{18},{5}},
{{10},{5}}, {{26},{5}}, {{6},{5}}, {{22},{5}}, {{14},{5}},
{{30},{5}}, {{1},{5}}, {{17},{5}}, {{9},{5}}, {{25},{5}},
{{5},{5}}, {{21},{5}}, {{13},{5}}, {{29},{5}}, {{3},{5}},
{{19},{5}}, {{11},{5}}, {{27},{5}}, {{7},{5}}, {{23},{5}}
};
const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
};
const uch ZLIB_INTERNAL _length_code[MAX_MATCH - MIN_MATCH + 1] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
};
local const int base_length[LENGTH_CODES] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
64, 80, 96, 112, 128, 160, 192, 224, 0
};
local const int base_dist[D_CODES] = {
0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
};

View File

@ -1,437 +0,0 @@
/* unzip.h -- IO for uncompress .zip files using zlib
Version 1.1, February 14h, 2010
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Modifications of Unzip for Zip64
Copyright (C) 2007-2008 Even Rouault
Modifications for Zip64 support on both zip and unzip
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
For more info read MiniZip_info.txt
---------------------------------------------------------------------------------
Condition of use and distribution are the same than zlib :
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
---------------------------------------------------------------------------------
Changes
See header of unzip64.c
*/
#ifndef _unz64_H
#define _unz64_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _ZLIB_H
#include "zlib.h"
#endif
#ifndef _ZLIBIOAPI_H
#include "ioapi.h"
#endif
#ifdef HAVE_BZIP2
#include "bzlib.h"
#endif
#define Z_BZIP2ED 12
#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
/* like the STRICT of WIN32, we define a pointer that cannot be converted
from (void*) without cast */
typedef struct TagunzFile__ { int unused; } unzFile__;
typedef unzFile__ *unzFile;
#else
typedef voidp unzFile;
#endif
#define UNZ_OK (0)
#define UNZ_END_OF_LIST_OF_FILE (-100)
#define UNZ_ERRNO (Z_ERRNO)
#define UNZ_EOF (0)
#define UNZ_PARAMERROR (-102)
#define UNZ_BADZIPFILE (-103)
#define UNZ_INTERNALERROR (-104)
#define UNZ_CRCERROR (-105)
/* tm_unz contain date/time info */
typedef struct tm_unz_s
{
uInt tm_sec; /* seconds after the minute - [0,59] */
uInt tm_min; /* minutes after the hour - [0,59] */
uInt tm_hour; /* hours since midnight - [0,23] */
uInt tm_mday; /* day of the month - [1,31] */
uInt tm_mon; /* months since January - [0,11] */
uInt tm_year; /* years - [1980..2044] */
} tm_unz;
/* unz_global_info structure contain global data about the ZIPfile
These data comes from the end of central dir */
typedef struct unz_global_info64_s
{
ZPOS64_T number_entry; /* total number of entries in
the central dir on this disk */
uLong size_comment; /* size of the global comment of the zipfile */
} unz_global_info64;
typedef struct unz_global_info_s
{
uLong number_entry; /* total number of entries in
the central dir on this disk */
uLong size_comment; /* size of the global comment of the zipfile */
} unz_global_info;
/* unz_file_info contain information about a file in the zipfile */
typedef struct unz_file_info64_s
{
uLong version; /* version made by 2 bytes */
uLong version_needed; /* version needed to extract 2 bytes */
uLong flag; /* general purpose bit flag 2 bytes */
uLong compression_method; /* compression method 2 bytes */
uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
uLong crc; /* crc-32 4 bytes */
ZPOS64_T compressed_size; /* compressed size 8 bytes */
ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */
uLong size_filename; /* filename length 2 bytes */
uLong size_file_extra; /* extra field length 2 bytes */
uLong size_file_comment; /* file comment length 2 bytes */
uLong disk_num_start; /* disk number start 2 bytes */
uLong internal_fa; /* internal file attributes 2 bytes */
uLong external_fa; /* external file attributes 4 bytes */
tm_unz tmu_date;
} unz_file_info64;
typedef struct unz_file_info_s
{
uLong version; /* version made by 2 bytes */
uLong version_needed; /* version needed to extract 2 bytes */
uLong flag; /* general purpose bit flag 2 bytes */
uLong compression_method; /* compression method 2 bytes */
uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
uLong crc; /* crc-32 4 bytes */
uLong compressed_size; /* compressed size 4 bytes */
uLong uncompressed_size; /* uncompressed size 4 bytes */
uLong size_filename; /* filename length 2 bytes */
uLong size_file_extra; /* extra field length 2 bytes */
uLong size_file_comment; /* file comment length 2 bytes */
uLong disk_num_start; /* disk number start 2 bytes */
uLong internal_fa; /* internal file attributes 2 bytes */
uLong external_fa; /* external file attributes 4 bytes */
tm_unz tmu_date;
} unz_file_info;
extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
const char* fileName2,
int iCaseSensitivity));
/*
Compare two filename (fileName1,fileName2).
If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
or strcasecmp)
If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
(like 1 on Unix, 2 on Windows)
*/
extern unzFile ZEXPORT unzOpen OF((const char *path));
extern unzFile ZEXPORT unzOpen64 OF((const void *path));
/*
Open a Zip file. path contain the full pathname (by example,
on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
"zlib/zlib113.zip".
If the zipfile cannot be opened (file don't exist or in not valid), the
return value is NULL.
Else, the return value is a unzFile Handle, usable with other function
of this unzip package.
the "64" function take a const void* pointer, because the path is just the
value passed to the open64_file_func callback.
Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
does not describe the reality
*/
extern unzFile ZEXPORT unzOpen2 OF((const char *path,
zlib_filefunc_def* pzlib_filefunc_def));
/*
Open a Zip file, like unzOpen, but provide a set of file low level API
for read/write the zip file (see ioapi.h)
*/
extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
zlib_filefunc64_def* pzlib_filefunc_def));
/*
Open a Zip file, like unz64Open, but provide a set of file low level API
for read/write the zip file (see ioapi.h)
*/
extern int ZEXPORT unzClose OF((unzFile file));
/*
Close a ZipFile opened with unzOpen.
If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
these files MUST be closed with unzCloseCurrentFile before call unzClose.
return UNZ_OK if there is no problem. */
extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
unz_global_info *pglobal_info));
extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
unz_global_info64 *pglobal_info));
/*
Write info about the ZipFile in the *pglobal_info structure.
No preparation of the structure is needed
return UNZ_OK if there is no problem. */
extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
char *szComment,
uLong uSizeBuf));
/*
Get the global comment string of the ZipFile, in the szComment buffer.
uSizeBuf is the size of the szComment buffer.
return the number of byte copied or an error code <0
*/
/***************************************************************************/
/* Unzip package allow you browse the directory of the zipfile */
extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
/*
Set the current file of the zipfile to the first file.
return UNZ_OK if there is no problem
*/
extern int ZEXPORT unzGoToNextFile OF((unzFile file));
/*
Set the current file of the zipfile to the next file.
return UNZ_OK if there is no problem
return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
*/
extern int ZEXPORT unzLocateFile OF((unzFile file,
const char *szFileName,
int iCaseSensitivity));
/*
Try locate the file szFileName in the zipfile.
For the iCaseSensitivity signification, see unzStringFileNameCompare
return value :
UNZ_OK if the file is found. It becomes the current file.
UNZ_END_OF_LIST_OF_FILE if the file is not found
*/
/* ****************************************** */
/* Ryan supplied functions */
/* unz_file_info contain information about a file in the zipfile */
typedef struct unz_file_pos_s
{
uLong pos_in_zip_directory; /* offset in zip file directory */
uLong num_of_file; /* # of file */
} unz_file_pos;
extern int ZEXPORT unzGetFilePos(
unzFile file,
unz_file_pos* file_pos);
extern int ZEXPORT unzGoToFilePos(
unzFile file,
unz_file_pos* file_pos);
typedef struct unz64_file_pos_s
{
ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */
ZPOS64_T num_of_file; /* # of file */
} unz64_file_pos;
extern int ZEXPORT unzGetFilePos64(
unzFile file,
unz64_file_pos* file_pos);
extern int ZEXPORT unzGoToFilePos64(
unzFile file,
const unz64_file_pos* file_pos);
/* ****************************************** */
extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
unz_file_info64 *pfile_info,
char *szFileName,
uLong fileNameBufferSize,
void *extraField,
uLong extraFieldBufferSize,
char *szComment,
uLong commentBufferSize));
extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
unz_file_info *pfile_info,
char *szFileName,
uLong fileNameBufferSize,
void *extraField,
uLong extraFieldBufferSize,
char *szComment,
uLong commentBufferSize));
/*
Get Info about the current file
if pfile_info!=NULL, the *pfile_info structure will contain somes info about
the current file
if szFileName!=NULL, the filemane string will be copied in szFileName
(fileNameBufferSize is the size of the buffer)
if extraField!=NULL, the extra field information will be copied in extraField
(extraFieldBufferSize is the size of the buffer).
This is the Central-header version of the extra field
if szComment!=NULL, the comment string of the file will be copied in szComment
(commentBufferSize is the size of the buffer)
*/
/** Addition for GDAL : START */
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
/** Addition for GDAL : END */
/***************************************************************************/
/* for reading the content of the current zipfile, you can open it, read data
from it, and close it (you can close it before reading all the file)
*/
extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
/*
Open for reading data the current file in the zipfile.
If there is no error, the return value is UNZ_OK.
*/
extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
const char* password));
/*
Open for reading data the current file in the zipfile.
password is a crypting password
If there is no error, the return value is UNZ_OK.
*/
extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
int* method,
int* level,
int raw));
/*
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
if raw==1
*method will receive method of compression, *level will receive level of
compression
note : you can set level parameter as NULL (if you did not want known level,
but you CANNOT set method parameter as NULL
*/
extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
int* method,
int* level,
int raw,
const char* password));
/*
Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
if raw==1
*method will receive method of compression, *level will receive level of
compression
note : you can set level parameter as NULL (if you did not want known level,
but you CANNOT set method parameter as NULL
*/
extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
/*
Close the file in zip opened with unzOpenCurrentFile
Return UNZ_CRCERROR if all the file was read but the CRC is not good
*/
extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
voidp buf,
unsigned len));
/*
Read bytes from the current file (opened by unzOpenCurrentFile)
buf contain buffer where data must be copied
len the size of buf.
return the number of byte copied if somes bytes are copied
return 0 if the end of file was reached
return <0 with error code if there is an error
(UNZ_ERRNO for IO error, or zLib error for uncompress error)
*/
extern z_off_t ZEXPORT unztell OF((unzFile file));
extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
/*
Give the current position in uncompressed data
*/
extern int ZEXPORT unzeof OF((unzFile file));
/*
return 1 if the end of file was reached, 0 elsewhere
*/
extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
voidp buf,
unsigned len));
/*
Read extra field from the current file (opened by unzOpenCurrentFile)
This is the local-header version of the extra field (sometimes, there is
more info in the local-header version than in the central-header)
if buf==NULL, it return the size of the local extra field
if buf!=NULL, len is the size of the buffer, the extra header is copied in
buf.
the return value is the number of bytes copied in buf, or (if <0)
the error code
*/
/***************************************************************************/
/* Get the current file offset */
extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file);
extern uLong ZEXPORT unzGetOffset(unzFile file);
/* Set the current file offset */
extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos);
extern int ZEXPORT unzSetOffset(unzFile file, uLong pos);
#ifdef __cplusplus
}
#endif
#endif /* _unz64_H */

View File

@ -1,534 +0,0 @@
/* zconf.h -- configuration of the zlib compression library
* Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#ifndef ZCONF_H
#define ZCONF_H
/*
* If you *really* need a unique prefix for all types and library functions,
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
* Even better than compiling with -DZ_PREFIX would be to use configure to set
* this permanently in zconf.h using "./configure --zprefix".
*/
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
# define Z_PREFIX_SET
/* all linked symbols and init macros */
# define _dist_code z__dist_code
# define _length_code z__length_code
# define _tr_align z__tr_align
# define _tr_flush_bits z__tr_flush_bits
# define _tr_flush_block z__tr_flush_block
# define _tr_init z__tr_init
# define _tr_stored_block z__tr_stored_block
# define _tr_tally z__tr_tally
# define adler32 z_adler32
# define adler32_combine z_adler32_combine
# define adler32_combine64 z_adler32_combine64
# define adler32_z z_adler32_z
# ifndef Z_SOLO
# define compress z_compress
# define compress2 z_compress2
# define compressBound z_compressBound
# endif
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
# define crc32_z z_crc32_z
# define deflate z_deflate
# define deflateBound z_deflateBound
# define deflateCopy z_deflateCopy
# define deflateEnd z_deflateEnd
# define deflateGetDictionary z_deflateGetDictionary
# define deflateInit z_deflateInit
# define deflateInit2 z_deflateInit2
# define deflateInit2_ z_deflateInit2_
# define deflateInit_ z_deflateInit_
# define deflateParams z_deflateParams
# define deflatePending z_deflatePending
# define deflatePrime z_deflatePrime
# define deflateReset z_deflateReset
# define deflateResetKeep z_deflateResetKeep
# define deflateSetDictionary z_deflateSetDictionary
# define deflateSetHeader z_deflateSetHeader
# define deflateTune z_deflateTune
# define deflate_copyright z_deflate_copyright
# define get_crc_table z_get_crc_table
# ifndef Z_SOLO
# define gz_error z_gz_error
# define gz_intmax z_gz_intmax
# define gz_strwinerror z_gz_strwinerror
# define gzbuffer z_gzbuffer
# define gzclearerr z_gzclearerr
# define gzclose z_gzclose
# define gzclose_r z_gzclose_r
# define gzclose_w z_gzclose_w
# define gzdirect z_gzdirect
# define gzdopen z_gzdopen
# define gzeof z_gzeof
# define gzerror z_gzerror
# define gzflush z_gzflush
# define gzfread z_gzfread
# define gzfwrite z_gzfwrite
# define gzgetc z_gzgetc
# define gzgetc_ z_gzgetc_
# define gzgets z_gzgets
# define gzoffset z_gzoffset
# define gzoffset64 z_gzoffset64
# define gzopen z_gzopen
# define gzopen64 z_gzopen64
# ifdef _WIN32
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
# define gzread z_gzread
# define gzrewind z_gzrewind
# define gzseek z_gzseek
# define gzseek64 z_gzseek64
# define gzsetparams z_gzsetparams
# define gztell z_gztell
# define gztell64 z_gztell64
# define gzungetc z_gzungetc
# define gzvprintf z_gzvprintf
# define gzwrite z_gzwrite
# endif
# define inflate z_inflate
# define inflateBack z_inflateBack
# define inflateBackEnd z_inflateBackEnd
# define inflateBackInit z_inflateBackInit
# define inflateBackInit_ z_inflateBackInit_
# define inflateCodesUsed z_inflateCodesUsed
# define inflateCopy z_inflateCopy
# define inflateEnd z_inflateEnd
# define inflateGetDictionary z_inflateGetDictionary
# define inflateGetHeader z_inflateGetHeader
# define inflateInit z_inflateInit
# define inflateInit2 z_inflateInit2
# define inflateInit2_ z_inflateInit2_
# define inflateInit_ z_inflateInit_
# define inflateMark z_inflateMark
# define inflatePrime z_inflatePrime
# define inflateReset z_inflateReset
# define inflateReset2 z_inflateReset2
# define inflateResetKeep z_inflateResetKeep
# define inflateSetDictionary z_inflateSetDictionary
# define inflateSync z_inflateSync
# define inflateSyncPoint z_inflateSyncPoint
# define inflateUndermine z_inflateUndermine
# define inflateValidate z_inflateValidate
# define inflate_copyright z_inflate_copyright
# define inflate_fast z_inflate_fast
# define inflate_table z_inflate_table
# ifndef Z_SOLO
# define uncompress z_uncompress
# define uncompress2 z_uncompress2
# endif
# define zError z_zError
# ifndef Z_SOLO
# define zcalloc z_zcalloc
# define zcfree z_zcfree
# endif
# define zlibCompileFlags z_zlibCompileFlags
# define zlibVersion z_zlibVersion
/* all zlib typedefs in zlib.h and zconf.h */
# define Byte z_Byte
# define Bytef z_Bytef
# define alloc_func z_alloc_func
# define charf z_charf
# define free_func z_free_func
# ifndef Z_SOLO
# define gzFile z_gzFile
# endif
# define gz_header z_gz_header
# define gz_headerp z_gz_headerp
# define in_func z_in_func
# define intf z_intf
# define out_func z_out_func
# define uInt z_uInt
# define uIntf z_uIntf
# define uLong z_uLong
# define uLongf z_uLongf
# define voidp z_voidp
# define voidpc z_voidpc
# define voidpf z_voidpf
/* all zlib structs in zlib.h and zconf.h */
# define gz_header_s z_gz_header_s
# define internal_state z_internal_state
#endif
#if defined(__MSDOS__) && !defined(MSDOS)
# define MSDOS
#endif
#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
# define OS2
#endif
#if defined(_WINDOWS) && !defined(WINDOWS)
# define WINDOWS
#endif
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
# ifndef WIN32
# define WIN32
# endif
#endif
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
# ifndef SYS16BIT
# define SYS16BIT
# endif
# endif
#endif
/*
* Compile with -DMAXSEG_64K if the alloc function cannot allocate more
* than 64k bytes at a time (needed on systems with 16-bit int).
*/
#ifdef SYS16BIT
# define MAXSEG_64K
#endif
#ifdef MSDOS
# define UNALIGNED_OK
#endif
#ifdef __STDC_VERSION__
# ifndef STDC
# define STDC
# endif
# if __STDC_VERSION__ >= 199901L
# ifndef STDC99
# define STDC99
# endif
# endif
#endif
#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
# define STDC
#endif
#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
# define STDC
#endif
#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
# define STDC
#endif
#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
# define STDC
#endif
#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
# define STDC
#endif
#ifndef STDC
# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
# define const /* note: need a more gentle solution here */
# endif
#endif
#if defined(ZLIB_CONST) && !defined(z_const)
# define z_const const
#else
# define z_const
#endif
#ifdef Z_SOLO
typedef unsigned long z_size_t;
#else
# define z_longlong long long
# if defined(NO_SIZE_T)
typedef unsigned NO_SIZE_T z_size_t;
# elif defined(STDC)
# include <stddef.h>
typedef size_t z_size_t;
# else
typedef unsigned long z_size_t;
# endif
# undef z_longlong
#endif
/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
# ifdef MAXSEG_64K
# define MAX_MEM_LEVEL 8
# else
# define MAX_MEM_LEVEL 9
# endif
#endif
/* Maximum value for windowBits in deflateInit2 and inflateInit2.
* WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
* created by gzip. (Files created by minigzip can still be extracted by
* gzip.)
*/
#ifndef MAX_WBITS
# define MAX_WBITS 15 /* 32K LZ77 window */
#endif
/* The memory requirements for deflate are (in bytes):
(1 << (windowBits+2)) + (1 << (memLevel+9))
that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
plus a few kilobytes for small objects. For example, if you want to reduce
the default memory requirements from 256K to 128K, compile with
make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
Of course this will generally degrade compression (there's no free lunch).
The memory requirements for inflate are (in bytes) 1 << windowBits
that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
for small objects.
*/
/* Type declarations */
#ifndef OF /* function prototypes */
# ifdef STDC
# define OF(args) args
# else
# define OF(args) ()
# endif
#endif
#ifndef Z_ARG /* function prototypes for stdarg */
# if defined(STDC) || defined(Z_HAVE_STDARG_H)
# define Z_ARG(args) args
# else
# define Z_ARG(args) ()
# endif
#endif
/* The following definitions for FAR are needed only for MSDOS mixed
* model programming (small or medium model with some far allocations).
* This was tested only with MSC; for other MSDOS compilers you may have
* to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
* just define FAR to be empty.
*/
#ifdef SYS16BIT
# if defined(M_I86SM) || defined(M_I86MM)
/* MSC small or medium model */
# define SMALL_MEDIUM
# ifdef _MSC_VER
# define FAR _far
# else
# define FAR far
# endif
# endif
# if (defined(__SMALL__) || defined(__MEDIUM__))
/* Turbo C small or medium model */
# define SMALL_MEDIUM
# ifdef __BORLANDC__
# define FAR _far
# else
# define FAR far
# endif
# endif
#endif
#if defined(WINDOWS) || defined(WIN32)
/* If building or using zlib as a DLL, define ZLIB_DLL.
* This is not mandatory, but it offers a little performance increase.
*/
# ifdef ZLIB_DLL
# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
# ifdef ZLIB_INTERNAL
# define ZEXTERN extern __declspec(dllexport)
# else
# define ZEXTERN extern __declspec(dllimport)
# endif
# endif
# endif /* ZLIB_DLL */
/* If building or using zlib with the WINAPI/WINAPIV calling convention,
* define ZLIB_WINAPI.
* Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
*/
# ifdef ZLIB_WINAPI
# ifdef FAR
# undef FAR
# endif
# include <windows.h>
/* No need for _export, use ZLIB.DEF instead. */
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
# define ZEXPORT WINAPI
# ifdef WIN32
# define ZEXPORTVA WINAPIV
# else
# define ZEXPORTVA FAR CDECL
# endif
# endif
#endif
#if defined (__BEOS__)
# ifdef ZLIB_DLL
# ifdef ZLIB_INTERNAL
# define ZEXPORT __declspec(dllexport)
# define ZEXPORTVA __declspec(dllexport)
# else
# define ZEXPORT __declspec(dllimport)
# define ZEXPORTVA __declspec(dllimport)
# endif
# endif
#endif
#ifndef ZEXTERN
# define ZEXTERN extern
#endif
#ifndef ZEXPORT
# define ZEXPORT
#endif
#ifndef ZEXPORTVA
# define ZEXPORTVA
#endif
#ifndef FAR
# define FAR
#endif
#if !defined(__MACTYPES__)
typedef unsigned char Byte; /* 8 bits */
#endif
typedef unsigned int uInt; /* 16 bits or more */
typedef unsigned long uLong; /* 32 bits or more */
#ifdef SMALL_MEDIUM
/* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
# define Bytef Byte FAR
#else
typedef Byte FAR Bytef;
#endif
typedef char FAR charf;
typedef int FAR intf;
typedef uInt FAR uIntf;
typedef uLong FAR uLongf;
#ifdef STDC
typedef void const* voidpc;
typedef void FAR * voidpf;
typedef void* voidp;
#else
typedef Byte const *voidpc;
typedef Byte FAR *voidpf;
typedef Byte *voidp;
#endif
#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
# include <limits.h>
# if (UINT_MAX == 0xffffffffUL)
# define Z_U4 unsigned
# elif (ULONG_MAX == 0xffffffffUL)
# define Z_U4 unsigned long
# elif (USHRT_MAX == 0xffffffffUL)
# define Z_U4 unsigned short
# endif
#endif
#ifdef Z_U4
typedef Z_U4 z_crc_t;
#else
typedef unsigned long z_crc_t;
#endif
#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
# define Z_HAVE_UNISTD_H
#endif
#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
# define Z_HAVE_STDARG_H
#endif
#ifdef STDC
# ifndef Z_SOLO
# include <sys/types.h> /* for off_t */
# endif
#endif
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
# ifndef Z_SOLO
# include <stdarg.h> /* for va_list */
# endif
#endif
#ifdef _WIN32
# ifndef Z_SOLO
# include <stddef.h> /* for wchar_t */
# endif
#endif
/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
* "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
* though the former does not conform to the LFS document), but considering
* both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
* equivalently requesting no 64-bit operations
*/
#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
# undef _LARGEFILE64_SOURCE
#endif
#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
# define Z_HAVE_UNISTD_H
#endif
#ifndef Z_SOLO
# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
# ifdef VMS
# include <unixio.h> /* for off_t */
# endif
# ifndef z_off_t
# define z_off_t off_t
# endif
# endif
#endif
#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
# define Z_LFS64
#endif
#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
# define Z_LARGE64
#endif
#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
# define Z_WANT64
#endif
#if !defined(SEEK_SET) && !defined(Z_SOLO)
# define SEEK_SET 0 /* Seek from beginning of file. */
# define SEEK_CUR 1 /* Seek from current position. */
# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
#endif
#ifndef z_off_t
# define z_off_t long
#endif
#if !defined(_WIN32) && defined(Z_LARGE64)
# define z_off64_t off64_t
#else
# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
# define z_off64_t __int64
# else
# define z_off64_t z_off_t
# endif
#endif
/* MVS linker does not support external names larger than 8 bytes */
#if defined(__MVS__)
#pragma map(deflateInit_,"DEIN")
#pragma map(deflateInit2_,"DEIN2")
#pragma map(deflateEnd,"DEEND")
#pragma map(deflateBound,"DEBND")
#pragma map(inflateInit_,"ININ")
#pragma map(inflateInit2_,"ININ2")
#pragma map(inflateEnd,"INEND")
#pragma map(inflateSync,"INSY")
#pragma map(inflateSetDictionary,"INSEDI")
#pragma map(compressBound,"CMBND")
#pragma map(inflate_table,"INTABL")
#pragma map(inflate_fast,"INFA")
#pragma map(inflate_copyright,"INCOPY")
#endif
#endif /* ZCONF_H */

View File

@ -1,362 +0,0 @@
/* zip.h -- IO on .zip files using zlib
Version 1.1, February 14h, 2010
part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
For more info read MiniZip_info.txt
---------------------------------------------------------------------------
Condition of use and distribution are the same than zlib :
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
---------------------------------------------------------------------------
Changes
See header of zip.h
*/
#ifndef _zip12_H
#define _zip12_H
#ifdef __cplusplus
extern "C" {
#endif
//#define HAVE_BZIP2
#ifndef _ZLIB_H
#include "zlib.h"
#endif
#ifndef _ZLIBIOAPI_H
#include "ioapi.h"
#endif
#ifdef HAVE_BZIP2
#include "bzlib.h"
#endif
#define Z_BZIP2ED 12
#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
/* like the STRICT of WIN32, we define a pointer that cannot be converted
from (void*) without cast */
typedef struct TagzipFile__ { int unused; } zipFile__;
typedef zipFile__ *zipFile;
#else
typedef voidp zipFile;
#endif
#define ZIP_OK (0)
#define ZIP_EOF (0)
#define ZIP_ERRNO (Z_ERRNO)
#define ZIP_PARAMERROR (-102)
#define ZIP_BADZIPFILE (-103)
#define ZIP_INTERNALERROR (-104)
#ifndef DEF_MEM_LEVEL
# if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8
# else
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
# endif
#endif
/* default memLevel */
/* tm_zip contain date/time info */
typedef struct tm_zip_s
{
uInt tm_sec; /* seconds after the minute - [0,59] */
uInt tm_min; /* minutes after the hour - [0,59] */
uInt tm_hour; /* hours since midnight - [0,23] */
uInt tm_mday; /* day of the month - [1,31] */
uInt tm_mon; /* months since January - [0,11] */
uInt tm_year; /* years - [1980..2044] */
} tm_zip;
typedef struct
{
tm_zip tmz_date; /* date in understandable format */
uLong dosDate; /* if dos_date == 0, tmu_date is used */
/* uLong flag; */ /* general purpose bit flag 2 bytes */
uLong internal_fa; /* internal file attributes 2 bytes */
uLong external_fa; /* external file attributes 4 bytes */
} zip_fileinfo;
typedef const char* zipcharpc;
#define APPEND_STATUS_CREATE (0)
#define APPEND_STATUS_CREATEAFTER (1)
#define APPEND_STATUS_ADDINZIP (2)
extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
/*
Create a zipfile.
pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
an Unix computer "zlib/zlib113.zip".
if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
will be created at the end of the file.
(useful if the file contain a self extractor code)
if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
add files in existing zip (be sure you don't add file that doesn't exist)
If the zipfile cannot be opened, the return value is NULL.
Else, the return value is a zipFile Handle, usable with other function
of this zip package.
*/
/* Note : there is no delete function into a zipfile.
If you want delete file into a zipfile, you must open a zipfile, and create another
Of couse, you can use RAW reading and writing to copy the file you did not want delte
*/
extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
int append,
zipcharpc* globalcomment,
zlib_filefunc_def* pzlib_filefunc_def));
extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
int append,
zipcharpc* globalcomment,
zlib_filefunc64_def* pzlib_filefunc_def));
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level));
extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int zip64));
/*
Open a file in the ZIP for writing.
filename : the filename in zip (if NULL, '-' without quote will be used
*zipfi contain supplemental information
if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
contains the extrafield data the the local header
if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
contains the extrafield data the the local header
if comment != NULL, comment contain the comment string
method contain the compression method (0 for store, Z_DEFLATED for deflate)
level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
this MUST be '1' if the uncompressed size is >= 0xffffffff.
*/
extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw));
extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw,
int zip64));
/*
Same than zipOpenNewFileInZip, except if raw=1, we write raw file
*/
extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw,
int windowBits,
int memLevel,
int strategy,
const char* password,
uLong crcForCrypting));
extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw,
int windowBits,
int memLevel,
int strategy,
const char* password,
uLong crcForCrypting,
int zip64
));
/*
Same than zipOpenNewFileInZip2, except
windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
password : crypting password (NULL for no crypting)
crcForCrypting : crc of file to compress (needed for crypting)
*/
extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw,
int windowBits,
int memLevel,
int strategy,
const char* password,
uLong crcForCrypting,
uLong versionMadeBy,
uLong flagBase
));
extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw,
int windowBits,
int memLevel,
int strategy,
const char* password,
uLong crcForCrypting,
uLong versionMadeBy,
uLong flagBase,
int zip64
));
/*
Same than zipOpenNewFileInZip4, except
versionMadeBy : value for Version made by field
flag : value for flag field (compression level info will be added)
*/
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
const void* buf,
unsigned len));
/*
Write data in the zipfile
*/
extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
/*
Close the current file in the zipfile
*/
extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
uLong uncompressed_size,
uLong crc32));
extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
ZPOS64_T uncompressed_size,
uLong crc32));
/*
Close the current file in the zipfile, for file opened with
parameter raw=1 in zipOpenNewFileInZip2
uncompressed_size and crc32 are value for the uncompressed size
*/
extern int ZEXPORT zipClose OF((zipFile file,
const char* global_comment));
/*
Close the zipfile
*/
extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
/*
zipRemoveExtraInfoBlock - Added by Mathias Svensson
Remove extra information block from a extra information data for the local file header or central directory header
It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
0x0001 is the signature header for the ZIP64 extra information blocks
usage.
Remove ZIP64 Extra information from a central director extra field data
zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
Remove ZIP64 Extra information from a Local File Header extra field data
zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
*/
#ifdef __cplusplus
}
#endif
#endif /* _zip64_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,271 +0,0 @@
/* zutil.h -- internal interface and configuration of the compression library
* Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
/* @(#) $Id$ */
#ifndef ZUTIL_H
#define ZUTIL_H
#ifdef HAVE_HIDDEN
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
#else
# define ZLIB_INTERNAL
#endif
#include "zlib.h"
#if defined(STDC) && !defined(Z_SOLO)
# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
# include <stddef.h>
# endif
# include <string.h>
# include <stdlib.h>
#endif
#ifdef Z_SOLO
typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
#endif
#ifndef local
# define local static
#endif
/* since "static" is used to mean two completely different things in C, we
define "local" for the non-static meaning of "static", for readability
(compile with -Dlocal if your debugger can't find static symbols) */
typedef unsigned char uch;
typedef uch FAR uchf;
typedef unsigned short ush;
typedef ush FAR ushf;
typedef unsigned long ulg;
extern z_const char* const z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */
#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
#define ERR_RETURN(strm,err) \
return (strm->msg = ERR_MSG(err), (err))
/* To be used only when the state is known to be valid */
/* common constants */
#ifndef DEF_WBITS
# define DEF_WBITS MAX_WBITS
#endif
/* default windowBits for decompression. MAX_WBITS is for compression only */
#if MAX_MEM_LEVEL >= 8
# define DEF_MEM_LEVEL 8
#else
# define DEF_MEM_LEVEL MAX_MEM_LEVEL
#endif
/* default memLevel */
#define STORED_BLOCK 0
#define STATIC_TREES 1
#define DYN_TREES 2
/* The three kinds of block type */
#define MIN_MATCH 3
#define MAX_MATCH 258
/* The minimum and maximum match lengths */
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
/* target dependencies */
#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
# define OS_CODE 0x00
# ifndef Z_SOLO
# if defined(__TURBOC__) || defined(__BORLANDC__)
# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
/* Allow compilation with ANSI keywords only enabled */
void _Cdecl farfree( void *block );
void *_Cdecl farmalloc( unsigned long nbytes );
# else
# include <alloc.h>
# endif
# else /* MSC or DJGPP */
# include <malloc.h>
# endif
# endif
#endif
#ifdef AMIGA
# define OS_CODE 1
#endif
#if defined(VAXC) || defined(VMS)
# define OS_CODE 2
# define F_OPEN(name, mode) \
fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
#endif
#ifdef __370__
# if __TARGET_LIB__ < 0x20000000
# define OS_CODE 4
# elif __TARGET_LIB__ < 0x40000000
# define OS_CODE 11
# else
# define OS_CODE 8
# endif
#endif
#if defined(ATARI) || defined(atarist)
# define OS_CODE 5
#endif
#ifdef OS2
# define OS_CODE 6
# if defined(M_I86) && !defined(Z_SOLO)
# include <malloc.h>
# endif
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
# define OS_CODE 7
# ifndef Z_SOLO
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fdopen */
# else
# ifndef fdopen
# define fdopen(fd,mode) NULL /* No fdopen() */
# endif
# endif
# endif
#endif
#ifdef __acorn
# define OS_CODE 13
#endif
#if defined(WIN32) && !defined(__CYGWIN__)
# define OS_CODE 10
#endif
#ifdef _BEOS_
# define OS_CODE 16
#endif
#ifdef __TOS_OS400__
# define OS_CODE 18
#endif
#ifdef __APPLE__
# define OS_CODE 19
#endif
#if defined(_BEOS_) || defined(RISCOS)
# define fdopen(fd,mode) NULL /* No fdopen() */
#endif
#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
# if defined(_WIN32_WCE)
# define fdopen(fd,mode) NULL /* No fdopen() */
# ifndef _PTRDIFF_T_DEFINED
typedef int ptrdiff_t;
# define _PTRDIFF_T_DEFINED
# endif
# else
# define fdopen(fd,type) _fdopen(fd,type)
# endif
#endif
#if defined(__BORLANDC__) && !defined(MSDOS)
#pragma warn -8004
#pragma warn -8008
#pragma warn -8066
#endif
/* provide prototypes for these when building zlib without LFS */
#if !defined(_WIN32) && \
(!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
#endif
/* common defaults */
#ifndef OS_CODE
# define OS_CODE 3 /* assume Unix */
#endif
#ifndef F_OPEN
# define F_OPEN(name, mode) fopen((name), (mode))
#endif
/* functions */
#if defined(pyr) || defined(Z_SOLO)
# define NO_MEMCPY
#endif
#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
/* Use our own functions for small and medium model with MSC <= 5.0.
* You may have to use the same strategy for Borland C (untested).
* The __SC__ check is for Symantec.
*/
# define NO_MEMCPY
#endif
#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
# define HAVE_MEMCPY
#endif
#ifdef HAVE_MEMCPY
# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
# define zmemcpy _fmemcpy
# define zmemcmp _fmemcmp
# define zmemzero(dest, len) _fmemset(dest, 0, len)
# else
# define zmemcpy memcpy
# define zmemcmp memcmp
# define zmemzero(dest, len) memset(dest, 0, len)
# endif
#else
void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
#endif
/* Diagnostic functions */
#ifdef ZLIB_DEBUG
# include <stdio.h>
extern int ZLIB_INTERNAL z_verbose;
extern void ZLIB_INTERNAL z_error OF((char *m));
# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
# define Trace(x) {if (z_verbose>=0) fprintf x ;}
# define Tracev(x) {if (z_verbose>0) fprintf x ;}
# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
#else
# define Assert(cond,msg)
# define Trace(x)
# define Tracev(x)
# define Tracevv(x)
# define Tracec(c,x)
# define Tracecv(c,x)
#endif
#ifndef Z_SOLO
voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
unsigned size));
void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
#endif
#define ZALLOC(strm, items, size) \
(*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
/* Reverse the bytes in a 32-bit value */
#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
(((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
#endif /* ZUTIL_H */

View File

@ -1,197 +0,0 @@
/* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-2011, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#include "zutil.h"
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#define BASE 65521U /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#define DO16(buf) DO8(buf,0); DO8(buf,8);
/* use NO_DIVIDE if your processor does not do division in hardware --
try it both ways to see which is faster */
#ifdef NO_DIVIDE
/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
(thank you to John Reiser for pointing this out) */
# define CHOP(a) \
do { \
unsigned long tmp = a >> 16; \
a &= 0xffffUL; \
a += (tmp << 4) - tmp; \
} while (0)
# define MOD28(a) \
do { \
CHOP(a); \
if (a >= BASE) a -= BASE; \
} while (0)
# define MOD(a) \
do { \
CHOP(a); \
MOD28(a); \
} while (0)
# define MOD63(a) \
do { /* this assumes a is not negative */ \
z_off64_t tmp = a >> 32; \
a &= 0xffffffffL; \
a += (tmp << 8) - (tmp << 5) + tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
if (a >= BASE) a -= BASE; \
} while (0)
#else
# define MOD(a) a %= BASE
# define MOD28(a) a %= BASE
# define MOD63(a) a %= BASE
#endif
/* ========================================================================= */
uLong ZEXPORT adler32_z(adler, buf, len)
uLong adler;
const Bytef* buf;
z_size_t len;
{
unsigned long sum2;
unsigned n;
/* split Adler-32 into component sums */
sum2 = (adler >> 16) & 0xffff;
adler &= 0xffff;
/* in case user likes doing a byte at a time, keep it fast */
if (len == 1)
{
adler += buf[0];
if (adler >= BASE)
adler -= BASE;
sum2 += adler;
if (sum2 >= BASE)
sum2 -= BASE;
return adler | (sum2 << 16);
}
/* initial Adler-32 value (deferred check for len == 1 speed) */
if (buf == Z_NULL)
return 1L;
/* in case short lengths are provided, keep it somewhat fast */
if (len < 16)
{
while (len--)
{
adler += *buf++;
sum2 += adler;
}
if (adler >= BASE)
adler -= BASE;
MOD28(sum2); /* only added so many BASE's */
return adler | (sum2 << 16);
}
/* do length NMAX blocks -- requires just one modulo operation */
while (len >= NMAX)
{
len -= NMAX;
n = NMAX / 16; /* NMAX is divisible by 16 */
do
{
DO16(buf); /* 16 sums unrolled */
buf += 16;
}
while (--n);
MOD(adler);
MOD(sum2);
}
/* do remaining bytes (less than NMAX, still just one modulo) */
if (len)
{ /* avoid modulos if none remaining */
while (len >= 16)
{
len -= 16;
DO16(buf);
buf += 16;
}
while (len--)
{
adler += *buf++;
sum2 += adler;
}
MOD(adler);
MOD(sum2);
}
/* return recombined sums */
return adler | (sum2 << 16);
}
/* ========================================================================= */
uLong ZEXPORT adler32(adler, buf, len)
uLong adler;
const Bytef* buf;
uInt len;
{
return adler32_z(adler, buf, len);
}
/* ========================================================================= */
local uLong adler32_combine_(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
unsigned long sum1;
unsigned long sum2;
unsigned rem;
/* for negative len, return invalid adler32 as a clue for debugging */
if (len2 < 0)
return 0xffffffffUL;
/* the derivation of this formula is left as an exercise for the reader */
MOD63(len2); /* assumes len2 >= 0 */
rem = (unsigned)len2;
sum1 = adler1 & 0xffff;
sum2 = rem * sum1;
MOD(sum2);
sum1 += (adler2 & 0xffff) + BASE - 1;
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
if (sum1 >= BASE) sum1 -= BASE;
if (sum1 >= BASE) sum1 -= BASE;
if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
if (sum2 >= BASE) sum2 -= BASE;
return sum1 | (sum2 << 16);
}
/* ========================================================================= */
uLong ZEXPORT adler32_combine(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}
uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}

View File

@ -1,93 +0,0 @@
/* compress.c -- compress a memory buffer
* Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#define ZLIB_INTERNAL
#include "zlib.h"
/* ===========================================================================
Compresses the source buffer into the destination buffer. The level
parameter has the same meaning as in deflateInit. sourceLen is the byte
length of the source buffer. Upon entry, destLen is the total size of the
destination buffer, which must be at least 0.1% larger than sourceLen plus
12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
Z_STREAM_ERROR if the level parameter is invalid.
*/
int ZEXPORT compress2(dest, destLen, source, sourceLen, level)
Bytef* dest;
uLongf* destLen;
const Bytef* source;
uLong sourceLen;
int level;
{
z_stream stream;
int err;
const uInt max = (uInt)-1;
uLong left;
left = *destLen;
*destLen = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;
err = deflateInit(&stream, level);
if (err != Z_OK) return err;
stream.next_out = dest;
stream.avail_out = 0;
stream.next_in = (z_const Bytef *)source;
stream.avail_in = 0;
do
{
if (stream.avail_out == 0)
{
stream.avail_out = left > (uLong)max ? max : (uInt)left;
left -= stream.avail_out;
}
if (stream.avail_in == 0)
{
stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
sourceLen -= stream.avail_in;
}
err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
}
while (err == Z_OK);
*destLen = stream.total_out;
deflateEnd(&stream);
return err == Z_STREAM_END ? Z_OK : err;
}
/* ===========================================================================
*/
int ZEXPORT compress(dest, destLen, source, sourceLen)
Bytef* dest;
uLongf* destLen;
const Bytef* source;
uLong sourceLen;
{
return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
}
/* ===========================================================================
If the default memLevel or windowBits for deflateInit() is changed, then
this function needs to be updated.
*/
uLong ZEXPORT compressBound(sourceLen)
uLong sourceLen;
{
return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
(sourceLen >> 25) + 13;
}

View File

@ -1,469 +0,0 @@
/* crc32.c -- compute the CRC-32 of a data stream
* Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
* CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
* tables for updating the shift register in one step with three exclusive-ors
* instead of four steps with four exclusive-ors. This results in about a
* factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
*/
/* @(#) $Id$ */
/*
Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
protection on the static variables used to control the first-use generation
of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
first call get_crc_table() to initialize the tables before allowing more than
one thread to use crc32().
DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
*/
#ifdef MAKECRCH
# include <stdio.h>
# ifndef DYNAMIC_CRC_TABLE
# define DYNAMIC_CRC_TABLE
# endif /* !DYNAMIC_CRC_TABLE */
#endif /* MAKECRCH */
#include "zutil.h" /* for STDC and FAR definitions */
/* Definitions for doing the crc four data bytes at a time. */
#if !defined(NOBYFOUR) && defined(Z_U4)
# define BYFOUR
#endif
#ifdef BYFOUR
local unsigned long crc32_little OF((unsigned long,
const unsigned char FAR *, z_size_t));
local unsigned long crc32_big OF((unsigned long,
const unsigned char FAR *, z_size_t));
# define TBLS 8
#else
# define TBLS 1
#endif /* BYFOUR */
/* Local functions for crc concatenation */
local unsigned long gf2_matrix_times OF((unsigned long *mat,
unsigned long vec));
local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
#ifdef DYNAMIC_CRC_TABLE
local volatile int crc_table_empty = 1;
local z_crc_t FAR crc_table[TBLS][256];
local void make_crc_table OF((void));
#ifdef MAKECRCH
local void write_table OF((FILE *, const z_crc_t FAR *));
#endif /* MAKECRCH */
/*
Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
Polynomials over GF(2) are represented in binary, one bit per coefficient,
with the lowest powers in the most significant bit. Then adding polynomials
is just exclusive-or, and multiplying a polynomial by x is a right shift by
one. If we call the above polynomial p, and represent a byte as the
polynomial q, also with the lowest power in the most significant bit (so the
byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
where a mod b means the remainder after dividing a by b.
This calculation is done using the shift-register method of multiplying and
taking the remainder. The register is initialized to zero, and for each
incoming bit, x^32 is added mod p to the register if the bit is a one (where
x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
x (which is shifting right by one and adding x^32 mod p if the bit shifted
out is a one). We start with the highest power (least significant bit) of
q and repeat for all eight bits of q.
The first table is simply the CRC of all possible eight bit values. This is
all the information needed to generate CRCs on data a byte at a time for all
combinations of CRC register values and incoming bytes. The remaining tables
allow for word-at-a-time CRC calculation for both big-endian and little-
endian machines, where a word is four bytes.
*/
local void make_crc_table()
{
z_crc_t c;
int n, k;
z_crc_t poly; /* polynomial exclusive-or pattern */
/* terms of polynomial defining this crc (except x^32): */
static volatile int first = 1; /* flag to limit concurrent making */
static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
/* See if another task is already doing this (not thread-safe, but better
than nothing -- significantly reduces duration of vulnerability in
case the advice about DYNAMIC_CRC_TABLE is ignored) */
if (first) {
first = 0;
/* make exclusive-or pattern from polynomial (0xedb88320UL) */
poly = 0;
for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
poly |= (z_crc_t)1 << (31 - p[n]);
/* generate a crc for every 8-bit value */
for (n = 0; n < 256; n++) {
c = (z_crc_t)n;
for (k = 0; k < 8; k++)
c = c & 1 ? poly ^ (c >> 1) : c >> 1;
crc_table[0][n] = c;
}
#ifdef BYFOUR
/* generate crc for each value followed by one, two, and three zeros,
and then the byte reversal of those as well as the first table */
for (n = 0; n < 256; n++) {
c = crc_table[0][n];
crc_table[4][n] = ZSWAP32(c);
for (k = 1; k < 4; k++) {
c = crc_table[0][c & 0xff] ^ (c >> 8);
crc_table[k][n] = c;
crc_table[k + 4][n] = ZSWAP32(c);
}
}
#endif /* BYFOUR */
crc_table_empty = 0;
}
else { /* not first */
/* wait for the other guy to finish (not efficient, but rare) */
while (crc_table_empty)
;
}
#ifdef MAKECRCH
/* write out CRC tables to crc32.h */
{
FILE *out;
out = fopen("crc32.h", "w");
if (out == NULL) return;
fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
fprintf(out, "local const z_crc_t FAR ");
fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
write_table(out, crc_table[0]);
# ifdef BYFOUR
fprintf(out, "#ifdef BYFOUR\n");
for (k = 1; k < 8; k++) {
fprintf(out, " },\n {\n");
write_table(out, crc_table[k]);
}
fprintf(out, "#endif\n");
# endif /* BYFOUR */
fprintf(out, " }\n};\n");
fclose(out);
}
#endif /* MAKECRCH */
}
#ifdef MAKECRCH
local void write_table(out, table)
FILE *out;
const z_crc_t FAR *table;
{
int n;
for (n = 0; n < 256; n++)
fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
(unsigned long)(table[n]),
n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
}
#endif /* MAKECRCH */
#else /* !DYNAMIC_CRC_TABLE */
/* ========================================================================
* Tables of CRC-32s of all single-byte values, made by make_crc_table().
*/
#include "crc32.h"
#endif /* DYNAMIC_CRC_TABLE */
/* =========================================================================
* This function can be used by asm versions of crc32()
*/
const z_crc_t FAR * ZEXPORT get_crc_table()
{
#ifdef DYNAMIC_CRC_TABLE
if (crc_table_empty)
make_crc_table();
#endif /* DYNAMIC_CRC_TABLE */
return (const z_crc_t FAR *)crc_table;
}
/* ========================================================================= */
#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
/* ========================================================================= */
unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR * buf;
z_size_t len;
{
if (buf == Z_NULL) return 0UL;
#ifdef DYNAMIC_CRC_TABLE
if (crc_table_empty)
make_crc_table();
#endif /* DYNAMIC_CRC_TABLE */
#ifdef BYFOUR
if (sizeof(void *) == sizeof(ptrdiff_t))
{
z_crc_t endian;
endian = 1;
if (*((unsigned char *)(&endian)))
return crc32_little(crc, buf, len);
else
return crc32_big(crc, buf, len);
}
#endif /* BYFOUR */
crc = crc ^ 0xffffffffUL;
while (len >= 8)
{
DO8;
len -= 8;
}
if (len)
do
{
DO1;
}
while (--len);
return crc ^ 0xffffffffUL;
}
/* ========================================================================= */
unsigned long ZEXPORT crc32(crc, buf, len)
unsigned long crc;
const unsigned char FAR * buf;
uInt len;
{
return crc32_z(crc, buf, len);
}
#ifdef BYFOUR
/*
This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
integer pointer type. This violates the strict aliasing rule, where a
compiler can assume, for optimization purposes, that two pointers to
fundamentally different types won't ever point to the same memory. This can
manifest as a problem only if one of the pointers is written to. This code
only reads from those pointers. So long as this code remains isolated in
this compilation unit, there won't be a problem. For this reason, this code
should not be copied and pasted into a compilation unit in which other code
writes to the buffer that is passed to these routines.
*/
/* ========================================================================= */
#define DOLIT4 c ^= *buf4++; \
c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
/* ========================================================================= */
local unsigned long crc32_little(crc, buf, len)
unsigned long crc;
const unsigned char FAR * buf;
z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR * buf4;
c = (z_crc_t)crc;
c = ~c;
while (len && ((ptrdiff_t)buf & 3))
{
c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
len--;
}
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
while (len >= 32)
{
DOLIT32;
len -= 32;
}
while (len >= 4)
{
DOLIT4;
len -= 4;
}
buf = (const unsigned char FAR *)buf4;
if (len)
do
{
c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
}
while (--len);
c = ~c;
return (unsigned long)c;
}
/* ========================================================================= */
#define DOBIG4 c ^= *buf4++; \
c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
/* ========================================================================= */
local unsigned long crc32_big(crc, buf, len)
unsigned long crc;
const unsigned char FAR * buf;
z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR * buf4;
c = ZSWAP32((z_crc_t)crc);
c = ~c;
while (len && ((ptrdiff_t)buf & 3))
{
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
len--;
}
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
while (len >= 32)
{
DOBIG32;
len -= 32;
}
while (len >= 4)
{
DOBIG4;
len -= 4;
}
buf = (const unsigned char FAR *)buf4;
if (len)
do
{
c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
}
while (--len);
c = ~c;
return (unsigned long)(ZSWAP32(c));
}
#endif /* BYFOUR */
#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
/* ========================================================================= */
local unsigned long gf2_matrix_times(mat, vec)
unsigned long* mat;
unsigned long vec;
{
unsigned long sum;
sum = 0;
while (vec)
{
if (vec & 1)
sum ^= *mat;
vec >>= 1;
mat++;
}
return sum;
}
/* ========================================================================= */
local void gf2_matrix_square(square, mat)
unsigned long* square;
unsigned long* mat;
{
int n;
for (n = 0; n < GF2_DIM; n++)
square[n] = gf2_matrix_times(mat, mat[n]);
}
/* ========================================================================= */
local uLong crc32_combine_(crc1, crc2, len2)
uLong crc1;
uLong crc2;
z_off64_t len2;
{
int n;
unsigned long row;
unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
/* degenerate case (also disallow negative lengths) */
if (len2 <= 0)
return crc1;
/* put operator for one zero bit in odd */
odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
row = 1;
for (n = 1; n < GF2_DIM; n++)
{
odd[n] = row;
row <<= 1;
}
/* put operator for two zero bits in even */
gf2_matrix_square(even, odd);
/* put operator for four zero bits in odd */
gf2_matrix_square(odd, even);
/* apply len2 zeros to crc1 (first square will put the operator for one
zero byte, eight zero bits, in even) */
do
{
/* apply zeros operator for this bit of len2 */
gf2_matrix_square(even, odd);
if (len2 & 1)
crc1 = gf2_matrix_times(even, crc1);
len2 >>= 1;
/* if no more bits set, then done */
if (len2 == 0)
break;
/* another iteration of the loop with odd and even swapped */
gf2_matrix_square(odd, even);
if (len2 & 1)
crc1 = gf2_matrix_times(odd, crc1);
len2 >>= 1;
/* if no more bits set, then done */
}
while (len2 != 0);
/* return combined crc */
crc1 ^= crc2;
return crc1;
}
/* ========================================================================= */
uLong ZEXPORT crc32_combine(crc1, crc2, len2)
uLong crc1;
uLong crc2;
z_off_t len2;
{
return crc32_combine_(crc1, crc2, len2);
}
uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
uLong crc1;
uLong crc2;
z_off64_t len2;
{
return crc32_combine_(crc1, crc2, len2);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +0,0 @@
/* gzclose.c -- zlib gzclose() function
* Copyright (C) 2004, 2010 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
/* gzclose() is in a separate file so that it is linked in only if it is used.
That way the other gzclose functions can be used instead to avoid linking in
unneeded compression or decompression routines. */
int ZEXPORT gzclose(file)
gzFile file;
{
#ifndef NO_GZCOMPRESS
gz_statep state;
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
#else
return gzclose_r(file);
#endif
}

View File

@ -1,678 +0,0 @@
/* gzlib.c -- zlib functions common to reading and writing gzip files
* Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
# define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
# define LSEEK lseek64
#else
# define LSEEK lseek
#endif
#endif
/* Local functions */
local void gz_reset OF((gz_statep));
local gzFile gz_open OF((const void *, int, const char *));
#if defined UNDER_CE
/* Map the Windows error number in ERROR to a locale-dependent error message
string and return a pointer to it. Typically, the values for ERROR come
from GetLastError.
The string pointed to shall not be modified by the application, but may be
overwritten by a subsequent call to gz_strwinerror
The gz_strwinerror function does not change the current setting of
GetLastError. */
char ZLIB_INTERNAL *gz_strwinerror (error)
DWORD error;
{
static char buf[1024];
wchar_t *msgbuf;
DWORD lasterr = GetLastError();
DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
error,
0, /* Default language */
(LPVOID)&msgbuf,
0,
NULL);
if (chars != 0) {
/* If there is an \r\n appended, zap it. */
if (chars >= 2
&& msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
chars -= 2;
msgbuf[chars] = 0;
}
if (chars > sizeof (buf) - 1) {
chars = sizeof (buf) - 1;
msgbuf[chars] = 0;
}
wcstombs(buf, msgbuf, chars + 1);
LocalFree(msgbuf);
}
else {
sprintf(buf, "unknown win32 error (%ld)", error);
}
SetLastError(lasterr);
return buf;
}
#endif /* UNDER_CE */
/* Reset gzip file state */
local void gz_reset(state)
gz_statep state;
{
state->x.have = 0; /* no output data available */
if (state->mode == GZ_READ)
{ /* for reading ... */
state->eof = 0; /* not at end of file */
state->past = 0; /* have not read past end yet */
state->how = LOOK; /* look for gzip header */
}
state->seek = 0; /* no seek request pending */
gz_error(state, Z_OK, NULL); /* clear error */
state->x.pos = 0; /* no uncompressed data yet */
state->strm.avail_in = 0; /* no input data yet */
}
/* Open a gzip file either by name or file descriptor. */
local gzFile gz_open(path, fd, mode)
const
void* path;
int fd;
const char* mode;
{
gz_statep state;
z_size_t len;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
#endif
#ifdef O_EXCL
int exclusive = 0;
#endif
/* check input */
if (path == NULL)
return NULL;
/* allocate gzFile structure to return */
state = (gz_statep)malloc(sizeof(gz_state));
if (state == NULL)
return NULL;
state->size = 0; /* no buffers allocated yet */
state->want = GZBUFSIZE; /* requested buffer size */
state->msg = NULL; /* no error message yet */
/* interpret mode */
state->mode = GZ_NONE;
state->level = Z_DEFAULT_COMPRESSION;
state->strategy = Z_DEFAULT_STRATEGY;
state->direct = 0;
while (*mode)
{
if (*mode >= '0' && *mode <= '9')
state->level = *mode - '0';
else
switch (*mode)
{
case 'r':
state->mode = GZ_READ;
break;
#ifndef NO_GZCOMPRESS
case 'w':
state->mode = GZ_WRITE;
break;
case 'a':
state->mode = GZ_APPEND;
break;
#endif
case '+': /* can't read and write at the same time */
free(state);
return NULL;
case 'b': /* ignore -- will request binary anyway */
break;
#ifdef O_CLOEXEC
case 'e':
cloexec = 1;
break;
#endif
#ifdef O_EXCL
case 'x':
exclusive = 1;
break;
#endif
case 'f':
state->strategy = Z_FILTERED;
break;
case 'h':
state->strategy = Z_HUFFMAN_ONLY;
break;
case 'R':
state->strategy = Z_RLE;
break;
case 'F':
state->strategy = Z_FIXED;
break;
case 'T':
state->direct = 1;
break;
default: /* could consider as an error, but just ignore */
;
}
mode++;
}
/* must provide an "r", "w", or "a" */
if (state->mode == GZ_NONE)
{
free(state);
return NULL;
}
/* can't force transparent read */
if (state->mode == GZ_READ)
{
if (state->direct)
{
free(state);
return NULL;
}
state->direct = 1; /* for empty file */
}
/* save the path name for error messages */
#ifdef WIDECHAR
if (fd == -2)
{
len = wcstombs(NULL, path, 0);
if (len == (z_size_t)-1)
len = 0;
}
else
#endif
len = strlen((const char *)path);
state->path = (char *)malloc(len + 1);
if (state->path == NULL)
{
free(state);
return NULL;
}
#ifdef WIDECHAR
if (fd == -2)
if (len)
wcstombs(state->path, path, len + 1);
else
*(state->path) = 0;
else
#endif
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
(void)snprintf(state->path, len + 1, "%s", (const char *)path);
#else
strcpy(state->path, path);
#endif
/* compute the flags for open() */
oflag =
#ifdef O_LARGEFILE
O_LARGEFILE |
#endif
#ifdef O_BINARY
O_BINARY |
#endif
#ifdef O_CLOEXEC
(cloexec ? O_CLOEXEC : 0) |
#endif
(state->mode == GZ_READ ?
O_RDONLY :
(O_WRONLY | O_CREAT |
#ifdef O_EXCL
(exclusive ? O_EXCL : 0) |
#endif
(state->mode == GZ_WRITE ?
O_TRUNC :
O_APPEND)));
/* open the file with the appropriate flags (or just use fd) */
state->fd = fd > -1 ? fd : (
#ifdef WIDECHAR
fd == -2 ? _wopen(path, oflag, 0666) :
#endif
open((const char *)path, oflag, 0666));
if (state->fd == -1)
{
free(state->path);
free(state);
return NULL;
}
if (state->mode == GZ_APPEND)
{
LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */
state->mode = GZ_WRITE; /* simplify later checks */
}
/* save the current position for rewinding (only if reading) */
if (state->mode == GZ_READ)
{
state->start = LSEEK(state->fd, 0, SEEK_CUR);
if (state->start == -1) state->start = 0;
}
/* initialize stream */
gz_reset(state);
/* return stream */
return (gzFile)state;
}
/* -- see zlib.h -- */
gzFile ZEXPORT gzopen(path, mode)
const
char* path;
const char* mode;
{
return gz_open(path, -1, mode);
}
/* -- see zlib.h -- */
gzFile ZEXPORT gzopen64(path, mode)
const
char* path;
const char* mode;
{
return gz_open(path, -1, mode);
}
/* -- see zlib.h -- */
gzFile ZEXPORT gzdopen(fd, mode)
int fd;
const char* mode;
{
char* path; /* identifier for error messages */
gzFile gz;
if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
return NULL;
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
(void)snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd);
#else
sprintf(path, "<fd:%d>", fd); /* for debugging */
#endif
gz = gz_open(path, fd, mode);
free(path);
return gz;
}
/* -- see zlib.h -- */
#ifdef WIDECHAR
gzFile ZEXPORT gzopen_w(path, mode)
const wchar_t
*
path;
const char* mode;
{
return gz_open(path, -2, mode);
}
#endif
/* -- see zlib.h -- */
int ZEXPORT gzbuffer(file, size)
gzFile file;
unsigned size;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* make sure we haven't already allocated memory */
if (state->size != 0)
return -1;
/* check and set requested size */
if ((size << 1) < size)
return -1; /* need to be able to double it */
if (size < 2)
size = 2; /* need two bytes to check magic header */
state->want = size;
return 0;
}
/* -- see zlib.h -- */
int ZEXPORT gzrewind(file)
gzFile file;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* back up and start over */
if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
return -1;
gz_reset(state);
return 0;
}
/* -- see zlib.h -- */
z_off64_t ZEXPORT gzseek64(file, offset, whence)
gzFile file;
z_off64_t offset;
int whence;
{
unsigned n;
z_off64_t ret;
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* check that there's no error */
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
return -1;
/* can only seek from start or relative to current position */
if (whence != SEEK_SET && whence != SEEK_CUR)
return -1;
/* normalize offset to a SEEK_CUR specification */
if (whence == SEEK_SET)
offset -= state->x.pos;
else if (state->seek)
offset += state->skip;
state->seek = 0;
/* if within raw area while reading, just go there */
if (state->mode == GZ_READ && state->how == COPY &&
state->x.pos + offset >= 0)
{
ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
if (ret == -1)
return -1;
state->x.have = 0;
state->eof = 0;
state->past = 0;
state->seek = 0;
gz_error(state, Z_OK, NULL);
state->strm.avail_in = 0;
state->x.pos += offset;
return state->x.pos;
}
/* calculate skip amount, rewinding if needed for back seek when reading */
if (offset < 0)
{
if (state->mode != GZ_READ) /* writing -- can't go backwards */
return -1;
offset += state->x.pos;
if (offset < 0) /* before start of file! */
return -1;
if (gzrewind(file) == -1) /* rewind, then skip to offset */
return -1;
}
/* if reading, skip what's in output buffer (one less gzgetc() check) */
if (state->mode == GZ_READ)
{
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
(unsigned)offset : state->x.have;
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
offset -= n;
}
/* request skip (if not zero) */
if (offset)
{
state->seek = 1;
state->skip = offset;
}
return state->x.pos + offset;
}
/* -- see zlib.h -- */
z_off_t ZEXPORT gzseek(file, offset, whence)
gzFile file;
z_off_t offset;
int whence;
{
z_off64_t ret;
ret = gzseek64(file, (z_off64_t)offset, whence);
return ret == (z_off_t)ret ? (z_off_t)ret : -1;
}
/* -- see zlib.h -- */
z_off64_t ZEXPORT gztell64(file)
gzFile file;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* return position */
return state->x.pos + (state->seek ? state->skip : 0);
}
/* -- see zlib.h -- */
z_off_t ZEXPORT gztell(file)
gzFile file;
{
z_off64_t ret;
ret = gztell64(file);
return ret == (z_off_t)ret ? (z_off_t)ret : -1;
}
/* -- see zlib.h -- */
z_off64_t ZEXPORT gzoffset64(file)
gzFile file;
{
z_off64_t offset;
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return -1;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return -1;
/* compute and return effective offset in file */
offset = LSEEK(state->fd, 0, SEEK_CUR);
if (offset == -1)
return -1;
if (state->mode == GZ_READ) /* reading */
offset -= state->strm.avail_in; /* don't count buffered input */
return offset;
}
/* -- see zlib.h -- */
z_off_t ZEXPORT gzoffset(file)
gzFile file;
{
z_off64_t ret;
ret = gzoffset64(file);
return ret == (z_off_t)ret ? (z_off_t)ret : -1;
}
/* -- see zlib.h -- */
int ZEXPORT gzeof(file)
gzFile file;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return 0;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return 0;
/* return end-of-file state */
return state->mode == GZ_READ ? state->past : 0;
}
/* -- see zlib.h -- */
const char* ZEXPORT gzerror(file, errnum)
gzFile file;
int* errnum;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return NULL;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return NULL;
/* return error information */
if (errnum != NULL)
*errnum = state->err;
return state->err == Z_MEM_ERROR ? "out of memory" :
(state->msg == NULL ? "" : state->msg);
}
/* -- see zlib.h -- */
void ZEXPORT gzclearerr(file)
gzFile file;
{
gz_statep state;
/* get internal structure and check integrity */
if (file == NULL)
return;
state = (gz_statep)file;
if (state->mode != GZ_READ && state->mode != GZ_WRITE)
return;
/* clear error and end-of-file */
if (state->mode == GZ_READ)
{
state->eof = 0;
state->past = 0;
}
gz_error(state, Z_OK, NULL);
}
/* Create an error message in allocated memory and set state->err and
state->msg accordingly. Free any previous error message already there. Do
not try to free or allocate space if the error is Z_MEM_ERROR (out of
memory). Simply save the error message as a static string. If there is an
allocation failure constructing the error message, then convert the error to
out of memory. */
void ZLIB_INTERNAL gz_error(state, err, msg)
gz_statep state;
int err;
const char* msg;
{
/* free previously allocated message and clear */
if (state->msg != NULL)
{
if (state->err != Z_MEM_ERROR)
free(state->msg);
state->msg = NULL;
}
/* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
if (err != Z_OK && err != Z_BUF_ERROR)
state->x.have = 0;
/* set error code, and if no message, then done */
state->err = err;
if (msg == NULL)
return;
/* for an out of memory error, return literal string when requested */
if (err == Z_MEM_ERROR)
return;
/* construct error message with path */
if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
NULL)
{
state->err = Z_MEM_ERROR;
return;
}
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
(void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
"%s%s%s", state->path, ": ", msg);
#else
strcpy(state->msg, state->path);
strcat(state->msg, ": ");
strcat(state->msg, msg);
#endif
}
#ifndef INT_MAX
/* portably return maximum value for an int (when limits.h presumed not
available) -- we need to do this to cover cases where 2's complement not
used, since C standard permits 1's complement and sign-bit representations,
otherwise we could just use ((unsigned)-1) >> 1 */
unsigned ZLIB_INTERNAL gz_intmax()
{
unsigned p, q;
p = 1;
do {
q = p;
p <<= 1;
p++;
} while (p > q);
return q >> 1;
}
#endif

View File

@ -1,714 +0,0 @@
/* gzread.c -- zlib functions for reading gzip files
* Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
/* Local functions */
local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
local int gz_avail OF((gz_statep));
local int gz_look OF((gz_statep));
local int gz_decomp OF((gz_statep));
local int gz_fetch OF((gz_statep));
local int gz_skip OF((gz_statep, z_off64_t));
local z_size_t gz_read OF((gz_statep, voidp, z_size_t));
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
state->fd, and update state->eof, state->err, and state->msg as appropriate.
This function needs to loop on read(), since read() is not guaranteed to
read the number of bytes requested, depending on the type of descriptor. */
local int gz_load(state, buf, len, have)
gz_statep state;
unsigned char* buf;
unsigned len;
unsigned* have;
{
int ret;
unsigned get, max = ((unsigned)-1 >> 2) + 1;
*have = 0;
do
{
get = len - *have;
if (get > max)
get = max;
ret = read(state->fd, buf + *have, get);
if (ret <= 0)
break;
*have += (unsigned)ret;
}
while (*have < len);
if (ret < 0)
{
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
if (ret == 0)
state->eof = 1;
return 0;
}
/* Load up input buffer and set eof flag if last data loaded -- return -1 on
error, 0 otherwise. Note that the eof flag is set when the end of the input
file is reached, even though there may be unused data in the buffer. Once
that data has been used, no more attempts will be made to read the file.
If strm->avail_in != 0, then the current data is moved to the beginning of
the input buffer, and then the remainder of the buffer is loaded with the
available data from the input file. */
local int gz_avail(state)
gz_statep state;
{
unsigned got;
z_streamp strm = &(state->strm);
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
return -1;
if (state->eof == 0)
{
if (strm->avail_in)
{ /* copy what's there to the start */
unsigned char* p = state->in;
unsigned const char* q = strm->next_in;
unsigned n = strm->avail_in;
do
{
*p++ = *q++;
}
while (--n);
}
if (gz_load(state, state->in + strm->avail_in,
state->size - strm->avail_in, &got) == -1)
return -1;
strm->avail_in += got;
strm->next_in = state->in;
}
return 0;
}
/* Look for gzip header, set up for inflate or copy. state->x.have must be 0.
If this is the first time in, allocate required memory. state->how will be
left unchanged if there is no more input data available, will be set to COPY
if there is no gzip header and direct copying will be performed, or it will
be set to GZIP for decompression. If direct copying, then leftover input
data from the input buffer will be copied to the output buffer. In that
case, all further file reads will be directly to either the output buffer or
a user buffer. If decompressing, the inflate state will be initialized.
gz_look() will return 0 on success or -1 on failure. */
local int gz_look(state)
gz_statep state;
{
z_streamp strm = &(state->strm);
/* allocate read buffers and inflate memory */
if (state->size == 0)
{
/* allocate buffers */
state->in = (unsigned char *)malloc(state->want);
state->out = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL || state->out == NULL)
{
free(state->out);
free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
state->size = state->want;
/* allocate inflate memory */
state->strm.zalloc = Z_NULL;
state->strm.zfree = Z_NULL;
state->strm.opaque = Z_NULL;
state->strm.avail_in = 0;
state->strm.next_in = Z_NULL;
if (inflateInit2(&(state->strm), 15 + 16) != Z_OK)
{ /* gunzip */
free(state->out);
free(state->in);
state->size = 0;
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
}
/* get at least the magic bytes in the input buffer */
if (strm->avail_in < 2)
{
if (gz_avail(state) == -1)
return -1;
if (strm->avail_in == 0)
return 0;
}
/* look for gzip magic bytes -- if there, do gzip decoding (note: there is
a logical dilemma here when considering the case of a partially written
gzip file, to wit, if a single 31 byte is written, then we cannot tell
whether this is a single-byte file, or just a partially written gzip
file -- for here we assume that if a gzip file is being written, then
the header will be written in a single operation, so that reading a
single byte is sufficient indication that it is not a gzip file) */
if (strm->avail_in > 1 &&
strm->next_in[0] == 31 && strm->next_in[1] == 139)
{
inflateReset(strm);
state->how = GZIP;
state->direct = 0;
return 0;
}
/* no gzip header -- if we were decoding gzip before, then this is trailing
garbage. Ignore the trailing garbage and finish. */
if (state->direct == 0)
{
strm->avail_in = 0;
state->eof = 1;
state->x.have = 0;
return 0;
}
/* doing raw i/o, copy any leftover input to output -- this assumes that
the output buffer is larger than the input buffer, which also assures
space for gzungetc() */
state->x.next = state->out;
if (strm->avail_in)
{
memcpy(state->x.next, strm->next_in, strm->avail_in);
state->x.have = strm->avail_in;
strm->avail_in = 0;
}
state->how = COPY;
state->direct = 1;
return 0;
}
/* Decompress from input to the provided next_out and avail_out in the state.
On return, state->x.have and state->x.next point to the just decompressed
data. If the gzip stream completes, state->how is reset to LOOK to look for
the next gzip stream or raw data, once state->x.have is depleted. Returns 0
on success, -1 on failure. */
local int gz_decomp(state)
gz_statep state;
{
int ret = Z_OK;
unsigned had;
z_streamp strm = &(state->strm);
/* fill output buffer up to end of deflate stream */
had = strm->avail_out;
do
{
/* get more input for inflate() */
if (strm->avail_in == 0 && gz_avail(state) == -1)
return -1;
if (strm->avail_in == 0)
{
gz_error(state, Z_BUF_ERROR, "unexpected end of file");
break;
}
/* decompress and handle errors */
ret = inflate(strm, Z_NO_FLUSH);
if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT)
{
gz_error(state, Z_STREAM_ERROR,
"internal error: inflate stream corrupt");
return -1;
}
if (ret == Z_MEM_ERROR)
{
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
if (ret == Z_DATA_ERROR)
{ /* deflate stream invalid */
gz_error(state, Z_DATA_ERROR,
strm->msg == NULL ? "compressed data error" : strm->msg);
return -1;
}
}
while (strm->avail_out && ret != Z_STREAM_END);
/* update available output */
state->x.have = had - strm->avail_out;
state->x.next = strm->next_out - state->x.have;
/* if the gzip stream completed successfully, look for another */
if (ret == Z_STREAM_END)
state->how = LOOK;
/* good decompression */
return 0;
}
/* Fetch data and put it in the output buffer. Assumes state->x.have is 0.
Data is either copied from the input file or decompressed from the input
file depending on state->how. If state->how is LOOK, then a gzip header is
looked for to determine whether to copy or decompress. Returns -1 on error,
otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
end of the input file has been reached and all data has been processed. */
local int gz_fetch(state)
gz_statep state;
{
z_streamp strm = &(state->strm);
do
{
switch (state->how)
{
case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
if (gz_look(state) == -1)
return -1;
if (state->how == LOOK)
return 0;
break;
case COPY: /* -> COPY */
if (gz_load(state, state->out, state->size << 1, &(state->x.have))
== -1)
return -1;
state->x.next = state->out;
return 0;
case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
strm->avail_out = state->size << 1;
strm->next_out = state->out;
if (gz_decomp(state) == -1)
return -1;
}
}
while (state->x.have == 0 && (!state->eof || strm->avail_in));
return 0;
}
/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
local int gz_skip(state, len)
gz_statep state;
z_off64_t len;
{
unsigned n;
/* skip over len bytes or reach end-of-file, whichever comes first */
while (len)
/* skip over whatever is in output buffer */
if (state->x.have)
{
n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
(unsigned)len : state->x.have;
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
len -= n;
}
/* output buffer empty -- return if we're at the end of the input */
else if (state->eof && state->strm.avail_in == 0)
break;
/* need more data to skip -- load up output buffer */
else
{
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
return -1;
}
return 0;
}
/* Read len bytes into buf from file, or less than len up to the end of the
input. Return the number of bytes read. If zero is returned, either the
end of file was reached, or there was an error. state->err must be
consulted in that case to determine which. */
local z_size_t gz_read(state, buf, len)
gz_statep state;
voidp buf;
z_size_t len;
{
z_size_t got;
unsigned n;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
return 0;
/* process a skip request */
if (state->seek)
{
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
return 0;
}
/* get len bytes to buf, or less than len if at the end */
got = 0;
do
{
/* set n to the maximum amount of len that fits in an unsigned int */
n = -1;
if (n > len)
n = len;
/* first just try copying data from the output buffer */
if (state->x.have)
{
if (state->x.have < n)
n = state->x.have;
memcpy(buf, state->x.next, n);
state->x.next += n;
state->x.have -= n;
}
/* output buffer empty -- return if we're at the end of the input */
else if (state->eof && state->strm.avail_in == 0)
{
state->past = 1; /* tried to read past end */
break;
}
/* need output data -- for small len or new stream load up our output
buffer */
else if (state->how == LOOK || n < (state->size << 1))
{
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
return 0;
continue; /* no progress yet -- go back to copy above */
/* the copy above assures that we will leave with space in the
output buffer, allowing at least one gzungetc() to succeed */
}
/* large len -- read directly into user buffer */
else if (state->how == COPY)
{ /* read directly */
if (gz_load(state, (unsigned char *)buf, n, &n) == -1)
return 0;
}
/* large len -- decompress directly into user buffer */
else
{ /* state->how == GZIP */
state->strm.avail_out = n;
state->strm.next_out = (unsigned char *)buf;
if (gz_decomp(state) == -1)
return 0;
n = state->x.have;
state->x.have = 0;
}
/* update progress */
len -= n;
buf = (char *)buf + n;
got += n;
state->x.pos += n;
}
while (len);
/* return number of bytes read into user buffer */
return got;
}
/* -- see zlib.h -- */
int ZEXPORT gzread(file, buf, len)
gzFile file;
voidp buf;
unsigned len;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* since an int is returned, make sure len fits in one, otherwise return
with an error (this avoids a flaw in the interface) */
if ((int)len < 0)
{
gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
return -1;
}
/* read len or fewer bytes to buf */
len = gz_read(state, buf, len);
/* check for an error */
if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
return -1;
/* return the number of bytes read (this is assured to fit in an int) */
return (int)len;
}
/* -- see zlib.h -- */
z_size_t ZEXPORT gzfread(buf, size, nitems, file)
voidp buf;
z_size_t size;
z_size_t nitems;
gzFile file;
{
z_size_t len;
gz_statep state;
/* get internal structure */
if (file == NULL)
return 0;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return 0;
/* compute bytes to read -- error on overflow */
len = nitems * size;
if (size && len / size != nitems)
{
gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
return 0;
}
/* read len or fewer bytes to buf, return the number of full items read */
return len ? gz_read(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
#ifdef Z_PREFIX_SET
# undef z_gzgetc
#else
# undef gzgetc
#endif
int ZEXPORT gzgetc(file)
gzFile file;
{
int ret;
unsigned char buf[1];
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* try output buffer (no need to check for skip request) */
if (state->x.have)
{
state->x.have--;
state->x.pos++;
return *(state->x.next)++;
}
/* nothing there -- try gz_read() */
ret = gz_read(state, buf, 1);
return ret < 1 ? -1 : buf[0];
}
int ZEXPORT gzgetc_(file)
gzFile file;
{
return gzgetc(file);
}
/* -- see zlib.h -- */
int ZEXPORT gzungetc(c, file)
int c;
gzFile file;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return -1;
/* process a skip request */
if (state->seek)
{
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
return -1;
}
/* can't push EOF */
if (c < 0)
return -1;
/* if output buffer empty, put byte at end (allows more pushing) */
if (state->x.have == 0)
{
state->x.have = 1;
state->x.next = state->out + (state->size << 1) - 1;
state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
}
/* if no room, give up (must have already done a gzungetc()) */
if (state->x.have == (state->size << 1))
{
gz_error(state, Z_DATA_ERROR, "out of room to push characters");
return -1;
}
/* slide output data if needed and insert byte before existing data */
if (state->x.next == state->out)
{
unsigned char* src = state->out + state->x.have;
unsigned char* dest = state->out + (state->size << 1);
while (src > state->out)
*--dest = *--src;
state->x.next = dest;
}
state->x.have++;
state->x.next--;
state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
}
/* -- see zlib.h -- */
char* ZEXPORT gzgets(file, buf, len)
gzFile file;
char* buf;
int len;
{
unsigned left, n;
char* str;
unsigned char* eol;
gz_statep state;
/* check parameters and get internal structure */
if (file == NULL || buf == NULL || len < 1)
return NULL;
state = (gz_statep)file;
/* check that we're reading and that there's no (serious) error */
if (state->mode != GZ_READ ||
(state->err != Z_OK && state->err != Z_BUF_ERROR))
return NULL;
/* process a skip request */
if (state->seek)
{
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
return NULL;
}
/* copy output bytes up to new line or len - 1, whichever comes first --
append a terminating zero to the string (we don't check for a zero in
the contents, let the user worry about that) */
str = buf;
left = (unsigned)len - 1;
if (left)
do
{
/* assure that something is in the output buffer */
if (state->x.have == 0 && gz_fetch(state) == -1)
return NULL; /* error */
if (state->x.have == 0)
{ /* end of file */
state->past = 1; /* read past end */
break; /* return what we have */
}
/* look for end-of-line in current output buffer */
n = state->x.have > left ? left : state->x.have;
eol = (unsigned char *)memchr(state->x.next, '\n', n);
if (eol != NULL)
n = (unsigned)(eol - state->x.next) + 1;
/* copy through end-of-line, or remainder if not found */
memcpy(buf, state->x.next, n);
state->x.have -= n;
state->x.next += n;
state->x.pos += n;
left -= n;
buf += n;
}
while (left && eol == NULL);
/* return terminated string, or if nothing, end of file */
if (buf == str)
return NULL;
buf[0] = 0;
return str;
}
/* -- see zlib.h -- */
int ZEXPORT gzdirect(file)
gzFile file;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return 0;
state = (gz_statep)file;
/* if the state is not known, but we can find out, then do so (this is
mainly for right after a gzopen() or gzdopen()) */
if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
(void)gz_look(state);
/* return 1 if transparent, 0 if processing a gzip stream */
return state->direct;
}
/* -- see zlib.h -- */
int ZEXPORT gzclose_r(file)
gzFile file;
{
int ret, err;
gz_statep state;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're reading */
if (state->mode != GZ_READ)
return Z_STREAM_ERROR;
/* free memory and close file */
if (state->size)
{
inflateEnd(&(state->strm));
free(state->out);
free(state->in);
}
err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
gz_error(state, Z_OK, NULL);
free(state->path);
ret = close(state->fd);
free(state);
return ret ? Z_ERRNO : err;
}

View File

@ -1,715 +0,0 @@
/* gzwrite.c -- zlib functions for writing gzip files
* Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "gzguts.h"
/* Local functions */
local int gz_init OF((gz_statep));
local int gz_comp OF((gz_statep, int));
local int gz_zero OF((gz_statep, z_off64_t));
local z_size_t gz_write OF((gz_statep, voidpc, z_size_t));
/* Initialize state for writing a gzip file. Mark initialization by setting
state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
success. */
local int gz_init(state)
gz_statep state;
{
int ret;
z_streamp strm = &(state->strm);
/* allocate input buffer (double size for gzprintf) */
state->in = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL)
{
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
/* only need output buffer and deflate state if compressing */
if (!state->direct)
{
/* allocate output buffer */
state->out = (unsigned char *)malloc(state->want);
if (state->out == NULL)
{
free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
/* allocate deflate memory, set up for gzip compression */
strm->zalloc = Z_NULL;
strm->zfree = Z_NULL;
strm->opaque = Z_NULL;
ret = deflateInit2(strm, state->level, Z_DEFLATED,
MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
if (ret != Z_OK)
{
free(state->out);
free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
strm->next_in = NULL;
}
/* mark state as initialized */
state->size = state->want;
/* initialize write buffer if compressing */
if (!state->direct)
{
strm->avail_out = state->size;
strm->next_out = state->out;
state->x.next = strm->next_out;
}
return 0;
}
/* Compress whatever is at avail_in and next_in and write to the output file.
Return -1 if there is an error writing to the output file or if gz_init()
fails to allocate memory, otherwise 0. flush is assumed to be a valid
deflate() flush value. If flush is Z_FINISH, then the deflate() state is
reset to start a new gzip stream. If gz->direct is true, then simply write
to the output file without compressing, and ignore flush. */
local int gz_comp(state, flush)
gz_statep state;
int flush;
{
int ret, writ;
unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
z_streamp strm = &(state->strm);
/* allocate memory if this is the first time through */
if (state->size == 0 && gz_init(state) == -1)
return -1;
/* write directly if requested */
if (state->direct)
{
while (strm->avail_in)
{
put = strm->avail_in > max ? max : strm->avail_in;
writ = write(state->fd, strm->next_in, put);
if (writ < 0)
{
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
strm->avail_in -= (unsigned)writ;
strm->next_in += writ;
}
return 0;
}
/* run deflate() on provided input until it produces no more output */
ret = Z_OK;
do
{
/* write out current buffer contents if full, or if flushing, but if
doing Z_FINISH then don't write until we get to Z_STREAM_END */
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
(flush != Z_FINISH || ret == Z_STREAM_END)))
{
while (strm->next_out > state->x.next)
{
put = strm->next_out - state->x.next > (int)max ? max :
(unsigned)(strm->next_out - state->x.next);
writ = write(state->fd, state->x.next, put);
if (writ < 0)
{
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
state->x.next += writ;
}
if (strm->avail_out == 0)
{
strm->avail_out = state->size;
strm->next_out = state->out;
state->x.next = state->out;
}
}
/* compress */
have = strm->avail_out;
ret = deflate(strm, flush);
if (ret == Z_STREAM_ERROR)
{
gz_error(state, Z_STREAM_ERROR,
"internal error: deflate stream corrupt");
return -1;
}
have -= strm->avail_out;
}
while (have);
/* if that completed a deflate stream, allow another to start */
if (flush == Z_FINISH)
deflateReset(strm);
/* all done, no errors */
return 0;
}
/* Compress len zeros to output. Return -1 on a write error or memory
allocation failure by gz_comp(), or 0 on success. */
local int gz_zero(state, len)
gz_statep state;
z_off64_t len;
{
int first;
unsigned n;
z_streamp strm = &(state->strm);
/* consume whatever's left in the input buffer */
if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return -1;
/* compress len zeros (len guaranteed > 0) */
first = 1;
while (len)
{
n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
(unsigned)len : state->size;
if (first)
{
memset(state->in, 0, n);
first = 0;
}
strm->avail_in = n;
strm->next_in = state->in;
state->x.pos += n;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return -1;
len -= n;
}
return 0;
}
/* Write len bytes from buf to file. Return the number of bytes written. If
the returned value is less than len, then there was an error. */
local z_size_t gz_write(state, buf, len)
gz_statep state;
voidpc buf;
z_size_t len;
{
z_size_t put = len;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
return 0;
/* allocate memory if this is the first time through */
if (state->size == 0 && gz_init(state) == -1)
return 0;
/* check for seek request */
if (state->seek)
{
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return 0;
}
/* for small len, copy to input buffer, otherwise compress directly */
if (len < state->size)
{
/* copy to input buffer, compress when full */
do
{
unsigned have, copy;
if (state->strm.avail_in == 0)
state->strm.next_in = state->in;
have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
state->in);
copy = state->size - have;
if (copy > len)
copy = len;
memcpy(state->in + have, buf, copy);
state->strm.avail_in += copy;
state->x.pos += copy;
buf = (const char *)buf + copy;
len -= copy;
if (len&& gz_comp(state, Z_NO_FLUSH)
==
-1
)
return 0;
}
while (len);
}
else
{
/* consume whatever's left in the input buffer */
if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* directly compress user buffer to file */
state->strm.next_in = (z_const Bytef *)buf;
do
{
unsigned n = (unsigned)-1;
if (n > len)
n = len;
state->strm.avail_in = n;
state->x.pos += n;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
len -= n;
}
while (len);
}
/* input was all buffered or compressed */
return put;
}
/* -- see zlib.h -- */
int ZEXPORT gzwrite(file, buf, len)
gzFile file;
voidpc buf;
unsigned len;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return 0;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return 0;
/* since an int is returned, make sure len fits in one, otherwise return
with an error (this avoids a flaw in the interface) */
if ((int)len < 0)
{
gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
return 0;
}
/* write len bytes from buf (the return value will fit in an int) */
return (int)gz_write(state, buf, len);
}
/* -- see zlib.h -- */
z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
voidpc buf;
z_size_t size;
z_size_t nitems;
gzFile file;
{
z_size_t len;
gz_statep state;
/* get internal structure */
if (file == NULL)
return 0;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return 0;
/* compute bytes to read -- error on overflow */
len = nitems * size;
if (size && len / size != nitems)
{
gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
return 0;
}
/* write len bytes to buf, return the number of full items written */
return len ? gz_write(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
int ZEXPORT gzputc(file, c)
gzFile file;
int c;
{
unsigned have;
unsigned char buf[1];
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return -1;
/* check for seek request */
if (state->seek)
{
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return -1;
}
/* try writing to input buffer for speed (state->size == 0 if buffer not
initialized) */
if (state->size)
{
if (strm->avail_in == 0)
strm->next_in = state->in;
have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
if (have < state->size)
{
state->in[have] = (unsigned char)c;
strm->avail_in++;
state->x.pos++;
return c & 0xff;
}
}
/* no room in buffer or not initialized, use gz_write() */
buf[0] = (unsigned char)c;
if (gz_write(state, buf, 1) != 1)
return -1;
return c & 0xff;
}
/* -- see zlib.h -- */
int ZEXPORT gzputs(file, str)
gzFile file;
const char* str;
{
int ret;
z_size_t len;
gz_statep state;
/* get internal structure */
if (file == NULL)
return -1;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return -1;
/* write string */
len = strlen(str);
ret = gz_write(state, str, len);
return ret == 0 && len != 0 ? -1 : ret;
}
#if defined(STDC) || defined(Z_HAVE_STDARG_H)
#include <stdarg.h>
/* -- see zlib.h -- */
int ZEXPORTVA gzvprintf(gzFile file, const char* format, va_list va)
{
int len;
unsigned left;
char* next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
return state->err;
/* check for seek request */
if (state->seek)
{
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return state->err;
}
/* do the printf() into the input buffer, put length in len -- the input
buffer is double-sized just for this function, so there is guaranteed to
be state->size bytes available after the current contents */
if (strm->avail_in == 0)
strm->next_in = state->in;
next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
next[state->size - 1] = 0;
#ifdef NO_vsnprintf
# ifdef HAS_vsprintf_void
(void)vsprintf(next, format, va);
for (len = 0; len < state->size; len++)
if (next[len] == 0) break;
# else
len = vsprintf(next, format, va);
# endif
#else
# ifdef HAS_vsnprintf_void
(void)vsnprintf(next, state->size, format, va);
len = strlen(next);
# else
len = vsnprintf(next, state->size, format, va);
# endif
#endif
/* check that printf() results fit in buffer */
if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0)
return 0;
/* update buffer and position, compress first half if past that */
strm->avail_in += (unsigned)len;
state->x.pos += len;
if (strm->avail_in >= state->size)
{
left = strm->avail_in - state->size;
strm->avail_in = state->size;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return state->err;
memcpy(state->in, state->in + state->size, left);
strm->next_in = state->in;
strm->avail_in = left;
}
return len;
}
int ZEXPORTVA gzprintf(gzFile file, const char* format, ...)
{
va_list va;
int ret;
va_start(va, format);
ret = gzvprintf(file, format, va);
va_end(va);
return ret;
}
#else /* !STDC && !Z_HAVE_STDARG_H */
/* -- see zlib.h -- */
int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
gzFile file;
const char *format;
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
{
unsigned len, left;
char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that can really pass pointer in ints */
if (sizeof(int) != sizeof(void *))
return Z_STREAM_ERROR;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
return state->error;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return state->error;
}
/* do the printf() into the input buffer, put length in len -- the input
buffer is double-sized just for this function, so there is guaranteed to
be state->size bytes available after the current contents */
if (strm->avail_in == 0)
strm->next_in = state->in;
next = (char *)(strm->next_in + strm->avail_in);
next[state->size - 1] = 0;
#ifdef NO_snprintf
# ifdef HAS_sprintf_void
sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
a13, a14, a15, a16, a17, a18, a19, a20);
for (len = 0; len < size; len++)
if (next[len] == 0)
break;
# else
len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#else
# ifdef HAS_snprintf_void
snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
len = strlen(next);
# else
len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#endif
/* check that printf() results fit in buffer */
if (len == 0 || len >= state->size || next[state->size - 1] != 0)
return 0;
/* update buffer and position, compress first half if past that */
strm->avail_in += len;
state->x.pos += len;
if (strm->avail_in >= state->size) {
left = strm->avail_in - state->size;
strm->avail_in = state->size;
if (gz_comp(state, Z_NO_FLUSH) == -1)
return state->err;
memcpy(state->in, state->in + state->size, left);
strm->next_in = state->in;
strm->avail_in = left;
}
return (int)len;
}
#endif
/* -- see zlib.h -- */
int ZEXPORT gzflush(file, flush)
gzFile file;
int flush;
{
gz_statep state;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return Z_STREAM_ERROR;
/* check flush parameter */
if (flush < 0 || flush > Z_FINISH)
return Z_STREAM_ERROR;
/* check for seek request */
if (state->seek)
{
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return state->err;
}
/* compress remaining data with requested flush */
(void)gz_comp(state, flush);
return state->err;
}
/* -- see zlib.h -- */
int ZEXPORT gzsetparams(file, level, strategy)
gzFile file;
int level;
int strategy;
{
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
return Z_STREAM_ERROR;
/* if no change is requested, then do nothing */
if (level == state->level && strategy == state->strategy)
return Z_OK;
/* check for seek request */
if (state->seek)
{
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
return state->err;
}
/* change compression parameters for subsequent input */
if (state->size)
{
/* flush previous input with previous parameters before changing */
if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
return state->err;
deflateParams(strm, level, strategy);
}
state->level = level;
state->strategy = strategy;
return Z_OK;
}
/* -- see zlib.h -- */
int ZEXPORT gzclose_w(file)
gzFile file;
{
int ret = Z_OK;
gz_statep state;
/* get internal structure */
if (file == NULL)
return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're writing */
if (state->mode != GZ_WRITE)
return Z_STREAM_ERROR;
/* check for seek request */
if (state->seek)
{
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
ret = state->err;
}
/* flush, free memory, and close file */
if (gz_comp(state, Z_FINISH) == -1)
ret = state->err;
if (state->size)
{
if (!state->direct)
{
(void)deflateEnd(&(state->strm));
free(state->out);
}
free(state->in);
}
gz_error(state, Z_OK, NULL);
free(state->path);
if (close(state->fd) == -1)
ret = Z_ERRNO;
free(state);
return ret;
}

Some files were not shown because too many files have changed in this diff Show More