diff --git a/.travis.yml b/.travis.yml
index 1ff0ad2c7572..6ff297e7bd81 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,9 +16,8 @@ install:
- pushd $HOME
- travis_retry wget https://github.com/devkitPro/buildscripts/releases/download/devkitARM_r50/devkitARM_r50-linux.tar.xz
- tar xJf devkitARM*.tar.xz
- - travis_retry git clone https://github.com/pret/agbcc.git
- - cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR
- popd
+ - ./install-tools.sh
matrix:
include:
- os: linux
diff --git a/INSTALL.md b/INSTALL.md
index 6f5a2435d268..353d797e953a 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -8,30 +8,27 @@
[wsl2]: https://docs.microsoft.com/windows/wsl/wsl2-install
[wsl]: https://docs.microsoft.com/windows/wsl/install-win10
+
The [prerelease version of the Linux subsystem](https://docs.microsoft.com/windows/wsl/install-legacy) available in the 1607 and 1703 releases of Windows 10 is obsolete so consider uninstalling it.
-Make sure that the `build-essential`, `git`, and `libpng-dev` packages are installed. The `build-essential` package includes the `make`, `gcc-core`, and `g++` packages so they do not have to be obtained separately. MSYS2 does not include `libpng-dev` so it must be built from source.
+Make sure that the build-essential
Debian/base-devel
Arch package group and `git` are installed.
Install the **devkitARM** toolchain of [devkitPro](https://devkitpro.org/wiki/Getting_Started) and add its environment variables. For Windows versions without the Linux subsystem, the devkitPro [graphical installer](https://github.com/devkitPro/installer/releases) includes a preconfigured MSYS2 environment, thus the steps below are not required.
export DEVKITPRO=/opt/devkitpro
- echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc
export DEVKITARM=$DEVKITPRO/devkitARM
- echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc
+Place the above code in your `~/.bash_profile` and restart your shell for changes to take effect.
+
+Install the pret tools using the `./install-tools.sh` script in the repository root. This automatically downloads & installs precompiled binaries for your current platform of all the tools used to compile pokeemerald, including `agbcc`. Alternatively, you can easily build, package and/or install them from source using the [`grups` tool](https://code.caveoforig.in/fhtk/grups).
# Installation
To set up the repository:
git clone https://github.com/pret/pokeemerald
- git clone https://github.com/pret/agbcc
-
- cd ./agbcc
- ./build.sh
- ./install.sh ../pokeemerald
-
- cd ../pokeemerald
+ cd pokeemerald
+ make
To build **pokeemerald.gba** and confirm it matches the official ROM image:
@@ -39,9 +36,8 @@ To build **pokeemerald.gba** and confirm it matches the official ROM image:
## Notes
-* If the base tools are not found on macOS in new Terminal sessions after the first successful build, run `echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile` once to prevent the issue from occurring again. Verify that the `devkitarm-rules` package is installed as well; if not, install it by running `sudo dkp-pacman -S devkitarm-rules`.
-
-* If the repository was previously set up using Cygwin, delete the `.exe` files in the subfolders of the `tools` folder except for `agbcc` and try building again. [Learn the differences between MSYS2 and Cygwin.](https://github.com/msys2/msys2/wiki/How-does-MSYS2-differ-from-Cygwin)
+- Verify that the `devkitarm-rules` package is installed as well; if not, install it by running `sudo dkp-pacman -S devkitarm-rules`.
+- If the repository was previously set up using Cygwin, delete the `.exe` files in the subfolders of the `tools` folder except for `agbcc` and try building again. [Learn the differences between MSYS2 and Cygwin.](https://github.com/msys2/msys2/wiki/How-does-MSYS2-differ-from-Cygwin)
# Guidance
@@ -57,7 +53,7 @@ To speed up building, run:
make -j$(nproc)
-`nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)).
+To use `nproc` on macOS, install GNU coreutils with homebrew by running `brew install coreutils`. Alternatively, use `sysctl -n hw.ncpu` instead. ([source](https://stackoverflow.com/questions/1715580)).
## Building without dependency scanning
diff --git a/Makefile b/Makefile
index 85d3f6a51e70..8c2859e73da3 100644
--- a/Makefile
+++ b/Makefile
@@ -3,12 +3,26 @@ COMPARE ?= 0
ifeq ($(CC),)
HOSTCC := gcc
+# use system clang on macOS; GCC is wonky w/ homebrew sometimes
+ifneq ($(OS),Windows_NT)
+UNAME := $(shell uname -s)
+ifeq ($(UNAME),Darwin)
+HOSTCC := /usr/bin/clang
+endif
+endif
else
HOSTCC := $(CC)
endif
ifeq ($(CXX),)
HOSTCXX := g++
+# use system clang++ on macOS; see above
+ifneq ($(OS),Windows_NT)
+UNAME := $(shell uname -s)
+ifeq ($(UNAME),Darwin)
+HOSTCC := /usr/bin/clang++
+endif
+endif
else
HOSTCXX := $(CXX)
endif
@@ -31,6 +45,19 @@ else
EXE :=
endif
+# system-friendly install of tools
+export PRET := /opt/pret
+
+export GFX := $(PRET)/bin/gbagfx$(EXE)
+export AIF := $(PRET)/bin/aif2pcm$(EXE)
+export MID := $(PRET)/bin/mid2agb$(EXE)
+export SCANINC := $(PRET)/bin/scaninc$(EXE)
+export PREPROC := $(PRET)/bin/preproc$(EXE)
+export RAMSCRGEN := $(PRET)/bin/ramscrgen$(EXE)
+export FIX := $(PRET)/bin/gbafix$(EXE)
+export MAPJSON := $(PRET)/bin/mapjson$(EXE)
+export JSONPROC := $(PRET)/bin/jsonproc$(EXE)
+
TITLE := POKEMON EMER
GAME_CODE := BPEE
MAKER_CODE := 01
@@ -60,11 +87,11 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN)
GCC_VER = $(shell $(CC) -dumpversion)
ifeq ($(MODERN),0)
-CC1 := tools/agbcc/bin/agbcc$(EXE)
+CC1 := $(PRET)/bin/agbcc$(EXE)
override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
ROM := pokeemerald.gba
OBJ_DIR := build/emerald
-LIBPATH := -L ../../tools/agbcc/lib
+LIBPATH := -L $(PRET)/lib
else
CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast
@@ -75,7 +102,7 @@ endif
CPPFLAGS := -iquote include -Wno-trigraphs -DMODERN=$(MODERN)
ifeq ($(MODERN),0)
-CPPFLAGS += -I tools/agbcc/include -I tools/agbcc
+CPPFLAGS += -I $(PRET)/include -I $(PRET)
endif
LDFLAGS = -Map ../../$(MAP)
@@ -83,41 +110,25 @@ LDFLAGS = -Map ../../$(MAP)
LIB := $(LIBPATH) -lgcc -lc
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
-GFX := tools/gbagfx/gbagfx$(EXE)
-AIF := tools/aif2pcm/aif2pcm$(EXE)
-MID := tools/mid2agb/mid2agb$(EXE)
-SCANINC := tools/scaninc/scaninc$(EXE)
-PREPROC := tools/preproc/preproc$(EXE)
-RAMSCRGEN := tools/ramscrgen/ramscrgen$(EXE)
-FIX := tools/gbafix/gbafix$(EXE)
-MAPJSON := tools/mapjson/mapjson$(EXE)
-JSONPROC := tools/jsonproc/jsonproc$(EXE)
-
-TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*))
-TOOLBASE = $(TOOLDIRS:tools/%=%)
-TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE))
MAKEFLAGS += --no-print-directory
# Clear the default suffixes
.SUFFIXES:
-# Don't delete intermediate files
+# Don’t delete intermediate files
.SECONDARY:
-# Delete files that weren't built properly
+# Delete files that weren’t built properly
.DELETE_ON_ERROR:
-
# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
-.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix
+.PHONY: all rom clean compare tidy berry_fix
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
# Build tools when building the rom
-# Disable dependency scanning for clean/tidy/tools
-ifeq (,$(filter-out all compare,$(MAKECMDGOALS)))
-$(call infoshell, $(MAKE) tools)
-else
+# Disable dependency scanning for clean/tidy
+ifneq (,$(filter-out all compare,$(MAKECMDGOALS)))
NODEP := 1
endif
@@ -161,15 +172,10 @@ ifeq ($(COMPARE),1)
@$(SHA1) rom.sha1
endif
-# For contributors to make sure a change didn't affect the contents of the ROM.
+# For contributors to make sure a change didn’t affect the contents of the ROM.
compare: ; @$(MAKE) COMPARE=1
-clean: mostlyclean clean-tools
-
-clean-tools:
- @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);)
-
-mostlyclean: tidy
+clean: tidy
rm -f sound/direct_sound_samples/*.bin
rm -f $(MID_SUBDIR)/*.s
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
@@ -211,9 +217,8 @@ include songs.mk
sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(AIF) $< $@ --compress
sound/%.bin: sound/%.aif ; $(AIF) $< $@
-
ifeq ($(MODERN),0)
-$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc
+$(C_BUILDDIR)/libc.o: CC1 := $(PRET)/bin/old_agbcc
$(C_BUILDDIR)/libc.o: CFLAGS := -O2
$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork
@@ -222,7 +227,7 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork
$(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork
$(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork
-$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc
+$(C_BUILDDIR)/m4a.o: CC1 := $(PRET)/bin/old_agbcc
$(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding
endif
@@ -230,7 +235,7 @@ endif
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_dep :=
else
-$(C_BUILDDIR)/%.o: c_dep = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I tools/agbcc/include $(C_SUBDIR)/$*.c)
+$(C_BUILDDIR)/%.o: c_dep = $(shell [[ -f $(C_SUBDIR)/$*.c ]] && $(SCANINC) -I include -I $(PRET)/include $(C_SUBDIR)/$*.c)
endif
ifeq ($(DINFO),1)
@@ -246,7 +251,7 @@ $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_asm_dep :=
else
-$(C_BUILDDIR)/%.o: c_asm_dep = $(shell [[ -f $(C_SUBDIR)/$*.s ]] && $(SCANINC) -I "" $(C_SUBDIR)/$*.s)
+$(C_BUILDDIR)/%.o: c_asm_dep = $(shell [[ -f $(C_SUBDIR)/$*.s ]] && $(SCANINC) -I $(PRET)/include -I "" $(C_SUBDIR)/$*.s)
endif
$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s $$(c_asm_dep)
@@ -255,7 +260,7 @@ $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s $$(c_asm_dep)
ifeq ($(NODEP),1)
$(ASM_BUILDDIR)/%.o: asm_dep :=
else
-$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I "" $(ASM_SUBDIR)/$*.s)
+$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I $(PRET)/include -I "" $(ASM_SUBDIR)/$*.s)
endif
$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
@@ -264,7 +269,7 @@ $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep)
ifeq ($(NODEP),1)
$(DATA_ASM_BUILDDIR)/%.o: data_dep :=
else
-$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) -I include -I "" $(DATA_ASM_SUBDIR)/$*.s)
+$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) -I $(PRET)/include -I include -I "" $(DATA_ASM_SUBDIR)/$*.s)
endif
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep)
@@ -287,7 +292,7 @@ LD_SCRIPT := ld_script.txt
LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
else
LD_SCRIPT := ld_script_modern.txt
-LD_SCRIPT_DEPS :=
+LD_SCRIPT_DEPS :=
endif
$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)
diff --git a/README.md b/README.md
index 5d4edab85786..fce0acc1122a 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,6 @@ It builds the following ROM:
To set up the repository, see [INSTALL.md](INSTALL.md).
-
## See also
Other disassembly and/or decompilation projects:
@@ -30,7 +29,6 @@ Other disassembly and/or decompilation projects:
* [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered)
* [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red)
-
## Contacts
You can find us on [Discord](https://discord.gg/6EuWgX9) and [IRC](https://kiwiirc.com/client/irc.freenode.net/?#pret).
diff --git a/berry_fix/Makefile b/berry_fix/Makefile
index 2bc225eba97f..ced7b92f95f6 100644
--- a/berry_fix/Makefile
+++ b/berry_fix/Makefile
@@ -15,11 +15,13 @@ REVISION := 0
SHELL := /bin/bash -o pipefail
-CPPFLAGS := -I ../tools/agbcc/include -I ../tools/agbcc -iquote include -nostdinc -undef
+PRET := /opt/pret
+
+CPPFLAGS := -I $(PRET)/include -I $(PRET)/bin/agbcc -iquote include -nostdinc -undef
ROM := berry_fix.gba
OBJ_DIR := build
-CC1 := ../tools/agbcc/bin/agbcc$(EXE)
+CC1 := $(PRET)/bin/agbcc$(EXE)
override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
@@ -39,13 +41,13 @@ ASFLAGS := -mcpu=arm7tdmi
LDFLAGS = -Map ../$(MAP)
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
-GFX := ../tools/gbagfx/gbagfx$(EXE)
-AIF := ../tools/aif2pcm/aif2pcm$(EXE)
-MID := ../tools/mid2agb/mid2agb$(EXE)
-SCANINC := ../tools/scaninc/scaninc$(EXE)
-PREPROC := ../tools/preproc/preproc$(EXE)
-RAMSCRGEN := ../tools/ramscrgen/ramscrgen$(EXE)
-FIX := ../tools/gbafix/gbafix$(EXE)
+GFX := $(PRET)/bin/gbagfx$(EXE)
+AIF := $(PRET)/bin/aif2pcm$(EXE)
+MID := $(PRET)/bin/mid2agb$(EXE)
+SCANINC := $(PRET)/bin/scaninc$(EXE)
+PREPROC := $(PRET)/bin/preproc$(EXE)
+RAMSCRGEN := $(PRET)/bin/ramscrgen$(EXE)
+FIX := $(PRET)/bin/gbafix$(EXE)
# Clear the default suffixes
.SUFFIXES:
@@ -120,7 +122,7 @@ tidy:
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_dep :=
else
-$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I include $(C_SUBDIR)/$*.c)
+$(C_BUILDDIR)/%.o: c_dep = $(shell $(SCANINC) -I $(PRET)/include -I include $(C_SUBDIR)/$*.c)
endif
$(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep)
@@ -163,4 +165,3 @@ $(ELF): ld_script.txt $(OBJS)
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
$(FIX) $@ -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
-
diff --git a/berry_fix/payload/Makefile b/berry_fix/payload/Makefile
index 63e32672414c..a5b9c5f2cccf 100644
--- a/berry_fix/payload/Makefile
+++ b/berry_fix/payload/Makefile
@@ -11,11 +11,13 @@ endif
SHELL := /bin/bash -o pipefail
-CPPFLAGS := -I ../../tools/agbcc/include -I ../../tools/agbcc -iquote include -nostdinc -undef
+PRET := /opt/pret
+
+CPPFLAGS := -I $(PRET)/include -I $(PRET) -iquote include -nostdinc -undef
ROM := payload.gba
OBJ_DIR := build
-CC1 := ../../tools/agbcc/bin/agbcc$(EXE)
+CC1 := $(PRET)/bin/agbcc$(EXE)
override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm
@@ -34,16 +36,19 @@ ASFLAGS := -mcpu=arm7tdmi
LDFLAGS = -Map ../$(MAP)
-LIB := -L ../../../tools/agbcc/lib -lgcc
+LIB := -L $(PRET)/lib -lgcc
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
-GFX := ../../tools/gbagfx/gbagfx$(EXE)
-AIF := ../../tools/aif2pcm/aif2pcm$(EXE)
-MID := ../../tools/mid2agb/mid2agb$(EXE)
-SCANINC := ../../tools/scaninc/scaninc$(EXE)
-PREPROC := ../../tools/preproc/preproc$(EXE)
-RAMSCRGEN := ../../tools/ramscrgen/ramscrgen$(EXE)
-FIX := ../../tools/gbafix/gbafix$(EXE)
+
+export GFX := $(PRET)/bin/gbagfx$(EXE)
+export AIF := $(PRET)/bin/aif2pcm$(EXE)
+export MID := $(PRET)/bin/mid2agb$(EXE)
+export SCANINC := $(PRET)/bin/scaninc$(EXE)
+export PREPROC := $(PRET)/bin/preproc$(EXE)
+export RAMSCRGEN := $(PRET)/bin/ramscrgen$(EXE)
+export FIX := $(PRET)/bin/gbafix$(EXE)
+export MAPJSON := $(PRET)/bin/mapjson$(EXE)
+export JSONPROC := $(PRET)/bin/jsonproc$(EXE)
# Clear the default suffixes
.SUFFIXES:
@@ -169,4 +174,3 @@ $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS)
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
-
diff --git a/install-tools.sh b/install-tools.sh
new file mode 100755
index 000000000000..0500ecc3cb04
--- /dev/null
+++ b/install-tools.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# -*- coding: utf-8 -*-
+## Convenience script for installing all the tools at once
+
+REPO='https://pkg.caveoforig.in/fhtk/';
+
+if [ "$(uname -s)" = 'Darwin' ]; then
+ TRIPLE='x86_64-apple-darwin';
+else
+ TRIPLE='x86_64-linux-gnu';
+fi
+
+for tool in agbcc aif2pcm gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc; do
+ curl -o"${tool}-${TRIPLE}.tar.xz" "${REPO}/${tool}-${TRIPLE}.tar.xz";
+ ./util/install.sh "${tool}-${TRIPLE}.tar.xz";
+done
+
+unset REPO TRIPLE tool;
diff --git a/tools/aif2pcm/.gitignore b/tools/aif2pcm/.gitignore
deleted file mode 100644
index 31531797e7d7..000000000000
--- a/tools/aif2pcm/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-aif2pcm
-
diff --git a/tools/aif2pcm/LICENSE b/tools/aif2pcm/LICENSE
deleted file mode 100644
index 966b92bd69fd..000000000000
--- a/tools/aif2pcm/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2016 huderlem
-Copyright (c) 2005, 2006 by Marco Trillo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile
deleted file mode 100644
index 77df29152730..000000000000
--- a/tools/aif2pcm/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-CC ?= gcc
-
-CFLAGS = -Wall -Wextra -Wno-switch -Werror -std=c11 -O2
-
-LIBS = -lm
-
-SRCS = main.c extended.c
-
-.PHONY: all clean
-
-all: aif2pcm
- @:
-
-aif2pcm: $(SRCS)
- $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS)
-
-clean:
- $(RM) aif2pcm aif2pcm.exe
diff --git a/tools/aif2pcm/extended.c b/tools/aif2pcm/extended.c
deleted file mode 100644
index 94449164bdf6..000000000000
--- a/tools/aif2pcm/extended.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* $Id: extended.c,v 1.8 2006/12/23 11:17:49 toad32767 Exp $ */
-/*-
- * Copyright (c) 2005, 2006 by Marco Trillo
- *
- * Permission is hereby granted, free of charge, to any
- * person obtaining a copy of this software and associated
- * documentation files (the "Software"), to deal in the
- * Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the
- * Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice
- * shall be included in all copies or substantial portions of
- * the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
- * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
- * OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include
-#include
-#include
-
-/*
- * Infinite & NAN values
- * for non-IEEE systems
- */
-#ifndef HUGE_VAL
-#ifdef HUGE
-#define INFINITE_VALUE HUGE
-#define NAN_VALUE HUGE
-#endif
-#else
-#define INFINITE_VALUE HUGE_VAL
-#define NAN_VALUE HUGE_VAL
-#endif
-
-/*
- * IEEE 754 Extended Precision
- *
- * Implementation here is the 80-bit extended precision
- * format of Motorola 68881, Motorola 68882 and Motorola
- * 68040 FPUs, as well as Intel 80x87 FPUs.
- *
- * See:
- * http://www.freescale.com/files/32bit/doc/fact_sheet/BR509.pdf
- */
-/*
- * Exponent range: [-16383,16383]
- * Precision for mantissa: 64 bits with no hidden bit
- * Bias: 16383
- */
-
-/*
- * Write IEEE Extended Precision Numbers
- */
-void
-ieee754_write_extended(double in, uint8_t* out)
-{
- int sgn, exp, shift;
- double fraction, t;
- unsigned int lexp, hexp;
- unsigned long low, high;
-
- if (in == 0.0) {
- memset(out, 0, 10);
- return;
- }
- if (in < 0.0) {
- in = fabs(in);
- sgn = 1;
- } else
- sgn = 0;
-
- fraction = frexp(in, &exp);
-
- if (exp == 0 || exp > 16384) {
- if (exp > 16384) /* infinite value */
- low = high = 0;
- else {
- low = 0x80000000;
- high = 0;
- }
- exp = 32767;
- goto done;
- }
- fraction = ldexp(fraction, 32);
- t = floor(fraction);
- low = (unsigned long) t;
- fraction -= t;
- t = floor(ldexp(fraction, 32));
- high = (unsigned long) t;
-
- /* Convert exponents < -16382 to -16382 (then they will be
- * stored as -16383) */
- if (exp < -16382) {
- shift = 0 - exp - 16382;
- high >>= shift;
- high |= (low << (32 - shift));
- low >>= shift;
- exp = -16382;
- }
- exp += 16383 - 1; /* bias */
-
-done:
- lexp = ((unsigned int) exp) >> 8;
- hexp = ((unsigned int) exp) & 0xFF;
-
- /* big endian */
- out[0] = ((uint8_t) sgn) << 7;
- out[0] |= (uint8_t) lexp;
- out[1] = (uint8_t) hexp;
- out[2] = (uint8_t) (low >> 24);
- out[3] = (uint8_t) ((low >> 16) & 0xFF);
- out[4] = (uint8_t) ((low >> 8) & 0xFF);
- out[5] = (uint8_t) (low & 0xFF);
- out[6] = (uint8_t) (high >> 24);
- out[7] = (uint8_t) ((high >> 16) & 0xFF);
- out[8] = (uint8_t) ((high >> 8) & 0xFF);
- out[9] = (uint8_t) (high & 0xFF);
-
- return;
-}
-
-
-/*
- * Read IEEE Extended Precision Numbers
- */
-double
-ieee754_read_extended(uint8_t* in)
-{
- int sgn, exp;
- unsigned long low, high;
- double out;
-
- /* Extract the components from the big endian buffer */
- sgn = (int) (in[0] >> 7);
- exp = ((int) (in[0] & 0x7F) << 8) | ((int) in[1]);
- low = (((unsigned long) in[2]) << 24)
- | (((unsigned long) in[3]) << 16)
- | (((unsigned long) in[4]) << 8) | (unsigned long) in[5];
- high = (((unsigned long) in[6]) << 24)
- | (((unsigned long) in[7]) << 16)
- | (((unsigned long) in[8]) << 8) | (unsigned long) in[9];
-
- if (exp == 0 && low == 0 && high == 0)
- return (sgn ? -0.0 : 0.0);
-
- switch (exp) {
- case 32767:
- if (low == 0 && high == 0)
- return (sgn ? -INFINITE_VALUE : INFINITE_VALUE);
- else
- return (sgn ? -NAN_VALUE : NAN_VALUE);
- default:
- exp -= 16383; /* unbias exponent */
-
- }
-
- out = ldexp((double) low, -31 + exp);
- out += ldexp((double) high, -63 + exp);
-
- return (sgn ? -out : out);
-}
diff --git a/tools/aif2pcm/main.c b/tools/aif2pcm/main.c
deleted file mode 100644
index 51dbf1bb9ab1..000000000000
--- a/tools/aif2pcm/main.c
+++ /dev/null
@@ -1,830 +0,0 @@
-// Copyright(c) 2016 huderlem
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-/* extended.c */
-void ieee754_write_extended (double, uint8_t*);
-double ieee754_read_extended (uint8_t*);
-
-#ifdef _MSC_VER
-
-#define FATAL_ERROR(format, ...) \
-do \
-{ \
- fprintf(stderr, format, __VA_ARGS__); \
- exit(1); \
-} while (0)
-
-#else
-
-#define FATAL_ERROR(format, ...) \
-do \
-{ \
- fprintf(stderr, format, ##__VA_ARGS__); \
- exit(1); \
-} while (0)
-
-#endif // _MSC_VER
-
-typedef struct {
- unsigned long num_samples;
- uint8_t *samples;
- uint8_t midi_note;
- bool has_loop;
- unsigned long loop_offset;
- double sample_rate;
- unsigned long real_num_samples;
-} AifData;
-
-struct Bytes {
- unsigned long length;
- uint8_t *data;
-};
-
-struct Bytes *read_bytearray(const char *filename)
-{
- struct Bytes *bytes = malloc(sizeof(struct Bytes));
- FILE *f = fopen(filename, "rb");
- if (!f)
- {
- FATAL_ERROR("Failed to open '%s' for reading!\n", filename);
- }
- fseek(f, 0, SEEK_END);
- bytes->length = ftell(f);
- fseek(f, 0, SEEK_SET);
- bytes->data = malloc(bytes->length);
- unsigned long read = fread(bytes->data, bytes->length, 1, f);
- fclose(f);
- if (read <= 0)
- {
- FATAL_ERROR("Failed to read data from '%s'!\n", filename);
- }
- return bytes;
-}
-
-void write_bytearray(const char *filename, struct Bytes *bytes)
-{
- FILE *f = fopen(filename, "wb");
- if (!f)
- {
- FATAL_ERROR("Failed to open '%s' for writing!\n", filename);
- }
- fwrite(bytes->data, bytes->length, 1, f);
- fclose(f);
-}
-
-void free_bytearray(struct Bytes *bytes)
-{
- free(bytes->data);
- free(bytes);
-}
-
-char *get_file_extension(char *filename)
-{
- char *index = strrchr(filename, '.');
- if (!index || index == filename)
- {
- return NULL;
- }
- return index + 1;
-}
-
-char *new_file_extension(char *filename, char *ext)
-{
- char *index = strrchr(filename, '.');
- if (!index || index == filename)
- {
- index = filename + strlen(filename);
- }
- int length = index - filename;
- char *new_filename = malloc(length + 1 + strlen(ext) + 1);
- if (new_filename)
- {
- strcpy(new_filename, filename);
- new_filename[length] = '.';
- strcpy(new_filename + length + 1, ext);
- }
- return new_filename;
-}
-
-void read_aif(struct Bytes *aif, AifData *aif_data)
-{
- aif_data->has_loop = false;
- aif_data->num_samples = 0;
-
- unsigned long pos = 0;
- char chunk_name[5]; chunk_name[4] = '\0';
- char chunk_type[5]; chunk_type[4] = '\0';
-
- // Check for FORM Chunk
- memcpy(chunk_name, &aif->data[pos], 4);
- pos += 4;
- if (strcmp(chunk_name, "FORM") != 0)
- {
- FATAL_ERROR("Input .aif file has invalid header Chunk '%s'!\n", chunk_name);
- }
-
- // Read size of whole file.
- unsigned long whole_chunk_size = aif->data[pos++] << 24;
- whole_chunk_size |= (aif->data[pos++] << 16);
- whole_chunk_size |= (aif->data[pos++] << 8);
- whole_chunk_size |= (uint8_t)aif->data[pos++];
-
- unsigned long expected_whole_chunk_size = aif->length - 8;
- if (whole_chunk_size != expected_whole_chunk_size)
- {
- FATAL_ERROR("FORM Chunk ckSize '%lu' doesn't match actual size '%lu'!\n", whole_chunk_size, expected_whole_chunk_size);
- }
-
- // Check for AIFF Form Type
- memcpy(chunk_type, &aif->data[pos], 4);
- pos += 4;
- if (strcmp(chunk_type, "AIFF") != 0)
- {
- FATAL_ERROR("FORM Type is '%s', but it must be AIFF!", chunk_type);
- }
-
- unsigned long num_sample_frames = 0;
-
- // Read all the Chunks to populate the AifData struct.
- while ((pos + 8) < aif->length)
- {
- // Read Chunk id
- memcpy(chunk_name, &aif->data[pos], 4);
- pos += 4;
-
- unsigned long chunk_size = (aif->data[pos++] << 24);
- chunk_size |= (aif->data[pos++] << 16);
- chunk_size |= (aif->data[pos++] << 8);
- chunk_size |= aif->data[pos++];
-
- if ((pos + chunk_size) > aif->length)
- {
- FATAL_ERROR("%s chunk at 0x%lx reached end of file before finishing\n", chunk_name, pos);
- }
-
- if (strcmp(chunk_name, "COMM") == 0)
- {
- short num_channels = (aif->data[pos++] << 8);
- num_channels |= (uint8_t)aif->data[pos++];
- if (num_channels != 1)
- {
- FATAL_ERROR("numChannels (%d) in the COMM Chunk must be 1!\n", num_channels);
- }
-
- num_sample_frames = (aif->data[pos++] << 24);
- num_sample_frames |= (aif->data[pos++] << 16);
- num_sample_frames |= (aif->data[pos++] << 8);
- num_sample_frames |= (uint8_t)aif->data[pos++];
-
- short sample_size = (aif->data[pos++] << 8);
- sample_size |= (uint8_t)aif->data[pos++];
- if (sample_size != 8)
- {
- FATAL_ERROR("sampleSize (%d) in the COMM Chunk must be 8!\n", sample_size);
- }
-
- double sample_rate = ieee754_read_extended((uint8_t*)(aif->data + pos));
- pos += 10;
-
- aif_data->sample_rate = sample_rate;
-
- if (aif_data->num_samples == 0)
- {
- aif_data->num_samples = num_sample_frames;
- }
- }
- else if (strcmp(chunk_name, "MARK") == 0)
- {
- unsigned short num_markers = (aif->data[pos++] << 8);
- num_markers |= (uint8_t)aif->data[pos++];
-
- // Read each marker and look for the "START" marker.
- for (int i = 0; i < num_markers; i++)
- {
- unsigned short marker_id = (aif->data[pos++] << 8);
- marker_id |= (uint8_t)aif->data[pos++];
-
- unsigned long marker_position = (aif->data[pos++] << 24);
- marker_position |= (aif->data[pos++] << 16);
- marker_position |= (aif->data[pos++] << 8);
- marker_position |= (uint8_t)aif->data[pos++];
-
- // Marker id is a pascal-style string.
- uint8_t marker_name_size = aif->data[pos++];
- char *marker_name = (char *)malloc((marker_name_size + 1) * sizeof(char));
- memcpy(marker_name, &aif->data[pos], marker_name_size);
- marker_name[marker_name_size] = '\0';
- pos += marker_name_size;
-
- if (strcmp(marker_name, "START") == 0)
- {
- aif_data->loop_offset = marker_position;
- aif_data->has_loop = true;
- }
- else if (strcmp(marker_name, "END") == 0)
- {
- if (!aif_data->has_loop) {
- aif_data->loop_offset = marker_position;
- aif_data->has_loop = true;
- }
- aif_data->num_samples = marker_position;
- }
-
- free(marker_name);
- }
- }
- else if (strcmp(chunk_name, "INST") == 0)
- {
- uint8_t midi_note = (uint8_t)aif->data[pos++];
-
- aif_data->midi_note = midi_note;
-
- // Skip over data we don't need.
- pos += 19;
- }
- else if (strcmp(chunk_name, "SSND") == 0)
- {
- // SKip offset and blockSize
- pos += 8;
-
- unsigned long num_samples = chunk_size - 8;
- uint8_t *sample_data = (uint8_t *)malloc(num_samples * sizeof(uint8_t));
- memcpy(sample_data, &aif->data[pos], num_samples);
-
- aif_data->samples = sample_data;
- aif_data->real_num_samples = num_samples;
- pos += chunk_size - 8;
- }
- else
- {
- // Skip over unsupported chunks.
- pos += chunk_size;
- }
- }
-}
-
-// This is a table of deltas between sample values in compressed PCM data.
-const int gDeltaEncodingTable[] = {
- 0, 1, 4, 9, 16, 25, 36, 49,
- -64, -49, -36, -25, -16, -9, -4, -1,
-};
-
-struct Bytes *delta_decompress(struct Bytes *delta, unsigned int expected_length)
-{
- struct Bytes *pcm = malloc(sizeof(struct Bytes));
- pcm->length = expected_length;
- pcm->data = malloc(pcm->length + 0x40);
-
- uint8_t hi, lo;
- unsigned int i = 0;
- unsigned int j = 0;
- int k;
- int8_t base;
- while (i < delta->length)
- {
- base = (int8_t)delta->data[i++];
- pcm->data[j++] = (uint8_t)base;
- if (i >= delta->length)
- {
- break;
- }
- if (j >= pcm->length)
- {
- break;
- }
- lo = delta->data[i] & 0xf;
- base += gDeltaEncodingTable[lo];
- pcm->data[j++] = base;
- i++;
- if (i >= delta->length)
- {
- break;
- }
- if (j >= pcm->length)
- {
- break;
- }
- for (k = 0; k < 31; k++)
- {
- hi = (delta->data[i] >> 4) & 0xf;
- base += gDeltaEncodingTable[hi];
- pcm->data[j++] = base;
- if (j >= pcm->length)
- {
- break;
- }
- lo = delta->data[i] & 0xf;
- base += gDeltaEncodingTable[lo];
- pcm->data[j++] = base;
- i++;
- if (i >= delta->length)
- {
- break;
- }
- if (j >= pcm->length)
- {
- break;
- }
- }
- if (j >= pcm->length)
- {
- break;
- }
- }
-
- pcm->length = j;
- return pcm;
-}
-
-int get_delta_index(uint8_t sample, uint8_t prev_sample)
-{
- int best_error = INT_MAX;
- int best_index = -1;
-
- for (int i = 0; i < 16; i++)
- {
- uint8_t new_sample = prev_sample + gDeltaEncodingTable[i];
- int error = sample > new_sample ? sample - new_sample : new_sample - sample;
-
- if (error < best_error)
- {
- best_error = error;
- best_index = i;
- }
- }
-
- return best_index;
-}
-
-struct Bytes *delta_compress(struct Bytes *pcm)
-{
- struct Bytes *delta = malloc(sizeof(struct Bytes));
- // estimate the length so we can malloc
- int num_blocks = pcm->length / 64;
- delta->length = num_blocks * 33;
-
- int extra = pcm->length % 64;
- if (extra)
- {
- delta->length += 1;
- extra -= 1;
- }
- if (extra)
- {
- delta->length += 1;
- extra -= 1;
- }
- if (extra)
- {
- delta->length += (extra + 1) / 2;
- }
-
- delta->data = malloc(delta->length + 33);
-
- unsigned int i = 0;
- unsigned int j = 0;
- int k;
- uint8_t base;
- int delta_index;
-
- while (i < pcm->length)
- {
- base = pcm->data[i++];
- delta->data[j++] = base;
-
- if (i >= pcm->length)
- {
- break;
- }
- delta_index = get_delta_index(pcm->data[i++], base);
- base += gDeltaEncodingTable[delta_index];
- delta->data[j++] = delta_index;
-
- for (k = 0; k < 31; k++)
- {
- if (i >= pcm->length)
- {
- break;
- }
- delta_index = get_delta_index(pcm->data[i++], base);
- base += gDeltaEncodingTable[delta_index];
- delta->data[j] = (delta_index << 4);
-
- if (i >= pcm->length)
- {
- break;
- }
- delta_index = get_delta_index(pcm->data[i++], base);
- base += gDeltaEncodingTable[delta_index];
- delta->data[j++] |= delta_index;
- }
- }
-
- delta->length = j;
-
- return delta;
-}
-
-#define STORE_U32_LE(dest, value) \
-do { \
- *(dest) = (value) & 0xff; \
- *((dest) + 1) = ((value) >> 8) & 0xff; \
- *((dest) + 2) = ((value) >> 16) & 0xff; \
- *((dest) + 3) = ((value) >> 24) & 0xff; \
-} while (0)
-
-#define LOAD_U32_LE(var, src) \
-do { \
- (var) = *(src); \
- (var) |= (*((src) + 1) << 8); \
- (var) |= (*((src) + 2) << 16); \
- (var) |= (*((src) + 3) << 24); \
-} while (0)
-
-// Reads an .aif file and produces a .pcm file containing an array of 8-bit samples.
-void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress)
-{
- struct Bytes *aif = read_bytearray(aif_filename);
- AifData aif_data = {0,0,0,0,0,0,0};
- read_aif(aif, &aif_data);
-
- int header_size = 0x10;
- struct Bytes *pcm;
- struct Bytes output = {0,0};
-
- if (compress)
- {
- struct Bytes *input = malloc(sizeof(struct Bytes));
- input->data = aif_data.samples;
- input->length = aif_data.real_num_samples;
- pcm = delta_compress(input);
- free(input);
- }
- else
- {
- pcm = malloc(sizeof(struct Bytes));
- pcm->data = aif_data.samples;
- pcm->length = aif_data.real_num_samples;
- }
- output.length = header_size + pcm->length;
- output.data = malloc(output.length);
-
- uint32_t pitch_adjust = (uint32_t)(aif_data.sample_rate * 1024);
- uint32_t loop_offset = (uint32_t)(aif_data.loop_offset);
- uint32_t adjusted_num_samples = (uint32_t)(aif_data.num_samples - 1);
- uint32_t flags = 0;
- if (aif_data.has_loop) flags |= 0x40000000;
- if (compress) flags |= 1;
- STORE_U32_LE(output.data + 0, flags);
- STORE_U32_LE(output.data + 4, pitch_adjust);
- STORE_U32_LE(output.data + 8, loop_offset);
- STORE_U32_LE(output.data + 12, adjusted_num_samples);
- memcpy(&output.data[header_size], pcm->data, pcm->length);
- write_bytearray(pcm_filename, &output);
-
- free(aif->data);
- free(aif);
- free(pcm);
- free(output.data);
- free(aif_data.samples);
-}
-
-// Reads a .pcm file containing an array of 8-bit samples and produces an .aif file.
-// See http://www-mmsp.ece.mcgill.ca/documents/audioformats/aiff/Docs/AIFF-1.3.pdf for .aif file specification.
-void pcm2aif(const char *pcm_filename, const char *aif_filename, uint32_t base_note)
-{
- struct Bytes *pcm = read_bytearray(pcm_filename);
-
- AifData *aif_data = malloc(sizeof(AifData));
-
- uint32_t flags;
- LOAD_U32_LE(flags, pcm->data + 0);
- aif_data->has_loop = flags & 0x40000000;
- bool compressed = flags & 1;
-
- uint32_t pitch_adjust;
- LOAD_U32_LE(pitch_adjust, pcm->data + 4);
- aif_data->sample_rate = pitch_adjust / 1024.0;
-
- LOAD_U32_LE(aif_data->loop_offset, pcm->data + 8);
- LOAD_U32_LE(aif_data->num_samples, pcm->data + 12);
- aif_data->num_samples += 1;
-
- if (compressed)
- {
- struct Bytes *delta = pcm;
- uint8_t *pcm_data = pcm->data;
- delta->length -= 0x10;
- delta->data += 0x10;
- pcm = delta_decompress(delta, aif_data->num_samples);
- free(pcm_data);
- free(delta);
- }
- else
- {
- pcm->length -= 0x10;
- pcm->data += 0x10;
- }
-
- aif_data->samples = malloc(pcm->length);
- memcpy(aif_data->samples, pcm->data, pcm->length);
-
- struct Bytes *aif = malloc(sizeof(struct Bytes));
- aif->length = 54 + 60 + pcm->length;
- aif->data = malloc(aif->length);
-
- long pos = 0;
-
- // First, write the FORM header chunk.
- // FORM Chunk ckID
- aif->data[pos++] = 'F';
- aif->data[pos++] = 'O';
- aif->data[pos++] = 'R';
- aif->data[pos++] = 'M';
-
- // FORM Chunk ckSize
- unsigned long form_size = pos;
- unsigned long data_size = aif->length - 8;
- aif->data[pos++] = ((data_size >> 24) & 0xFF);
- aif->data[pos++] = ((data_size >> 16) & 0xFF);
- aif->data[pos++] = ((data_size >> 8) & 0xFF);
- aif->data[pos++] = (data_size & 0xFF);
-
- // FORM Chunk formType
- aif->data[pos++] = 'A';
- aif->data[pos++] = 'I';
- aif->data[pos++] = 'F';
- aif->data[pos++] = 'F';
-
- // Next, write the Common Chunk
- // Common Chunk ckID
- aif->data[pos++] = 'C';
- aif->data[pos++] = 'O';
- aif->data[pos++] = 'M';
- aif->data[pos++] = 'M';
-
- // Common Chunk ckSize
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 18;
-
- // Common Chunk numChannels
- aif->data[pos++] = 0;
- aif->data[pos++] = 1; // 1 channel
-
- // Common Chunk numSampleFrames
- aif->data[pos++] = ((aif_data->num_samples >> 24) & 0xFF);
- aif->data[pos++] = ((aif_data->num_samples >> 16) & 0xFF);
- aif->data[pos++] = ((aif_data->num_samples >> 8) & 0xFF);
- aif->data[pos++] = (aif_data->num_samples & 0xFF);
-
- // Common Chunk sampleSize
- aif->data[pos++] = 0;
- aif->data[pos++] = 8; // 8 bits per sample
-
- // Common Chunk sampleRate
- //double sample_rate = pitch_adjust / 1024.0;
- uint8_t sample_rate_buffer[10];
- ieee754_write_extended(aif_data->sample_rate, sample_rate_buffer);
- for (int i = 0; i < 10; i++)
- {
- aif->data[pos++] = sample_rate_buffer[i];
- }
-
- if (aif_data->has_loop)
- {
-
- // Marker Chunk ckID
- aif->data[pos++] = 'M';
- aif->data[pos++] = 'A';
- aif->data[pos++] = 'R';
- aif->data[pos++] = 'K';
-
- // Marker Chunk ckSize
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 12 + (aif_data->has_loop ? 12 : 0);
-
- // Marker Chunk numMarkers
- aif->data[pos++] = 0;
- aif->data[pos++] = (aif_data->has_loop ? 2 : 1);
-
- // Marker loop start
- aif->data[pos++] = 0;
- aif->data[pos++] = 1; // id = 1
-
- long loop_start = aif_data->loop_offset;
- aif->data[pos++] = ((loop_start >> 24) & 0xFF);
- aif->data[pos++] = ((loop_start >> 16) & 0xFF);
- aif->data[pos++] = ((loop_start >> 8) & 0xFF);
- aif->data[pos++] = (loop_start & 0xFF); // position
-
- aif->data[pos++] = 5; // pascal-style string length
- aif->data[pos++] = 'S';
- aif->data[pos++] = 'T';
- aif->data[pos++] = 'A';
- aif->data[pos++] = 'R';
- aif->data[pos++] = 'T'; // markerName
-
- // Marker loop end
- aif->data[pos++] = 0;
- aif->data[pos++] = (aif_data->has_loop ? 2 : 1); // id = 2
-
- long loop_end = aif_data->num_samples;
- aif->data[pos++] = ((loop_end >> 24) & 0xFF);
- aif->data[pos++] = ((loop_end >> 16) & 0xFF);
- aif->data[pos++] = ((loop_end >> 8) & 0xFF);
- aif->data[pos++] = (loop_end & 0xFF); // position
-
- aif->data[pos++] = 3; // pascal-style string length
- aif->data[pos++] = 'E';
- aif->data[pos++] = 'N';
- aif->data[pos++] = 'D';
- }
-
- // Instrument Chunk ckID
- aif->data[pos++] = 'I';
- aif->data[pos++] = 'N';
- aif->data[pos++] = 'S';
- aif->data[pos++] = 'T';
-
- // Instrument Chunk ckSize
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 20;
-
- aif->data[pos++] = base_note; // baseNote
- aif->data[pos++] = 0; // detune
- aif->data[pos++] = 0; // lowNote
- aif->data[pos++] = 127; // highNote
- aif->data[pos++] = 1; // lowVelocity
- aif->data[pos++] = 127; // highVelocity
- aif->data[pos++] = 0; // gain (hi)
- aif->data[pos++] = 0; // gain (lo)
-
- // Instrument Chunk sustainLoop
- aif->data[pos++] = 0;
- aif->data[pos++] = 1; // playMode = ForwardLooping
-
- aif->data[pos++] = 0;
- aif->data[pos++] = 1; // beginLoop marker id
-
- aif->data[pos++] = 0;
- aif->data[pos++] = 2; // endLoop marker id
-
- // Instrument Chunk releaseLoop
- aif->data[pos++] = 0;
- aif->data[pos++] = 1; // playMode = ForwardLooping
-
- aif->data[pos++] = 0;
- aif->data[pos++] = 1; // beginLoop marker id
-
- aif->data[pos++] = 0;
- aif->data[pos++] = 2; // endLoop marker id
-
- // Finally, write the Sound Data Chunk
- // Sound Data Chunk ckID
- aif->data[pos++] = 'S';
- aif->data[pos++] = 'S';
- aif->data[pos++] = 'N';
- aif->data[pos++] = 'D';
-
- // Sound Data Chunk ckSize
- unsigned long sound_data_size = pcm->length + 8;
- aif->data[pos++] = ((sound_data_size >> 24) & 0xFF);
- aif->data[pos++] = ((sound_data_size >> 16) & 0xFF);
- aif->data[pos++] = ((sound_data_size >> 8) & 0xFF);
- aif->data[pos++] = (sound_data_size & 0xFF);
-
- // Sound Data Chunk offset
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
-
- // Sound Data Chunk blockSize
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
- aif->data[pos++] = 0;
-
- // Sound Data Chunk soundData
- for (unsigned int i = 0; i < aif_data->loop_offset; i++)
- {
- aif->data[pos++] = aif_data->samples[i];
- }
-
- int j = 0;
- for (unsigned int i = aif_data->loop_offset; i < pcm->length; i++)
- {
- int pcm_index = aif_data->loop_offset + (j++ % (pcm->length - aif_data->loop_offset));
- aif->data[pos++] = aif_data->samples[pcm_index];
- }
-
- aif->length = pos;
-
- // Go back and rewrite ckSize
- data_size = aif->length - 8;
- aif->data[form_size + 0] = ((data_size >> 24) & 0xFF);
- aif->data[form_size + 1] = ((data_size >> 16) & 0xFF);
- aif->data[form_size + 2] = ((data_size >> 8) & 0xFF);
- aif->data[form_size + 3] = (data_size & 0xFF);
-
- write_bytearray(aif_filename, aif);
-
- free(aif->data);
- free(aif);
-}
-
-void usage(void)
-{
- fprintf(stderr, "Usage: aif2pcm bin_file [aif_file]\n");
- fprintf(stderr, " aif2pcm aif_file [bin_file] [--compress]\n");
-}
-
-int main(int argc, char **argv)
-{
- if (argc < 2)
- {
- usage();
- exit(1);
- }
-
- char *input_file = argv[1];
- char *extension = get_file_extension(input_file);
- char *output_file;
- bool compressed = false;
-
- if (argc > 3)
- {
- for (int i = 3; i < argc; i++)
- {
- if (strcmp(argv[i], "--compress") == 0)
- {
- compressed = true;
- }
- }
- }
-
- if (strcmp(extension, "aif") == 0 || strcmp(extension, "aiff") == 0)
- {
- if (argc >= 3)
- {
- output_file = argv[2];
- aif2pcm(input_file, output_file, compressed);
- }
- else
- {
- output_file = new_file_extension(input_file, "bin");
- aif2pcm(input_file, output_file, compressed);
- free(output_file);
- }
- }
- else if (strcmp(extension, "bin") == 0)
- {
- if (argc >= 3)
- {
- output_file = argv[2];
- pcm2aif(input_file, output_file, 60);
- }
- else
- {
- output_file = new_file_extension(input_file, "aif");
- pcm2aif(input_file, output_file, 60);
- free(output_file);
- }
- }
- else
- {
- FATAL_ERROR("Input file must be .aif or .bin: '%s'\n", input_file);
- }
-
- return 0;
-}
diff --git a/tools/bin2c/.gitignore b/tools/bin2c/.gitignore
deleted file mode 100644
index 366f3d3e9cb2..000000000000
--- a/tools/bin2c/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bin2c
diff --git a/tools/bin2c/LICENSE b/tools/bin2c/LICENSE
deleted file mode 100644
index 534d15349e02..000000000000
--- a/tools/bin2c/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2016 YamaArashi
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile
deleted file mode 100644
index 52806e39c6f1..000000000000
--- a/tools/bin2c/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-CC ?= gcc
-
-CFLAGS = -Wall -Wextra -Werror -std=c11 -O2
-
-.PHONY: all clean
-
-SRCS = bin2c.c
-
-all: bin2c
- @:
-
-bin2c: $(SRCS)
- $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS)
-
-clean:
- $(RM) bin2c bin2c.exe
diff --git a/tools/bin2c/bin2c.c b/tools/bin2c/bin2c.c
deleted file mode 100644
index b4bd437f055e..000000000000
--- a/tools/bin2c/bin2c.c
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright(c) 2015-2016 YamaArashi
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#include
-#include
-#include
-#include
-
-#ifdef _MSC_VER
-
-#define FATAL_ERROR(format, ...) \
-do \
-{ \
- fprintf(stderr, format, __VA_ARGS__); \
- exit(1); \
-} while (0)
-
-#else
-
-#define FATAL_ERROR(format, ...) \
-do \
-{ \
- fprintf(stderr, format, ##__VA_ARGS__); \
- exit(1); \
-} while (0)
-
-#endif // _MSC_VER
-
-unsigned char *ReadWholeFile(char *path, int *size)
-{
- FILE *fp = fopen(path, "rb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
-
- fseek(fp, 0, SEEK_END);
-
- *size = ftell(fp);
-
- unsigned char *buffer = malloc(*size);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path);
-
- rewind(fp);
-
- if (fread(buffer, *size, 1, fp) != 1)
- FATAL_ERROR("Failed to read \"%s\".\n", path);
-
- fclose(fp);
-
- return buffer;
-}
-
-int ExtractData(unsigned char *buffer, int offset, int size)
-{
- switch (size)
- {
- case 1:
- return buffer[offset];
- case 2:
- return (buffer[offset + 1] << 8)
- | buffer[offset];
- case 4:
- return (buffer[offset + 3] << 24)
- | (buffer[offset + 2] << 16)
- | (buffer[offset + 1] << 8)
- | buffer[offset];
- default:
- FATAL_ERROR("Invalid size passed to ExtractData.\n");
- }
-}
-
-int main(int argc, char **argv)
-{
- if (argc < 3)
- FATAL_ERROR("Usage: bin2c INPUT_FILE VAR_NAME [OPTIONS...]\n");
-
- int fileSize;
- unsigned char *buffer = ReadWholeFile(argv[1], &fileSize);
- char *var_name = argv[2];
- int col = 1;
- int pad = 0;
- int size = 1;
- bool isSigned = false;
- bool isStatic = false;
- bool isDecimal = false;
-
- for (int i = 3; i < argc; i++)
- {
- if (!strcmp(argv[i], "-col"))
- {
- i++;
-
- if (i >= argc)
- FATAL_ERROR("Missing argument after '-col'.\n");
-
- col = atoi(argv[i]);
- }
- else if (!strcmp(argv[i], "-pad"))
- {
- i++;
-
- if (i >= argc)
- FATAL_ERROR("Missing argument after '-pad'.\n");
-
- pad = atoi(argv[i]);
- }
- else if (!strcmp(argv[i], "-size"))
- {
- i++;
-
- if (i >= argc)
- FATAL_ERROR("Missing argument after '-size'.\n");
-
- size = atoi(argv[i]);
-
- if (size != 1 && size != 2 && size != 4)
- FATAL_ERROR("Size must be 1, 2, or 4.\n");
- }
- else if (!strcmp(argv[i], "-signed"))
- {
- isSigned = true;
- isDecimal = true;
- }
- else if (!strcmp(argv[i], "-static"))
- {
- isStatic = true;
- }
- else if (!strcmp(argv[i], "-decimal"))
- {
- isDecimal = true;
- }
- else
- {
- FATAL_ERROR("Unrecognized option '%s'.\n", argv[i]);
- }
- }
-
- if ((fileSize & (size - 1)) != 0)
- FATAL_ERROR("Size %d doesn't evenly divide file size %d.\n", size, fileSize);
-
- printf("// Generated file. Do not edit.\n\n");
-
- if (isStatic)
- printf("static ");
-
- printf("const ");
-
- if (isSigned)
- printf("s%d ", 8 * size);
- else
- printf("u%d ", 8 * size);
-
- printf("%s[] =\n{", var_name);
-
- int count = fileSize / size;
- int offset = 0;
-
- for (int i = 0; i < count; i++)
- {
- if (i % col == 0)
- printf("\n ");
-
- int data = ExtractData(buffer, offset, size);
- offset += size;
-
- if (isDecimal)
- {
- if (isSigned)
- printf("%*d, ", pad, data);
- else
- printf("%*uu, ", pad, data);
- }
- else
- {
- printf("%#*xu, ", pad, data);
- }
- }
-
- printf("\n};\n");
-
- return 0;
-}
diff --git a/tools/gbafix/.gitignore b/tools/gbafix/.gitignore
deleted file mode 100644
index 3cebf8ae8dc2..000000000000
--- a/tools/gbafix/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-gbafix
-README
diff --git a/tools/gbafix/COPYING b/tools/gbafix/COPYING
deleted file mode 100644
index 94a9ed024d38..000000000000
--- a/tools/gbafix/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- Copyright (C)
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile
deleted file mode 100644
index 91a60a9e4c9d..000000000000
--- a/tools/gbafix/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-CC ?= gcc
-.PHONY: all clean
-
-SRCS = gbafix.c
-
-all: gbafix
- @:
-
-gbafix: $(SRCS)
- $(CC) $(SRCS) -o $@ $(LDFLAGS)
-
-clean:
- $(RM) gbafix gbafix.exe
diff --git a/tools/gbafix/elf.h b/tools/gbafix/elf.h
deleted file mode 100644
index 79d3b974bd51..000000000000
--- a/tools/gbafix/elf.h
+++ /dev/null
@@ -1,3147 +0,0 @@
-/*
-From musl include/elf.h
-
-Copyright © 2005-2014 Rich Felker, et al.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#ifndef _ELF_H
-#define _ELF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include
-
-typedef uint16_t Elf32_Half;
-typedef uint16_t Elf64_Half;
-
-typedef uint32_t Elf32_Word;
-typedef int32_t Elf32_Sword;
-typedef uint32_t Elf64_Word;
-typedef int32_t Elf64_Sword;
-
-typedef uint64_t Elf32_Xword;
-typedef int64_t Elf32_Sxword;
-typedef uint64_t Elf64_Xword;
-typedef int64_t Elf64_Sxword;
-
-typedef uint32_t Elf32_Addr;
-typedef uint64_t Elf64_Addr;
-
-typedef uint32_t Elf32_Off;
-typedef uint64_t Elf64_Off;
-
-typedef uint16_t Elf32_Section;
-typedef uint16_t Elf64_Section;
-
-typedef Elf32_Half Elf32_Versym;
-typedef Elf64_Half Elf64_Versym;
-
-#define EI_NIDENT (16)
-
-typedef struct {
- unsigned char e_ident[EI_NIDENT];
- Elf32_Half e_type;
- Elf32_Half e_machine;
- Elf32_Word e_version;
- Elf32_Addr e_entry;
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
- Elf32_Word e_flags;
- Elf32_Half e_ehsize;
- Elf32_Half e_phentsize;
- Elf32_Half e_phnum;
- Elf32_Half e_shentsize;
- Elf32_Half e_shnum;
- Elf32_Half e_shstrndx;
-} Elf32_Ehdr;
-
-typedef struct {
- unsigned char e_ident[EI_NIDENT];
- Elf64_Half e_type;
- Elf64_Half e_machine;
- Elf64_Word e_version;
- Elf64_Addr e_entry;
- Elf64_Off e_phoff;
- Elf64_Off e_shoff;
- Elf64_Word e_flags;
- Elf64_Half e_ehsize;
- Elf64_Half e_phentsize;
- Elf64_Half e_phnum;
- Elf64_Half e_shentsize;
- Elf64_Half e_shnum;
- Elf64_Half e_shstrndx;
-} Elf64_Ehdr;
-
-#define EI_MAG0 0
-#define ELFMAG0 0x7f
-
-#define EI_MAG1 1
-#define ELFMAG1 'E'
-
-#define EI_MAG2 2
-#define ELFMAG2 'L'
-
-#define EI_MAG3 3
-#define ELFMAG3 'F'
-
-
-#define ELFMAG "\177ELF"
-#define SELFMAG 4
-
-#define EI_CLASS 4
-#define ELFCLASSNONE 0
-#define ELFCLASS32 1
-#define ELFCLASS64 2
-#define ELFCLASSNUM 3
-
-#define EI_DATA 5
-#define ELFDATANONE 0
-#define ELFDATA2LSB 1
-#define ELFDATA2MSB 2
-#define ELFDATANUM 3
-
-#define EI_VERSION 6
-
-
-#define EI_OSABI 7
-#define ELFOSABI_NONE 0
-#define ELFOSABI_SYSV 0
-#define ELFOSABI_HPUX 1
-#define ELFOSABI_NETBSD 2
-#define ELFOSABI_LINUX 3
-#define ELFOSABI_GNU 3
-#define ELFOSABI_SOLARIS 6
-#define ELFOSABI_AIX 7
-#define ELFOSABI_IRIX 8
-#define ELFOSABI_FREEBSD 9
-#define ELFOSABI_TRU64 10
-#define ELFOSABI_MODESTO 11
-#define ELFOSABI_OPENBSD 12
-#define ELFOSABI_ARM 97
-#define ELFOSABI_STANDALONE 255
-
-#define EI_ABIVERSION 8
-
-#define EI_PAD 9
-
-
-
-#define ET_NONE 0
-#define ET_REL 1
-#define ET_EXEC 2
-#define ET_DYN 3
-#define ET_CORE 4
-#define ET_NUM 5
-#define ET_LOOS 0xfe00
-#define ET_HIOS 0xfeff
-#define ET_LOPROC 0xff00
-#define ET_HIPROC 0xffff
-
-
-
-#define EM_NONE 0
-#define EM_M32 1
-#define EM_SPARC 2
-#define EM_386 3
-#define EM_68K 4
-#define EM_88K 5
-#define EM_860 7
-#define EM_MIPS 8
-#define EM_S370 9
-#define EM_MIPS_RS3_LE 10
-
-#define EM_PARISC 15
-#define EM_VPP500 17
-#define EM_SPARC32PLUS 18
-#define EM_960 19
-#define EM_PPC 20
-#define EM_PPC64 21
-#define EM_S390 22
-
-#define EM_V800 36
-#define EM_FR20 37
-#define EM_RH32 38
-#define EM_RCE 39
-#define EM_ARM 40
-#define EM_FAKE_ALPHA 41
-#define EM_SH 42
-#define EM_SPARCV9 43
-#define EM_TRICORE 44
-#define EM_ARC 45
-#define EM_H8_300 46
-#define EM_H8_300H 47
-#define EM_H8S 48
-#define EM_H8_500 49
-#define EM_IA_64 50
-#define EM_MIPS_X 51
-#define EM_COLDFIRE 52
-#define EM_68HC12 53
-#define EM_MMA 54
-#define EM_PCP 55
-#define EM_NCPU 56
-#define EM_NDR1 57
-#define EM_STARCORE 58
-#define EM_ME16 59
-#define EM_ST100 60
-#define EM_TINYJ 61
-#define EM_X86_64 62
-#define EM_PDSP 63
-
-#define EM_FX66 66
-#define EM_ST9PLUS 67
-#define EM_ST7 68
-#define EM_68HC16 69
-#define EM_68HC11 70
-#define EM_68HC08 71
-#define EM_68HC05 72
-#define EM_SVX 73
-#define EM_ST19 74
-#define EM_VAX 75
-#define EM_CRIS 76
-#define EM_JAVELIN 77
-#define EM_FIREPATH 78
-#define EM_ZSP 79
-#define EM_MMIX 80
-#define EM_HUANY 81
-#define EM_PRISM 82
-#define EM_AVR 83
-#define EM_FR30 84
-#define EM_D10V 85
-#define EM_D30V 86
-#define EM_V850 87
-#define EM_M32R 88
-#define EM_MN10300 89
-#define EM_MN10200 90
-#define EM_PJ 91
-#define EM_OR1K 92
-#define EM_OPENRISC 92
-#define EM_ARC_A5 93
-#define EM_ARC_COMPACT 93
-#define EM_XTENSA 94
-#define EM_VIDEOCORE 95
-#define EM_TMM_GPP 96
-#define EM_NS32K 97
-#define EM_TPC 98
-#define EM_SNP1K 99
-#define EM_ST200 100
-#define EM_IP2K 101
-#define EM_MAX 102
-#define EM_CR 103
-#define EM_F2MC16 104
-#define EM_MSP430 105
-#define EM_BLACKFIN 106
-#define EM_SE_C33 107
-#define EM_SEP 108
-#define EM_ARCA 109
-#define EM_UNICORE 110
-#define EM_EXCESS 111
-#define EM_DXP 112
-#define EM_ALTERA_NIOS2 113
-#define EM_CRX 114
-#define EM_XGATE 115
-#define EM_C166 116
-#define EM_M16C 117
-#define EM_DSPIC30F 118
-#define EM_CE 119
-#define EM_M32C 120
-#define EM_TSK3000 131
-#define EM_RS08 132
-#define EM_SHARC 133
-#define EM_ECOG2 134
-#define EM_SCORE7 135
-#define EM_DSP24 136
-#define EM_VIDEOCORE3 137
-#define EM_LATTICEMICO32 138
-#define EM_SE_C17 139
-#define EM_TI_C6000 140
-#define EM_TI_C2000 141
-#define EM_TI_C5500 142
-#define EM_TI_ARP32 143
-#define EM_TI_PRU 144
-#define EM_MMDSP_PLUS 160
-#define EM_CYPRESS_M8C 161
-#define EM_R32C 162
-#define EM_TRIMEDIA 163
-#define EM_QDSP6 164
-#define EM_8051 165
-#define EM_STXP7X 166
-#define EM_NDS32 167
-#define EM_ECOG1X 168
-#define EM_MAXQ30 169
-#define EM_XIMO16 170
-#define EM_MANIK 171
-#define EM_CRAYNV2 172
-#define EM_RX 173
-#define EM_METAG 174
-#define EM_MCST_ELBRUS 175
-#define EM_ECOG16 176
-#define EM_CR16 177
-#define EM_ETPU 178
-#define EM_SLE9X 179
-#define EM_L10M 180
-#define EM_K10M 181
-#define EM_AARCH64 183
-#define EM_AVR32 185
-#define EM_STM8 186
-#define EM_TILE64 187
-#define EM_TILEPRO 188
-#define EM_MICROBLAZE 189
-#define EM_CUDA 190
-#define EM_TILEGX 191
-#define EM_CLOUDSHIELD 192
-#define EM_COREA_1ST 193
-#define EM_COREA_2ND 194
-#define EM_ARC_COMPACT2 195
-#define EM_OPEN8 196
-#define EM_RL78 197
-#define EM_VIDEOCORE5 198
-#define EM_78KOR 199
-#define EM_56800EX 200
-#define EM_BA1 201
-#define EM_BA2 202
-#define EM_XCORE 203
-#define EM_MCHP_PIC 204
-#define EM_KM32 210
-#define EM_KMX32 211
-#define EM_EMX16 212
-#define EM_EMX8 213
-#define EM_KVARC 214
-#define EM_CDP 215
-#define EM_COGE 216
-#define EM_COOL 217
-#define EM_NORC 218
-#define EM_CSR_KALIMBA 219
-#define EM_Z80 220
-#define EM_VISIUM 221
-#define EM_FT32 222
-#define EM_MOXIE 223
-#define EM_AMDGPU 224
-#define EM_RISCV 243
-#define EM_BPF 247
-#define EM_NUM 248
-
-#define EM_ALPHA 0x9026
-
-#define EV_NONE 0
-#define EV_CURRENT 1
-#define EV_NUM 2
-
-typedef struct {
- Elf32_Word sh_name;
- Elf32_Word sh_type;
- Elf32_Word sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- Elf32_Word sh_size;
- Elf32_Word sh_link;
- Elf32_Word sh_info;
- Elf32_Word sh_addralign;
- Elf32_Word sh_entsize;
-} Elf32_Shdr;
-
-typedef struct {
- Elf64_Word sh_name;
- Elf64_Word sh_type;
- Elf64_Xword sh_flags;
- Elf64_Addr sh_addr;
- Elf64_Off sh_offset;
- Elf64_Xword sh_size;
- Elf64_Word sh_link;
- Elf64_Word sh_info;
- Elf64_Xword sh_addralign;
- Elf64_Xword sh_entsize;
-} Elf64_Shdr;
-
-
-
-#define SHN_UNDEF 0
-#define SHN_LORESERVE 0xff00
-#define SHN_LOPROC 0xff00
-#define SHN_BEFORE 0xff00
-
-#define SHN_AFTER 0xff01
-
-#define SHN_HIPROC 0xff1f
-#define SHN_LOOS 0xff20
-#define SHN_HIOS 0xff3f
-#define SHN_ABS 0xfff1
-#define SHN_COMMON 0xfff2
-#define SHN_XINDEX 0xffff
-#define SHN_HIRESERVE 0xffff
-
-
-
-#define SHT_NULL 0
-#define SHT_PROGBITS 1
-#define SHT_SYMTAB 2
-#define SHT_STRTAB 3
-#define SHT_RELA 4
-#define SHT_HASH 5
-#define SHT_DYNAMIC 6
-#define SHT_NOTE 7
-#define SHT_NOBITS 8
-#define SHT_REL 9
-#define SHT_SHLIB 10
-#define SHT_DYNSYM 11
-#define SHT_INIT_ARRAY 14
-#define SHT_FINI_ARRAY 15
-#define SHT_PREINIT_ARRAY 16
-#define SHT_GROUP 17
-#define SHT_SYMTAB_SHNDX 18
-#define SHT_NUM 19
-#define SHT_LOOS 0x60000000
-#define SHT_GNU_ATTRIBUTES 0x6ffffff5
-#define SHT_GNU_HASH 0x6ffffff6
-#define SHT_GNU_LIBLIST 0x6ffffff7
-#define SHT_CHECKSUM 0x6ffffff8
-#define SHT_LOSUNW 0x6ffffffa
-#define SHT_SUNW_move 0x6ffffffa
-#define SHT_SUNW_COMDAT 0x6ffffffb
-#define SHT_SUNW_syminfo 0x6ffffffc
-#define SHT_GNU_verdef 0x6ffffffd
-#define SHT_GNU_verneed 0x6ffffffe
-#define SHT_GNU_versym 0x6fffffff
-#define SHT_HISUNW 0x6fffffff
-#define SHT_HIOS 0x6fffffff
-#define SHT_LOPROC 0x70000000
-#define SHT_HIPROC 0x7fffffff
-#define SHT_LOUSER 0x80000000
-#define SHT_HIUSER 0x8fffffff
-
-#define SHF_WRITE (1 << 0)
-#define SHF_ALLOC (1 << 1)
-#define SHF_EXECINSTR (1 << 2)
-#define SHF_MERGE (1 << 4)
-#define SHF_STRINGS (1 << 5)
-#define SHF_INFO_LINK (1 << 6)
-#define SHF_LINK_ORDER (1 << 7)
-#define SHF_OS_NONCONFORMING (1 << 8)
-
-#define SHF_GROUP (1 << 9)
-#define SHF_TLS (1 << 10)
-#define SHF_COMPRESSED (1 << 11)
-#define SHF_MASKOS 0x0ff00000
-#define SHF_MASKPROC 0xf0000000
-#define SHF_ORDERED (1 << 30)
-#define SHF_EXCLUDE (1U << 31)
-
-typedef struct {
- Elf32_Word ch_type;
- Elf32_Word ch_size;
- Elf32_Word ch_addralign;
-} Elf32_Chdr;
-
-typedef struct {
- Elf64_Word ch_type;
- Elf64_Word ch_reserved;
- Elf64_Xword ch_size;
- Elf64_Xword ch_addralign;
-} Elf64_Chdr;
-
-#define ELFCOMPRESS_ZLIB 1
-#define ELFCOMPRESS_LOOS 0x60000000
-#define ELFCOMPRESS_HIOS 0x6fffffff
-#define ELFCOMPRESS_LOPROC 0x70000000
-#define ELFCOMPRESS_HIPROC 0x7fffffff
-
-
-#define GRP_COMDAT 0x1
-
-typedef struct {
- Elf32_Word st_name;
- Elf32_Addr st_value;
- Elf32_Word st_size;
- unsigned char st_info;
- unsigned char st_other;
- Elf32_Section st_shndx;
-} Elf32_Sym;
-
-typedef struct {
- Elf64_Word st_name;
- unsigned char st_info;
- unsigned char st_other;
- Elf64_Section st_shndx;
- Elf64_Addr st_value;
- Elf64_Xword st_size;
-} Elf64_Sym;
-
-typedef struct {
- Elf32_Half si_boundto;
- Elf32_Half si_flags;
-} Elf32_Syminfo;
-
-typedef struct {
- Elf64_Half si_boundto;
- Elf64_Half si_flags;
-} Elf64_Syminfo;
-
-#define SYMINFO_BT_SELF 0xffff
-#define SYMINFO_BT_PARENT 0xfffe
-#define SYMINFO_BT_LOWRESERVE 0xff00
-
-#define SYMINFO_FLG_DIRECT 0x0001
-#define SYMINFO_FLG_PASSTHRU 0x0002
-#define SYMINFO_FLG_COPY 0x0004
-#define SYMINFO_FLG_LAZYLOAD 0x0008
-
-#define SYMINFO_NONE 0
-#define SYMINFO_CURRENT 1
-#define SYMINFO_NUM 2
-
-#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4)
-#define ELF32_ST_TYPE(val) ((val) & 0xf)
-#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
-
-#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
-#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
-#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type))
-
-#define STB_LOCAL 0
-#define STB_GLOBAL 1
-#define STB_WEAK 2
-#define STB_NUM 3
-#define STB_LOOS 10
-#define STB_GNU_UNIQUE 10
-#define STB_HIOS 12
-#define STB_LOPROC 13
-#define STB_HIPROC 15
-
-#define STT_NOTYPE 0
-#define STT_OBJECT 1
-#define STT_FUNC 2
-#define STT_SECTION 3
-#define STT_FILE 4
-#define STT_COMMON 5
-#define STT_TLS 6
-#define STT_NUM 7
-#define STT_LOOS 10
-#define STT_GNU_IFUNC 10
-#define STT_HIOS 12
-#define STT_LOPROC 13
-#define STT_HIPROC 15
-
-#define STN_UNDEF 0
-
-#define ELF32_ST_VISIBILITY(o) ((o) & 0x03)
-#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o)
-
-#define STV_DEFAULT 0
-#define STV_INTERNAL 1
-#define STV_HIDDEN 2
-#define STV_PROTECTED 3
-
-
-
-
-typedef struct {
- Elf32_Addr r_offset;
- Elf32_Word r_info;
-} Elf32_Rel;
-
-typedef struct {
- Elf64_Addr r_offset;
- Elf64_Xword r_info;
-} Elf64_Rel;
-
-
-
-typedef struct {
- Elf32_Addr r_offset;
- Elf32_Word r_info;
- Elf32_Sword r_addend;
-} Elf32_Rela;
-
-typedef struct {
- Elf64_Addr r_offset;
- Elf64_Xword r_info;
- Elf64_Sxword r_addend;
-} Elf64_Rela;
-
-
-
-#define ELF32_R_SYM(val) ((val) >> 8)
-#define ELF32_R_TYPE(val) ((val) & 0xff)
-#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
-
-#define ELF64_R_SYM(i) ((i) >> 32)
-#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
-#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type))
-
-
-
-typedef struct {
- Elf32_Word p_type;
- Elf32_Off p_offset;
- Elf32_Addr p_vaddr;
- Elf32_Addr p_paddr;
- Elf32_Word p_filesz;
- Elf32_Word p_memsz;
- Elf32_Word p_flags;
- Elf32_Word p_align;
-} Elf32_Phdr;
-
-typedef struct {
- Elf64_Word p_type;
- Elf64_Word p_flags;
- Elf64_Off p_offset;
- Elf64_Addr p_vaddr;
- Elf64_Addr p_paddr;
- Elf64_Xword p_filesz;
- Elf64_Xword p_memsz;
- Elf64_Xword p_align;
-} Elf64_Phdr;
-
-
-
-#define PT_NULL 0
-#define PT_LOAD 1
-#define PT_DYNAMIC 2
-#define PT_INTERP 3
-#define PT_NOTE 4
-#define PT_SHLIB 5
-#define PT_PHDR 6
-#define PT_TLS 7
-#define PT_NUM 8
-#define PT_LOOS 0x60000000
-#define PT_GNU_EH_FRAME 0x6474e550
-#define PT_GNU_STACK 0x6474e551
-#define PT_GNU_RELRO 0x6474e552
-#define PT_LOSUNW 0x6ffffffa
-#define PT_SUNWBSS 0x6ffffffa
-#define PT_SUNWSTACK 0x6ffffffb
-#define PT_HISUNW 0x6fffffff
-#define PT_HIOS 0x6fffffff
-#define PT_LOPROC 0x70000000
-#define PT_HIPROC 0x7fffffff
-
-
-#define PN_XNUM 0xffff
-
-
-#define PF_X (1 << 0)
-#define PF_W (1 << 1)
-#define PF_R (1 << 2)
-#define PF_MASKOS 0x0ff00000
-#define PF_MASKPROC 0xf0000000
-
-
-
-#define NT_PRSTATUS 1
-#define NT_FPREGSET 2
-#define NT_PRPSINFO 3
-#define NT_PRXREG 4
-#define NT_TASKSTRUCT 4
-#define NT_PLATFORM 5
-#define NT_AUXV 6
-#define NT_GWINDOWS 7
-#define NT_ASRS 8
-#define NT_PSTATUS 10
-#define NT_PSINFO 13
-#define NT_PRCRED 14
-#define NT_UTSNAME 15
-#define NT_LWPSTATUS 16
-#define NT_LWPSINFO 17
-#define NT_PRFPXREG 20
-#define NT_SIGINFO 0x53494749
-#define NT_FILE 0x46494c45
-#define NT_PRXFPREG 0x46e62b7f
-#define NT_PPC_VMX 0x100
-#define NT_PPC_SPE 0x101
-#define NT_PPC_VSX 0x102
-#define NT_386_TLS 0x200
-#define NT_386_IOPERM 0x201
-#define NT_X86_XSTATE 0x202
-#define NT_S390_HIGH_GPRS 0x300
-#define NT_S390_TIMER 0x301
-#define NT_S390_TODCMP 0x302
-#define NT_S390_TODPREG 0x303
-#define NT_S390_CTRS 0x304
-#define NT_S390_PREFIX 0x305
-#define NT_S390_LAST_BREAK 0x306
-#define NT_S390_SYSTEM_CALL 0x307
-#define NT_S390_TDB 0x308
-#define NT_ARM_VFP 0x400
-#define NT_ARM_TLS 0x401
-#define NT_ARM_HW_BREAK 0x402
-#define NT_ARM_HW_WATCH 0x403
-#define NT_ARM_SYSTEM_CALL 0x404
-#define NT_ARM_SVE 0x405
-#define NT_METAG_CBUF 0x500
-#define NT_METAG_RPIPE 0x501
-#define NT_METAG_TLS 0x502
-#define NT_VERSION 1
-
-
-
-
-typedef struct {
- Elf32_Sword d_tag;
- union {
- Elf32_Word d_val;
- Elf32_Addr d_ptr;
- } d_un;
-} Elf32_Dyn;
-
-typedef struct {
- Elf64_Sxword d_tag;
- union {
- Elf64_Xword d_val;
- Elf64_Addr d_ptr;
- } d_un;
-} Elf64_Dyn;
-
-
-
-#define DT_NULL 0
-#define DT_NEEDED 1
-#define DT_PLTRELSZ 2
-#define DT_PLTGOT 3
-#define DT_HASH 4
-#define DT_STRTAB 5
-#define DT_SYMTAB 6
-#define DT_RELA 7
-#define DT_RELASZ 8
-#define DT_RELAENT 9
-#define DT_STRSZ 10
-#define DT_SYMENT 11
-#define DT_INIT 12
-#define DT_FINI 13
-#define DT_SONAME 14
-#define DT_RPATH 15
-#define DT_SYMBOLIC 16
-#define DT_REL 17
-#define DT_RELSZ 18
-#define DT_RELENT 19
-#define DT_PLTREL 20
-#define DT_DEBUG 21
-#define DT_TEXTREL 22
-#define DT_JMPREL 23
-#define DT_BIND_NOW 24
-#define DT_INIT_ARRAY 25
-#define DT_FINI_ARRAY 26
-#define DT_INIT_ARRAYSZ 27
-#define DT_FINI_ARRAYSZ 28
-#define DT_RUNPATH 29
-#define DT_FLAGS 30
-#define DT_ENCODING 32
-#define DT_PREINIT_ARRAY 32
-#define DT_PREINIT_ARRAYSZ 33
-#define DT_NUM 34
-#define DT_LOOS 0x6000000d
-#define DT_HIOS 0x6ffff000
-#define DT_LOPROC 0x70000000
-#define DT_HIPROC 0x7fffffff
-#define DT_PROCNUM DT_MIPS_NUM
-
-#define DT_VALRNGLO 0x6ffffd00
-#define DT_GNU_PRELINKED 0x6ffffdf5
-#define DT_GNU_CONFLICTSZ 0x6ffffdf6
-#define DT_GNU_LIBLISTSZ 0x6ffffdf7
-#define DT_CHECKSUM 0x6ffffdf8
-#define DT_PLTPADSZ 0x6ffffdf9
-#define DT_MOVEENT 0x6ffffdfa
-#define DT_MOVESZ 0x6ffffdfb
-#define DT_FEATURE_1 0x6ffffdfc
-#define DT_POSFLAG_1 0x6ffffdfd
-
-#define DT_SYMINSZ 0x6ffffdfe
-#define DT_SYMINENT 0x6ffffdff
-#define DT_VALRNGHI 0x6ffffdff
-#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag))
-#define DT_VALNUM 12
-
-#define DT_ADDRRNGLO 0x6ffffe00
-#define DT_GNU_HASH 0x6ffffef5
-#define DT_TLSDESC_PLT 0x6ffffef6
-#define DT_TLSDESC_GOT 0x6ffffef7
-#define DT_GNU_CONFLICT 0x6ffffef8
-#define DT_GNU_LIBLIST 0x6ffffef9
-#define DT_CONFIG 0x6ffffefa
-#define DT_DEPAUDIT 0x6ffffefb
-#define DT_AUDIT 0x6ffffefc
-#define DT_PLTPAD 0x6ffffefd
-#define DT_MOVETAB 0x6ffffefe
-#define DT_SYMINFO 0x6ffffeff
-#define DT_ADDRRNGHI 0x6ffffeff
-#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag))
-#define DT_ADDRNUM 11
-
-
-
-#define DT_VERSYM 0x6ffffff0
-
-#define DT_RELACOUNT 0x6ffffff9
-#define DT_RELCOUNT 0x6ffffffa
-
-
-#define DT_FLAGS_1 0x6ffffffb
-#define DT_VERDEF 0x6ffffffc
-
-#define DT_VERDEFNUM 0x6ffffffd
-#define DT_VERNEED 0x6ffffffe
-
-#define DT_VERNEEDNUM 0x6fffffff
-#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag))
-#define DT_VERSIONTAGNUM 16
-
-
-
-#define DT_AUXILIARY 0x7ffffffd
-#define DT_FILTER 0x7fffffff
-#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
-#define DT_EXTRANUM 3
-
-
-#define DF_ORIGIN 0x00000001
-#define DF_SYMBOLIC 0x00000002
-#define DF_TEXTREL 0x00000004
-#define DF_BIND_NOW 0x00000008
-#define DF_STATIC_TLS 0x00000010
-
-
-
-#define DF_1_NOW 0x00000001
-#define DF_1_GLOBAL 0x00000002
-#define DF_1_GROUP 0x00000004
-#define DF_1_NODELETE 0x00000008
-#define DF_1_LOADFLTR 0x00000010
-#define DF_1_INITFIRST 0x00000020
-#define DF_1_NOOPEN 0x00000040
-#define DF_1_ORIGIN 0x00000080
-#define DF_1_DIRECT 0x00000100
-#define DF_1_TRANS 0x00000200
-#define DF_1_INTERPOSE 0x00000400
-#define DF_1_NODEFLIB 0x00000800
-#define DF_1_NODUMP 0x00001000
-#define DF_1_CONFALT 0x00002000
-#define DF_1_ENDFILTEE 0x00004000
-#define DF_1_DISPRELDNE 0x00008000
-#define DF_1_DISPRELPND 0x00010000
-#define DF_1_NODIRECT 0x00020000
-#define DF_1_IGNMULDEF 0x00040000
-#define DF_1_NOKSYMS 0x00080000
-#define DF_1_NOHDR 0x00100000
-#define DF_1_EDITED 0x00200000
-#define DF_1_NORELOC 0x00400000
-#define DF_1_SYMINTPOSE 0x00800000
-#define DF_1_GLOBAUDIT 0x01000000
-#define DF_1_SINGLETON 0x02000000
-
-#define DTF_1_PARINIT 0x00000001
-#define DTF_1_CONFEXP 0x00000002
-
-
-#define DF_P1_LAZYLOAD 0x00000001
-#define DF_P1_GROUPPERM 0x00000002
-
-
-
-
-typedef struct {
- Elf32_Half vd_version;
- Elf32_Half vd_flags;
- Elf32_Half vd_ndx;
- Elf32_Half vd_cnt;
- Elf32_Word vd_hash;
- Elf32_Word vd_aux;
- Elf32_Word vd_next;
-} Elf32_Verdef;
-
-typedef struct {
- Elf64_Half vd_version;
- Elf64_Half vd_flags;
- Elf64_Half vd_ndx;
- Elf64_Half vd_cnt;
- Elf64_Word vd_hash;
- Elf64_Word vd_aux;
- Elf64_Word vd_next;
-} Elf64_Verdef;
-
-
-
-#define VER_DEF_NONE 0
-#define VER_DEF_CURRENT 1
-#define VER_DEF_NUM 2
-
-
-#define VER_FLG_BASE 0x1
-#define VER_FLG_WEAK 0x2
-
-
-#define VER_NDX_LOCAL 0
-#define VER_NDX_GLOBAL 1
-#define VER_NDX_LORESERVE 0xff00
-#define VER_NDX_ELIMINATE 0xff01
-
-
-
-typedef struct {
- Elf32_Word vda_name;
- Elf32_Word vda_next;
-} Elf32_Verdaux;
-
-typedef struct {
- Elf64_Word vda_name;
- Elf64_Word vda_next;
-} Elf64_Verdaux;
-
-
-
-
-typedef struct {
- Elf32_Half vn_version;
- Elf32_Half vn_cnt;
- Elf32_Word vn_file;
- Elf32_Word vn_aux;
- Elf32_Word vn_next;
-} Elf32_Verneed;
-
-typedef struct {
- Elf64_Half vn_version;
- Elf64_Half vn_cnt;
- Elf64_Word vn_file;
- Elf64_Word vn_aux;
- Elf64_Word vn_next;
-} Elf64_Verneed;
-
-
-
-#define VER_NEED_NONE 0
-#define VER_NEED_CURRENT 1
-#define VER_NEED_NUM 2
-
-
-
-typedef struct {
- Elf32_Word vna_hash;
- Elf32_Half vna_flags;
- Elf32_Half vna_other;
- Elf32_Word vna_name;
- Elf32_Word vna_next;
-} Elf32_Vernaux;
-
-typedef struct {
- Elf64_Word vna_hash;
- Elf64_Half vna_flags;
- Elf64_Half vna_other;
- Elf64_Word vna_name;
- Elf64_Word vna_next;
-} Elf64_Vernaux;
-
-
-
-#define VER_FLG_WEAK 0x2
-
-
-
-typedef struct {
- uint32_t a_type;
- union {
- uint32_t a_val;
- } a_un;
-} Elf32_auxv_t;
-
-typedef struct {
- uint64_t a_type;
- union {
- uint64_t a_val;
- } a_un;
-} Elf64_auxv_t;
-
-
-
-#define AT_NULL 0
-#define AT_IGNORE 1
-#define AT_EXECFD 2
-#define AT_PHDR 3
-#define AT_PHENT 4
-#define AT_PHNUM 5
-#define AT_PAGESZ 6
-#define AT_BASE 7
-#define AT_FLAGS 8
-#define AT_ENTRY 9
-#define AT_NOTELF 10
-#define AT_UID 11
-#define AT_EUID 12
-#define AT_GID 13
-#define AT_EGID 14
-#define AT_CLKTCK 17
-
-
-#define AT_PLATFORM 15
-#define AT_HWCAP 16
-
-
-
-
-#define AT_FPUCW 18
-
-
-#define AT_DCACHEBSIZE 19
-#define AT_ICACHEBSIZE 20
-#define AT_UCACHEBSIZE 21
-
-
-
-#define AT_IGNOREPPC 22
-
-#define AT_SECURE 23
-
-#define AT_BASE_PLATFORM 24
-
-#define AT_RANDOM 25
-
-#define AT_HWCAP2 26
-
-#define AT_EXECFN 31
-
-
-
-#define AT_SYSINFO 32
-#define AT_SYSINFO_EHDR 33
-
-
-
-#define AT_L1I_CACHESHAPE 34
-#define AT_L1D_CACHESHAPE 35
-#define AT_L2_CACHESHAPE 36
-#define AT_L3_CACHESHAPE 37
-
-
-
-
-typedef struct {
- Elf32_Word n_namesz;
- Elf32_Word n_descsz;
- Elf32_Word n_type;
-} Elf32_Nhdr;
-
-typedef struct {
- Elf64_Word n_namesz;
- Elf64_Word n_descsz;
- Elf64_Word n_type;
-} Elf64_Nhdr;
-
-
-
-
-#define ELF_NOTE_SOLARIS "SUNW Solaris"
-
-
-#define ELF_NOTE_GNU "GNU"
-
-
-
-
-
-#define ELF_NOTE_PAGESIZE_HINT 1
-
-
-#define NT_GNU_ABI_TAG 1
-#define ELF_NOTE_ABI NT_GNU_ABI_TAG
-
-
-
-#define ELF_NOTE_OS_LINUX 0
-#define ELF_NOTE_OS_GNU 1
-#define ELF_NOTE_OS_SOLARIS2 2
-#define ELF_NOTE_OS_FREEBSD 3
-
-#define NT_GNU_BUILD_ID 3
-#define NT_GNU_GOLD_VERSION 4
-
-
-
-typedef struct {
- Elf32_Xword m_value;
- Elf32_Word m_info;
- Elf32_Word m_poffset;
- Elf32_Half m_repeat;
- Elf32_Half m_stride;
-} Elf32_Move;
-
-typedef struct {
- Elf64_Xword m_value;
- Elf64_Xword m_info;
- Elf64_Xword m_poffset;
- Elf64_Half m_repeat;
- Elf64_Half m_stride;
-} Elf64_Move;
-
-
-#define ELF32_M_SYM(info) ((info) >> 8)
-#define ELF32_M_SIZE(info) ((unsigned char) (info))
-#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size))
-
-#define ELF64_M_SYM(info) ELF32_M_SYM (info)
-#define ELF64_M_SIZE(info) ELF32_M_SIZE (info)
-#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size)
-
-#define EF_CPU32 0x00810000
-
-#define R_68K_NONE 0
-#define R_68K_32 1
-#define R_68K_16 2
-#define R_68K_8 3
-#define R_68K_PC32 4
-#define R_68K_PC16 5
-#define R_68K_PC8 6
-#define R_68K_GOT32 7
-#define R_68K_GOT16 8
-#define R_68K_GOT8 9
-#define R_68K_GOT32O 10
-#define R_68K_GOT16O 11
-#define R_68K_GOT8O 12
-#define R_68K_PLT32 13
-#define R_68K_PLT16 14
-#define R_68K_PLT8 15
-#define R_68K_PLT32O 16
-#define R_68K_PLT16O 17
-#define R_68K_PLT8O 18
-#define R_68K_COPY 19
-#define R_68K_GLOB_DAT 20
-#define R_68K_JMP_SLOT 21
-#define R_68K_RELATIVE 22
-#define R_68K_NUM 23
-
-#define R_386_NONE 0
-#define R_386_32 1
-#define R_386_PC32 2
-#define R_386_GOT32 3
-#define R_386_PLT32 4
-#define R_386_COPY 5
-#define R_386_GLOB_DAT 6
-#define R_386_JMP_SLOT 7
-#define R_386_RELATIVE 8
-#define R_386_GOTOFF 9
-#define R_386_GOTPC 10
-#define R_386_32PLT 11
-#define R_386_TLS_TPOFF 14
-#define R_386_TLS_IE 15
-#define R_386_TLS_GOTIE 16
-#define R_386_TLS_LE 17
-#define R_386_TLS_GD 18
-#define R_386_TLS_LDM 19
-#define R_386_16 20
-#define R_386_PC16 21
-#define R_386_8 22
-#define R_386_PC8 23
-#define R_386_TLS_GD_32 24
-#define R_386_TLS_GD_PUSH 25
-#define R_386_TLS_GD_CALL 26
-#define R_386_TLS_GD_POP 27
-#define R_386_TLS_LDM_32 28
-#define R_386_TLS_LDM_PUSH 29
-#define R_386_TLS_LDM_CALL 30
-#define R_386_TLS_LDM_POP 31
-#define R_386_TLS_LDO_32 32
-#define R_386_TLS_IE_32 33
-#define R_386_TLS_LE_32 34
-#define R_386_TLS_DTPMOD32 35
-#define R_386_TLS_DTPOFF32 36
-#define R_386_TLS_TPOFF32 37
-#define R_386_SIZE32 38
-#define R_386_TLS_GOTDESC 39
-#define R_386_TLS_DESC_CALL 40
-#define R_386_TLS_DESC 41
-#define R_386_IRELATIVE 42
-#define R_386_GOT32X 43
-#define R_386_NUM 44
-
-
-
-
-
-#define STT_SPARC_REGISTER 13
-
-
-
-#define EF_SPARCV9_MM 3
-#define EF_SPARCV9_TSO 0
-#define EF_SPARCV9_PSO 1
-#define EF_SPARCV9_RMO 2
-#define EF_SPARC_LEDATA 0x800000
-#define EF_SPARC_EXT_MASK 0xFFFF00
-#define EF_SPARC_32PLUS 0x000100
-#define EF_SPARC_SUN_US1 0x000200
-#define EF_SPARC_HAL_R1 0x000400
-#define EF_SPARC_SUN_US3 0x000800
-
-
-
-#define R_SPARC_NONE 0
-#define R_SPARC_8 1
-#define R_SPARC_16 2
-#define R_SPARC_32 3
-#define R_SPARC_DISP8 4
-#define R_SPARC_DISP16 5
-#define R_SPARC_DISP32 6
-#define R_SPARC_WDISP30 7
-#define R_SPARC_WDISP22 8
-#define R_SPARC_HI22 9
-#define R_SPARC_22 10
-#define R_SPARC_13 11
-#define R_SPARC_LO10 12
-#define R_SPARC_GOT10 13
-#define R_SPARC_GOT13 14
-#define R_SPARC_GOT22 15
-#define R_SPARC_PC10 16
-#define R_SPARC_PC22 17
-#define R_SPARC_WPLT30 18
-#define R_SPARC_COPY 19
-#define R_SPARC_GLOB_DAT 20
-#define R_SPARC_JMP_SLOT 21
-#define R_SPARC_RELATIVE 22
-#define R_SPARC_UA32 23
-
-
-
-#define R_SPARC_PLT32 24
-#define R_SPARC_HIPLT22 25
-#define R_SPARC_LOPLT10 26
-#define R_SPARC_PCPLT32 27
-#define R_SPARC_PCPLT22 28
-#define R_SPARC_PCPLT10 29
-#define R_SPARC_10 30
-#define R_SPARC_11 31
-#define R_SPARC_64 32
-#define R_SPARC_OLO10 33
-#define R_SPARC_HH22 34
-#define R_SPARC_HM10 35
-#define R_SPARC_LM22 36
-#define R_SPARC_PC_HH22 37
-#define R_SPARC_PC_HM10 38
-#define R_SPARC_PC_LM22 39
-#define R_SPARC_WDISP16 40
-#define R_SPARC_WDISP19 41
-#define R_SPARC_GLOB_JMP 42
-#define R_SPARC_7 43
-#define R_SPARC_5 44
-#define R_SPARC_6 45
-#define R_SPARC_DISP64 46
-#define R_SPARC_PLT64 47
-#define R_SPARC_HIX22 48
-#define R_SPARC_LOX10 49
-#define R_SPARC_H44 50
-#define R_SPARC_M44 51
-#define R_SPARC_L44 52
-#define R_SPARC_REGISTER 53
-#define R_SPARC_UA64 54
-#define R_SPARC_UA16 55
-#define R_SPARC_TLS_GD_HI22 56
-#define R_SPARC_TLS_GD_LO10 57
-#define R_SPARC_TLS_GD_ADD 58
-#define R_SPARC_TLS_GD_CALL 59
-#define R_SPARC_TLS_LDM_HI22 60
-#define R_SPARC_TLS_LDM_LO10 61
-#define R_SPARC_TLS_LDM_ADD 62
-#define R_SPARC_TLS_LDM_CALL 63
-#define R_SPARC_TLS_LDO_HIX22 64
-#define R_SPARC_TLS_LDO_LOX10 65
-#define R_SPARC_TLS_LDO_ADD 66
-#define R_SPARC_TLS_IE_HI22 67
-#define R_SPARC_TLS_IE_LO10 68
-#define R_SPARC_TLS_IE_LD 69
-#define R_SPARC_TLS_IE_LDX 70
-#define R_SPARC_TLS_IE_ADD 71
-#define R_SPARC_TLS_LE_HIX22 72
-#define R_SPARC_TLS_LE_LOX10 73
-#define R_SPARC_TLS_DTPMOD32 74
-#define R_SPARC_TLS_DTPMOD64 75
-#define R_SPARC_TLS_DTPOFF32 76
-#define R_SPARC_TLS_DTPOFF64 77
-#define R_SPARC_TLS_TPOFF32 78
-#define R_SPARC_TLS_TPOFF64 79
-#define R_SPARC_GOTDATA_HIX22 80
-#define R_SPARC_GOTDATA_LOX10 81
-#define R_SPARC_GOTDATA_OP_HIX22 82
-#define R_SPARC_GOTDATA_OP_LOX10 83
-#define R_SPARC_GOTDATA_OP 84
-#define R_SPARC_H34 85
-#define R_SPARC_SIZE32 86
-#define R_SPARC_SIZE64 87
-#define R_SPARC_GNU_VTINHERIT 250
-#define R_SPARC_GNU_VTENTRY 251
-#define R_SPARC_REV32 252
-
-#define R_SPARC_NUM 253
-
-
-
-#define DT_SPARC_REGISTER 0x70000001
-#define DT_SPARC_NUM 2
-
-
-#define EF_MIPS_NOREORDER 1
-#define EF_MIPS_PIC 2
-#define EF_MIPS_CPIC 4
-#define EF_MIPS_XGOT 8
-#define EF_MIPS_64BIT_WHIRL 16
-#define EF_MIPS_ABI2 32
-#define EF_MIPS_ABI_ON32 64
-#define EF_MIPS_FP64 512
-#define EF_MIPS_NAN2008 1024
-#define EF_MIPS_ARCH 0xf0000000
-
-
-
-#define EF_MIPS_ARCH_1 0x00000000
-#define EF_MIPS_ARCH_2 0x10000000
-#define EF_MIPS_ARCH_3 0x20000000
-#define EF_MIPS_ARCH_4 0x30000000
-#define EF_MIPS_ARCH_5 0x40000000
-#define EF_MIPS_ARCH_32 0x50000000
-#define EF_MIPS_ARCH_64 0x60000000
-#define EF_MIPS_ARCH_32R2 0x70000000
-#define EF_MIPS_ARCH_64R2 0x80000000
-
-
-#define E_MIPS_ARCH_1 0x00000000
-#define E_MIPS_ARCH_2 0x10000000
-#define E_MIPS_ARCH_3 0x20000000
-#define E_MIPS_ARCH_4 0x30000000
-#define E_MIPS_ARCH_5 0x40000000
-#define E_MIPS_ARCH_32 0x50000000
-#define E_MIPS_ARCH_64 0x60000000
-
-
-
-#define SHN_MIPS_ACOMMON 0xff00
-#define SHN_MIPS_TEXT 0xff01
-#define SHN_MIPS_DATA 0xff02
-#define SHN_MIPS_SCOMMON 0xff03
-#define SHN_MIPS_SUNDEFINED 0xff04
-
-
-
-#define SHT_MIPS_LIBLIST 0x70000000
-#define SHT_MIPS_MSYM 0x70000001
-#define SHT_MIPS_CONFLICT 0x70000002
-#define SHT_MIPS_GPTAB 0x70000003
-#define SHT_MIPS_UCODE 0x70000004
-#define SHT_MIPS_DEBUG 0x70000005
-#define SHT_MIPS_REGINFO 0x70000006
-#define SHT_MIPS_PACKAGE 0x70000007
-#define SHT_MIPS_PACKSYM 0x70000008
-#define SHT_MIPS_RELD 0x70000009
-#define SHT_MIPS_IFACE 0x7000000b
-#define SHT_MIPS_CONTENT 0x7000000c
-#define SHT_MIPS_OPTIONS 0x7000000d
-#define SHT_MIPS_SHDR 0x70000010
-#define SHT_MIPS_FDESC 0x70000011
-#define SHT_MIPS_EXTSYM 0x70000012
-#define SHT_MIPS_DENSE 0x70000013
-#define SHT_MIPS_PDESC 0x70000014
-#define SHT_MIPS_LOCSYM 0x70000015
-#define SHT_MIPS_AUXSYM 0x70000016
-#define SHT_MIPS_OPTSYM 0x70000017
-#define SHT_MIPS_LOCSTR 0x70000018
-#define SHT_MIPS_LINE 0x70000019
-#define SHT_MIPS_RFDESC 0x7000001a
-#define SHT_MIPS_DELTASYM 0x7000001b
-#define SHT_MIPS_DELTAINST 0x7000001c
-#define SHT_MIPS_DELTACLASS 0x7000001d
-#define SHT_MIPS_DWARF 0x7000001e
-#define SHT_MIPS_DELTADECL 0x7000001f
-#define SHT_MIPS_SYMBOL_LIB 0x70000020
-#define SHT_MIPS_EVENTS 0x70000021
-#define SHT_MIPS_TRANSLATE 0x70000022
-#define SHT_MIPS_PIXIE 0x70000023
-#define SHT_MIPS_XLATE 0x70000024
-#define SHT_MIPS_XLATE_DEBUG 0x70000025
-#define SHT_MIPS_WHIRL 0x70000026
-#define SHT_MIPS_EH_REGION 0x70000027
-#define SHT_MIPS_XLATE_OLD 0x70000028
-#define SHT_MIPS_PDR_EXCEPTION 0x70000029
-
-
-
-#define SHF_MIPS_GPREL 0x10000000
-#define SHF_MIPS_MERGE 0x20000000
-#define SHF_MIPS_ADDR 0x40000000
-#define SHF_MIPS_STRINGS 0x80000000
-#define SHF_MIPS_NOSTRIP 0x08000000
-#define SHF_MIPS_LOCAL 0x04000000
-#define SHF_MIPS_NAMES 0x02000000
-#define SHF_MIPS_NODUPE 0x01000000
-
-
-
-
-
-#define STO_MIPS_DEFAULT 0x0
-#define STO_MIPS_INTERNAL 0x1
-#define STO_MIPS_HIDDEN 0x2
-#define STO_MIPS_PROTECTED 0x3
-#define STO_MIPS_PLT 0x8
-#define STO_MIPS_SC_ALIGN_UNUSED 0xff
-
-
-#define STB_MIPS_SPLIT_COMMON 13
-
-
-
-typedef union {
- struct {
- Elf32_Word gt_current_g_value;
- Elf32_Word gt_unused;
- } gt_header;
- struct {
- Elf32_Word gt_g_value;
- Elf32_Word gt_bytes;
- } gt_entry;
-} Elf32_gptab;
-
-
-
-typedef struct {
- Elf32_Word ri_gprmask;
- Elf32_Word ri_cprmask[4];
- Elf32_Sword ri_gp_value;
-} Elf32_RegInfo;
-
-
-
-typedef struct {
- unsigned char kind;
-
- unsigned char size;
- Elf32_Section section;
-
- Elf32_Word info;
-} Elf_Options;
-
-
-
-#define ODK_NULL 0
-#define ODK_REGINFO 1
-#define ODK_EXCEPTIONS 2
-#define ODK_PAD 3
-#define ODK_HWPATCH 4
-#define ODK_FILL 5
-#define ODK_TAGS 6
-#define ODK_HWAND 7
-#define ODK_HWOR 8
-
-
-
-#define OEX_FPU_MIN 0x1f
-#define OEX_FPU_MAX 0x1f00
-#define OEX_PAGE0 0x10000
-#define OEX_SMM 0x20000
-#define OEX_FPDBUG 0x40000
-#define OEX_PRECISEFP OEX_FPDBUG
-#define OEX_DISMISS 0x80000
-
-#define OEX_FPU_INVAL 0x10
-#define OEX_FPU_DIV0 0x08
-#define OEX_FPU_OFLO 0x04
-#define OEX_FPU_UFLO 0x02
-#define OEX_FPU_INEX 0x01
-
-
-
-#define OHW_R4KEOP 0x1
-#define OHW_R8KPFETCH 0x2
-#define OHW_R5KEOP 0x4
-#define OHW_R5KCVTL 0x8
-
-#define OPAD_PREFIX 0x1
-#define OPAD_POSTFIX 0x2
-#define OPAD_SYMBOL 0x4
-
-
-
-typedef struct {
- Elf32_Word hwp_flags1;
- Elf32_Word hwp_flags2;
-} Elf_Options_Hw;
-
-
-
-#define OHWA0_R4KEOP_CHECKED 0x00000001
-#define OHWA1_R4KEOP_CLEAN 0x00000002
-
-
-
-#define R_MIPS_NONE 0
-#define R_MIPS_16 1
-#define R_MIPS_32 2
-#define R_MIPS_REL32 3
-#define R_MIPS_26 4
-#define R_MIPS_HI16 5
-#define R_MIPS_LO16 6
-#define R_MIPS_GPREL16 7
-#define R_MIPS_LITERAL 8
-#define R_MIPS_GOT16 9
-#define R_MIPS_PC16 10
-#define R_MIPS_CALL16 11
-#define R_MIPS_GPREL32 12
-
-#define R_MIPS_SHIFT5 16
-#define R_MIPS_SHIFT6 17
-#define R_MIPS_64 18
-#define R_MIPS_GOT_DISP 19
-#define R_MIPS_GOT_PAGE 20
-#define R_MIPS_GOT_OFST 21
-#define R_MIPS_GOT_HI16 22
-#define R_MIPS_GOT_LO16 23
-#define R_MIPS_SUB 24
-#define R_MIPS_INSERT_A 25
-#define R_MIPS_INSERT_B 26
-#define R_MIPS_DELETE 27
-#define R_MIPS_HIGHER 28
-#define R_MIPS_HIGHEST 29
-#define R_MIPS_CALL_HI16 30
-#define R_MIPS_CALL_LO16 31
-#define R_MIPS_SCN_DISP 32
-#define R_MIPS_REL16 33
-#define R_MIPS_ADD_IMMEDIATE 34
-#define R_MIPS_PJUMP 35
-#define R_MIPS_RELGOT 36
-#define R_MIPS_JALR 37
-#define R_MIPS_TLS_DTPMOD32 38
-#define R_MIPS_TLS_DTPREL32 39
-#define R_MIPS_TLS_DTPMOD64 40
-#define R_MIPS_TLS_DTPREL64 41
-#define R_MIPS_TLS_GD 42
-#define R_MIPS_TLS_LDM 43
-#define R_MIPS_TLS_DTPREL_HI16 44
-#define R_MIPS_TLS_DTPREL_LO16 45
-#define R_MIPS_TLS_GOTTPREL 46
-#define R_MIPS_TLS_TPREL32 47
-#define R_MIPS_TLS_TPREL64 48
-#define R_MIPS_TLS_TPREL_HI16 49
-#define R_MIPS_TLS_TPREL_LO16 50
-#define R_MIPS_GLOB_DAT 51
-#define R_MIPS_COPY 126
-#define R_MIPS_JUMP_SLOT 127
-
-#define R_MIPS_NUM 128
-
-
-
-#define PT_MIPS_REGINFO 0x70000000
-#define PT_MIPS_RTPROC 0x70000001
-#define PT_MIPS_OPTIONS 0x70000002
-#define PT_MIPS_ABIFLAGS 0x70000003
-
-
-
-#define PF_MIPS_LOCAL 0x10000000
-
-
-
-#define DT_MIPS_RLD_VERSION 0x70000001
-#define DT_MIPS_TIME_STAMP 0x70000002
-#define DT_MIPS_ICHECKSUM 0x70000003
-#define DT_MIPS_IVERSION 0x70000004
-#define DT_MIPS_FLAGS 0x70000005
-#define DT_MIPS_BASE_ADDRESS 0x70000006
-#define DT_MIPS_MSYM 0x70000007
-#define DT_MIPS_CONFLICT 0x70000008
-#define DT_MIPS_LIBLIST 0x70000009
-#define DT_MIPS_LOCAL_GOTNO 0x7000000a
-#define DT_MIPS_CONFLICTNO 0x7000000b
-#define DT_MIPS_LIBLISTNO 0x70000010
-#define DT_MIPS_SYMTABNO 0x70000011
-#define DT_MIPS_UNREFEXTNO 0x70000012
-#define DT_MIPS_GOTSYM 0x70000013
-#define DT_MIPS_HIPAGENO 0x70000014
-#define DT_MIPS_RLD_MAP 0x70000016
-#define DT_MIPS_DELTA_CLASS 0x70000017
-#define DT_MIPS_DELTA_CLASS_NO 0x70000018
-
-#define DT_MIPS_DELTA_INSTANCE 0x70000019
-#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a
-
-#define DT_MIPS_DELTA_RELOC 0x7000001b
-#define DT_MIPS_DELTA_RELOC_NO 0x7000001c
-
-#define DT_MIPS_DELTA_SYM 0x7000001d
-
-#define DT_MIPS_DELTA_SYM_NO 0x7000001e
-
-#define DT_MIPS_DELTA_CLASSSYM 0x70000020
-
-#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021
-
-#define DT_MIPS_CXX_FLAGS 0x70000022
-#define DT_MIPS_PIXIE_INIT 0x70000023
-#define DT_MIPS_SYMBOL_LIB 0x70000024
-#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
-#define DT_MIPS_LOCAL_GOTIDX 0x70000026
-#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
-#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
-#define DT_MIPS_OPTIONS 0x70000029
-#define DT_MIPS_INTERFACE 0x7000002a
-#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
-#define DT_MIPS_INTERFACE_SIZE 0x7000002c
-#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d
-
-#define DT_MIPS_PERF_SUFFIX 0x7000002e
-
-#define DT_MIPS_COMPACT_SIZE 0x7000002f
-#define DT_MIPS_GP_VALUE 0x70000030
-#define DT_MIPS_AUX_DYNAMIC 0x70000031
-
-#define DT_MIPS_PLTGOT 0x70000032
-
-#define DT_MIPS_RWPLT 0x70000034
-#define DT_MIPS_RLD_MAP_REL 0x70000035
-#define DT_MIPS_NUM 0x36
-
-
-
-#define RHF_NONE 0
-#define RHF_QUICKSTART (1 << 0)
-#define RHF_NOTPOT (1 << 1)
-#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)
-#define RHF_NO_MOVE (1 << 3)
-#define RHF_SGI_ONLY (1 << 4)
-#define RHF_GUARANTEE_INIT (1 << 5)
-#define RHF_DELTA_C_PLUS_PLUS (1 << 6)
-#define RHF_GUARANTEE_START_INIT (1 << 7)
-#define RHF_PIXIE (1 << 8)
-#define RHF_DEFAULT_DELAY_LOAD (1 << 9)
-#define RHF_REQUICKSTART (1 << 10)
-#define RHF_REQUICKSTARTED (1 << 11)
-#define RHF_CORD (1 << 12)
-#define RHF_NO_UNRES_UNDEF (1 << 13)
-#define RHF_RLD_ORDER_SAFE (1 << 14)
-
-
-
-typedef struct {
- Elf32_Word l_name;
- Elf32_Word l_time_stamp;
- Elf32_Word l_checksum;
- Elf32_Word l_version;
- Elf32_Word l_flags;
-} Elf32_Lib;
-
-typedef struct {
- Elf64_Word l_name;
- Elf64_Word l_time_stamp;
- Elf64_Word l_checksum;
- Elf64_Word l_version;
- Elf64_Word l_flags;
-} Elf64_Lib;
-
-
-
-
-#define LL_NONE 0
-#define LL_EXACT_MATCH (1 << 0)
-#define LL_IGNORE_INT_VER (1 << 1)
-#define LL_REQUIRE_MINOR (1 << 2)
-#define LL_EXPORTS (1 << 3)
-#define LL_DELAY_LOAD (1 << 4)
-#define LL_DELTA (1 << 5)
-
-
-
-typedef Elf32_Addr Elf32_Conflict;
-
-typedef struct {
- Elf32_Half version;
- unsigned char isa_level;
- unsigned char isa_rev;
- unsigned char gpr_size;
- unsigned char cpr1_size;
- unsigned char cpr2_size;
- unsigned char fp_abi;
- Elf32_Word isa_ext;
- Elf32_Word ases;
- Elf32_Word flags1;
- Elf32_Word flags2;
-} Elf_MIPS_ABIFlags_v0;
-
-#define MIPS_AFL_REG_NONE 0x00
-#define MIPS_AFL_REG_32 0x01
-#define MIPS_AFL_REG_64 0x02
-#define MIPS_AFL_REG_128 0x03
-
-#define MIPS_AFL_ASE_DSP 0x00000001
-#define MIPS_AFL_ASE_DSPR2 0x00000002
-#define MIPS_AFL_ASE_EVA 0x00000004
-#define MIPS_AFL_ASE_MCU 0x00000008
-#define MIPS_AFL_ASE_MDMX 0x00000010
-#define MIPS_AFL_ASE_MIPS3D 0x00000020
-#define MIPS_AFL_ASE_MT 0x00000040
-#define MIPS_AFL_ASE_SMARTMIPS 0x00000080
-#define MIPS_AFL_ASE_VIRT 0x00000100
-#define MIPS_AFL_ASE_MSA 0x00000200
-#define MIPS_AFL_ASE_MIPS16 0x00000400
-#define MIPS_AFL_ASE_MICROMIPS 0x00000800
-#define MIPS_AFL_ASE_XPA 0x00001000
-#define MIPS_AFL_ASE_MASK 0x00001fff
-
-#define MIPS_AFL_EXT_XLR 1
-#define MIPS_AFL_EXT_OCTEON2 2
-#define MIPS_AFL_EXT_OCTEONP 3
-#define MIPS_AFL_EXT_LOONGSON_3A 4
-#define MIPS_AFL_EXT_OCTEON 5
-#define MIPS_AFL_EXT_5900 6
-#define MIPS_AFL_EXT_4650 7
-#define MIPS_AFL_EXT_4010 8
-#define MIPS_AFL_EXT_4100 9
-#define MIPS_AFL_EXT_3900 10
-#define MIPS_AFL_EXT_10000 11
-#define MIPS_AFL_EXT_SB1 12
-#define MIPS_AFL_EXT_4111 13
-#define MIPS_AFL_EXT_4120 14
-#define MIPS_AFL_EXT_5400 15
-#define MIPS_AFL_EXT_5500 16
-#define MIPS_AFL_EXT_LOONGSON_2E 17
-#define MIPS_AFL_EXT_LOONGSON_2F 18
-
-#define MIPS_AFL_FLAGS1_ODDSPREG 1
-
-enum
-{
- Val_GNU_MIPS_ABI_FP_ANY = 0,
- Val_GNU_MIPS_ABI_FP_DOUBLE = 1,
- Val_GNU_MIPS_ABI_FP_SINGLE = 2,
- Val_GNU_MIPS_ABI_FP_SOFT = 3,
- Val_GNU_MIPS_ABI_FP_OLD_64 = 4,
- Val_GNU_MIPS_ABI_FP_XX = 5,
- Val_GNU_MIPS_ABI_FP_64 = 6,
- Val_GNU_MIPS_ABI_FP_64A = 7,
- Val_GNU_MIPS_ABI_FP_MAX = 7
-};
-
-
-
-
-#define EF_PARISC_TRAPNIL 0x00010000
-#define EF_PARISC_EXT 0x00020000
-#define EF_PARISC_LSB 0x00040000
-#define EF_PARISC_WIDE 0x00080000
-#define EF_PARISC_NO_KABP 0x00100000
-
-#define EF_PARISC_LAZYSWAP 0x00400000
-#define EF_PARISC_ARCH 0x0000ffff
-
-
-
-#define EFA_PARISC_1_0 0x020b
-#define EFA_PARISC_1_1 0x0210
-#define EFA_PARISC_2_0 0x0214
-
-
-
-#define SHN_PARISC_ANSI_COMMON 0xff00
-
-#define SHN_PARISC_HUGE_COMMON 0xff01
-
-
-
-#define SHT_PARISC_EXT 0x70000000
-#define SHT_PARISC_UNWIND 0x70000001
-#define SHT_PARISC_DOC 0x70000002
-
-
-
-#define SHF_PARISC_SHORT 0x20000000
-#define SHF_PARISC_HUGE 0x40000000
-#define SHF_PARISC_SBP 0x80000000
-
-
-
-#define STT_PARISC_MILLICODE 13
-
-#define STT_HP_OPAQUE (STT_LOOS + 0x1)
-#define STT_HP_STUB (STT_LOOS + 0x2)
-
-
-
-#define R_PARISC_NONE 0
-#define R_PARISC_DIR32 1
-#define R_PARISC_DIR21L 2
-#define R_PARISC_DIR17R 3
-#define R_PARISC_DIR17F 4
-#define R_PARISC_DIR14R 6
-#define R_PARISC_PCREL32 9
-#define R_PARISC_PCREL21L 10
-#define R_PARISC_PCREL17R 11
-#define R_PARISC_PCREL17F 12
-#define R_PARISC_PCREL14R 14
-#define R_PARISC_DPREL21L 18
-#define R_PARISC_DPREL14R 22
-#define R_PARISC_GPREL21L 26
-#define R_PARISC_GPREL14R 30
-#define R_PARISC_LTOFF21L 34
-#define R_PARISC_LTOFF14R 38
-#define R_PARISC_SECREL32 41
-#define R_PARISC_SEGBASE 48
-#define R_PARISC_SEGREL32 49
-#define R_PARISC_PLTOFF21L 50
-#define R_PARISC_PLTOFF14R 54
-#define R_PARISC_LTOFF_FPTR32 57
-#define R_PARISC_LTOFF_FPTR21L 58
-#define R_PARISC_LTOFF_FPTR14R 62
-#define R_PARISC_FPTR64 64
-#define R_PARISC_PLABEL32 65
-#define R_PARISC_PLABEL21L 66
-#define R_PARISC_PLABEL14R 70
-#define R_PARISC_PCREL64 72
-#define R_PARISC_PCREL22F 74
-#define R_PARISC_PCREL14WR 75
-#define R_PARISC_PCREL14DR 76
-#define R_PARISC_PCREL16F 77
-#define R_PARISC_PCREL16WF 78
-#define R_PARISC_PCREL16DF 79
-#define R_PARISC_DIR64 80
-#define R_PARISC_DIR14WR 83
-#define R_PARISC_DIR14DR 84
-#define R_PARISC_DIR16F 85
-#define R_PARISC_DIR16WF 86
-#define R_PARISC_DIR16DF 87
-#define R_PARISC_GPREL64 88
-#define R_PARISC_GPREL14WR 91
-#define R_PARISC_GPREL14DR 92
-#define R_PARISC_GPREL16F 93
-#define R_PARISC_GPREL16WF 94
-#define R_PARISC_GPREL16DF 95
-#define R_PARISC_LTOFF64 96
-#define R_PARISC_LTOFF14WR 99
-#define R_PARISC_LTOFF14DR 100
-#define R_PARISC_LTOFF16F 101
-#define R_PARISC_LTOFF16WF 102
-#define R_PARISC_LTOFF16DF 103
-#define R_PARISC_SECREL64 104
-#define R_PARISC_SEGREL64 112
-#define R_PARISC_PLTOFF14WR 115
-#define R_PARISC_PLTOFF14DR 116
-#define R_PARISC_PLTOFF16F 117
-#define R_PARISC_PLTOFF16WF 118
-#define R_PARISC_PLTOFF16DF 119
-#define R_PARISC_LTOFF_FPTR64 120
-#define R_PARISC_LTOFF_FPTR14WR 123
-#define R_PARISC_LTOFF_FPTR14DR 124
-#define R_PARISC_LTOFF_FPTR16F 125
-#define R_PARISC_LTOFF_FPTR16WF 126
-#define R_PARISC_LTOFF_FPTR16DF 127
-#define R_PARISC_LORESERVE 128
-#define R_PARISC_COPY 128
-#define R_PARISC_IPLT 129
-#define R_PARISC_EPLT 130
-#define R_PARISC_TPREL32 153
-#define R_PARISC_TPREL21L 154
-#define R_PARISC_TPREL14R 158
-#define R_PARISC_LTOFF_TP21L 162
-#define R_PARISC_LTOFF_TP14R 166
-#define R_PARISC_LTOFF_TP14F 167
-#define R_PARISC_TPREL64 216
-#define R_PARISC_TPREL14WR 219
-#define R_PARISC_TPREL14DR 220
-#define R_PARISC_TPREL16F 221
-#define R_PARISC_TPREL16WF 222
-#define R_PARISC_TPREL16DF 223
-#define R_PARISC_LTOFF_TP64 224
-#define R_PARISC_LTOFF_TP14WR 227
-#define R_PARISC_LTOFF_TP14DR 228
-#define R_PARISC_LTOFF_TP16F 229
-#define R_PARISC_LTOFF_TP16WF 230
-#define R_PARISC_LTOFF_TP16DF 231
-#define R_PARISC_GNU_VTENTRY 232
-#define R_PARISC_GNU_VTINHERIT 233
-#define R_PARISC_TLS_GD21L 234
-#define R_PARISC_TLS_GD14R 235
-#define R_PARISC_TLS_GDCALL 236
-#define R_PARISC_TLS_LDM21L 237
-#define R_PARISC_TLS_LDM14R 238
-#define R_PARISC_TLS_LDMCALL 239
-#define R_PARISC_TLS_LDO21L 240
-#define R_PARISC_TLS_LDO14R 241
-#define R_PARISC_TLS_DTPMOD32 242
-#define R_PARISC_TLS_DTPMOD64 243
-#define R_PARISC_TLS_DTPOFF32 244
-#define R_PARISC_TLS_DTPOFF64 245
-#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L
-#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R
-#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L
-#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R
-#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32
-#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64
-#define R_PARISC_HIRESERVE 255
-
-
-
-#define PT_HP_TLS (PT_LOOS + 0x0)
-#define PT_HP_CORE_NONE (PT_LOOS + 0x1)
-#define PT_HP_CORE_VERSION (PT_LOOS + 0x2)
-#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3)
-#define PT_HP_CORE_COMM (PT_LOOS + 0x4)
-#define PT_HP_CORE_PROC (PT_LOOS + 0x5)
-#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6)
-#define PT_HP_CORE_STACK (PT_LOOS + 0x7)
-#define PT_HP_CORE_SHM (PT_LOOS + 0x8)
-#define PT_HP_CORE_MMF (PT_LOOS + 0x9)
-#define PT_HP_PARALLEL (PT_LOOS + 0x10)
-#define PT_HP_FASTBIND (PT_LOOS + 0x11)
-#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12)
-#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13)
-#define PT_HP_STACK (PT_LOOS + 0x14)
-
-#define PT_PARISC_ARCHEXT 0x70000000
-#define PT_PARISC_UNWIND 0x70000001
-
-
-
-#define PF_PARISC_SBP 0x08000000
-
-#define PF_HP_PAGE_SIZE 0x00100000
-#define PF_HP_FAR_SHARED 0x00200000
-#define PF_HP_NEAR_SHARED 0x00400000
-#define PF_HP_CODE 0x01000000
-#define PF_HP_MODIFY 0x02000000
-#define PF_HP_LAZYSWAP 0x04000000
-#define PF_HP_SBP 0x08000000
-
-
-
-
-
-
-#define EF_ALPHA_32BIT 1
-#define EF_ALPHA_CANRELAX 2
-
-
-
-
-#define SHT_ALPHA_DEBUG 0x70000001
-#define SHT_ALPHA_REGINFO 0x70000002
-
-
-
-#define SHF_ALPHA_GPREL 0x10000000
-
-
-#define STO_ALPHA_NOPV 0x80
-#define STO_ALPHA_STD_GPLOAD 0x88
-
-
-
-#define R_ALPHA_NONE 0
-#define R_ALPHA_REFLONG 1
-#define R_ALPHA_REFQUAD 2
-#define R_ALPHA_GPREL32 3
-#define R_ALPHA_LITERAL 4
-#define R_ALPHA_LITUSE 5
-#define R_ALPHA_GPDISP 6
-#define R_ALPHA_BRADDR 7
-#define R_ALPHA_HINT 8
-#define R_ALPHA_SREL16 9
-#define R_ALPHA_SREL32 10
-#define R_ALPHA_SREL64 11
-#define R_ALPHA_GPRELHIGH 17
-#define R_ALPHA_GPRELLOW 18
-#define R_ALPHA_GPREL16 19
-#define R_ALPHA_COPY 24
-#define R_ALPHA_GLOB_DAT 25
-#define R_ALPHA_JMP_SLOT 26
-#define R_ALPHA_RELATIVE 27
-#define R_ALPHA_TLS_GD_HI 28
-#define R_ALPHA_TLSGD 29
-#define R_ALPHA_TLS_LDM 30
-#define R_ALPHA_DTPMOD64 31
-#define R_ALPHA_GOTDTPREL 32
-#define R_ALPHA_DTPREL64 33
-#define R_ALPHA_DTPRELHI 34
-#define R_ALPHA_DTPRELLO 35
-#define R_ALPHA_DTPREL16 36
-#define R_ALPHA_GOTTPREL 37
-#define R_ALPHA_TPREL64 38
-#define R_ALPHA_TPRELHI 39
-#define R_ALPHA_TPRELLO 40
-#define R_ALPHA_TPREL16 41
-
-#define R_ALPHA_NUM 46
-
-
-#define LITUSE_ALPHA_ADDR 0
-#define LITUSE_ALPHA_BASE 1
-#define LITUSE_ALPHA_BYTOFF 2
-#define LITUSE_ALPHA_JSR 3
-#define LITUSE_ALPHA_TLS_GD 4
-#define LITUSE_ALPHA_TLS_LDM 5
-
-
-#define DT_ALPHA_PLTRO (DT_LOPROC + 0)
-#define DT_ALPHA_NUM 1
-
-
-
-
-#define EF_PPC_EMB 0x80000000
-
-
-#define EF_PPC_RELOCATABLE 0x00010000
-#define EF_PPC_RELOCATABLE_LIB 0x00008000
-
-
-
-#define R_PPC_NONE 0
-#define R_PPC_ADDR32 1
-#define R_PPC_ADDR24 2
-#define R_PPC_ADDR16 3
-#define R_PPC_ADDR16_LO 4
-#define R_PPC_ADDR16_HI 5
-#define R_PPC_ADDR16_HA 6
-#define R_PPC_ADDR14 7
-#define R_PPC_ADDR14_BRTAKEN 8
-#define R_PPC_ADDR14_BRNTAKEN 9
-#define R_PPC_REL24 10
-#define R_PPC_REL14 11
-#define R_PPC_REL14_BRTAKEN 12
-#define R_PPC_REL14_BRNTAKEN 13
-#define R_PPC_GOT16 14
-#define R_PPC_GOT16_LO 15
-#define R_PPC_GOT16_HI 16
-#define R_PPC_GOT16_HA 17
-#define R_PPC_PLTREL24 18
-#define R_PPC_COPY 19
-#define R_PPC_GLOB_DAT 20
-#define R_PPC_JMP_SLOT 21
-#define R_PPC_RELATIVE 22
-#define R_PPC_LOCAL24PC 23
-#define R_PPC_UADDR32 24
-#define R_PPC_UADDR16 25
-#define R_PPC_REL32 26
-#define R_PPC_PLT32 27
-#define R_PPC_PLTREL32 28
-#define R_PPC_PLT16_LO 29
-#define R_PPC_PLT16_HI 30
-#define R_PPC_PLT16_HA 31
-#define R_PPC_SDAREL16 32
-#define R_PPC_SECTOFF 33
-#define R_PPC_SECTOFF_LO 34
-#define R_PPC_SECTOFF_HI 35
-#define R_PPC_SECTOFF_HA 36
-
-
-#define R_PPC_TLS 67
-#define R_PPC_DTPMOD32 68
-#define R_PPC_TPREL16 69
-#define R_PPC_TPREL16_LO 70
-#define R_PPC_TPREL16_HI 71
-#define R_PPC_TPREL16_HA 72
-#define R_PPC_TPREL32 73
-#define R_PPC_DTPREL16 74
-#define R_PPC_DTPREL16_LO 75
-#define R_PPC_DTPREL16_HI 76
-#define R_PPC_DTPREL16_HA 77
-#define R_PPC_DTPREL32 78
-#define R_PPC_GOT_TLSGD16 79
-#define R_PPC_GOT_TLSGD16_LO 80
-#define R_PPC_GOT_TLSGD16_HI 81
-#define R_PPC_GOT_TLSGD16_HA 82
-#define R_PPC_GOT_TLSLD16 83
-#define R_PPC_GOT_TLSLD16_LO 84
-#define R_PPC_GOT_TLSLD16_HI 85
-#define R_PPC_GOT_TLSLD16_HA 86
-#define R_PPC_GOT_TPREL16 87
-#define R_PPC_GOT_TPREL16_LO 88
-#define R_PPC_GOT_TPREL16_HI 89
-#define R_PPC_GOT_TPREL16_HA 90
-#define R_PPC_GOT_DTPREL16 91
-#define R_PPC_GOT_DTPREL16_LO 92
-#define R_PPC_GOT_DTPREL16_HI 93
-#define R_PPC_GOT_DTPREL16_HA 94
-#define R_PPC_TLSGD 95
-#define R_PPC_TLSLD 96
-
-
-#define R_PPC_EMB_NADDR32 101
-#define R_PPC_EMB_NADDR16 102
-#define R_PPC_EMB_NADDR16_LO 103
-#define R_PPC_EMB_NADDR16_HI 104
-#define R_PPC_EMB_NADDR16_HA 105
-#define R_PPC_EMB_SDAI16 106
-#define R_PPC_EMB_SDA2I16 107
-#define R_PPC_EMB_SDA2REL 108
-#define R_PPC_EMB_SDA21 109
-#define R_PPC_EMB_MRKREF 110
-#define R_PPC_EMB_RELSEC16 111
-#define R_PPC_EMB_RELST_LO 112
-#define R_PPC_EMB_RELST_HI 113
-#define R_PPC_EMB_RELST_HA 114
-#define R_PPC_EMB_BIT_FLD 115
-#define R_PPC_EMB_RELSDA 116
-
-
-#define R_PPC_DIAB_SDA21_LO 180
-#define R_PPC_DIAB_SDA21_HI 181
-#define R_PPC_DIAB_SDA21_HA 182
-#define R_PPC_DIAB_RELSDA_LO 183
-#define R_PPC_DIAB_RELSDA_HI 184
-#define R_PPC_DIAB_RELSDA_HA 185
-
-
-#define R_PPC_IRELATIVE 248
-
-
-#define R_PPC_REL16 249
-#define R_PPC_REL16_LO 250
-#define R_PPC_REL16_HI 251
-#define R_PPC_REL16_HA 252
-
-
-
-#define R_PPC_TOC16 255
-
-
-#define DT_PPC_GOT (DT_LOPROC + 0)
-#define DT_PPC_OPT (DT_LOPROC + 1)
-#define DT_PPC_NUM 2
-
-#define PPC_OPT_TLS 1
-
-
-#define R_PPC64_NONE R_PPC_NONE
-#define R_PPC64_ADDR32 R_PPC_ADDR32
-#define R_PPC64_ADDR24 R_PPC_ADDR24
-#define R_PPC64_ADDR16 R_PPC_ADDR16
-#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO
-#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI
-#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA
-#define R_PPC64_ADDR14 R_PPC_ADDR14
-#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN
-#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
-#define R_PPC64_REL24 R_PPC_REL24
-#define R_PPC64_REL14 R_PPC_REL14
-#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN
-#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN
-#define R_PPC64_GOT16 R_PPC_GOT16
-#define R_PPC64_GOT16_LO R_PPC_GOT16_LO
-#define R_PPC64_GOT16_HI R_PPC_GOT16_HI
-#define R_PPC64_GOT16_HA R_PPC_GOT16_HA
-
-#define R_PPC64_COPY R_PPC_COPY
-#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT
-#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT
-#define R_PPC64_RELATIVE R_PPC_RELATIVE
-
-#define R_PPC64_UADDR32 R_PPC_UADDR32
-#define R_PPC64_UADDR16 R_PPC_UADDR16
-#define R_PPC64_REL32 R_PPC_REL32
-#define R_PPC64_PLT32 R_PPC_PLT32
-#define R_PPC64_PLTREL32 R_PPC_PLTREL32
-#define R_PPC64_PLT16_LO R_PPC_PLT16_LO
-#define R_PPC64_PLT16_HI R_PPC_PLT16_HI
-#define R_PPC64_PLT16_HA R_PPC_PLT16_HA
-
-#define R_PPC64_SECTOFF R_PPC_SECTOFF
-#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO
-#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI
-#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA
-#define R_PPC64_ADDR30 37
-#define R_PPC64_ADDR64 38
-#define R_PPC64_ADDR16_HIGHER 39
-#define R_PPC64_ADDR16_HIGHERA 40
-#define R_PPC64_ADDR16_HIGHEST 41
-#define R_PPC64_ADDR16_HIGHESTA 42
-#define R_PPC64_UADDR64 43
-#define R_PPC64_REL64 44
-#define R_PPC64_PLT64 45
-#define R_PPC64_PLTREL64 46
-#define R_PPC64_TOC16 47
-#define R_PPC64_TOC16_LO 48
-#define R_PPC64_TOC16_HI 49
-#define R_PPC64_TOC16_HA 50
-#define R_PPC64_TOC 51
-#define R_PPC64_PLTGOT16 52
-#define R_PPC64_PLTGOT16_LO 53
-#define R_PPC64_PLTGOT16_HI 54
-#define R_PPC64_PLTGOT16_HA 55
-
-#define R_PPC64_ADDR16_DS 56
-#define R_PPC64_ADDR16_LO_DS 57
-#define R_PPC64_GOT16_DS 58
-#define R_PPC64_GOT16_LO_DS 59
-#define R_PPC64_PLT16_LO_DS 60
-#define R_PPC64_SECTOFF_DS 61
-#define R_PPC64_SECTOFF_LO_DS 62
-#define R_PPC64_TOC16_DS 63
-#define R_PPC64_TOC16_LO_DS 64
-#define R_PPC64_PLTGOT16_DS 65
-#define R_PPC64_PLTGOT16_LO_DS 66
-
-
-#define R_PPC64_TLS 67
-#define R_PPC64_DTPMOD64 68
-#define R_PPC64_TPREL16 69
-#define R_PPC64_TPREL16_LO 70
-#define R_PPC64_TPREL16_HI 71
-#define R_PPC64_TPREL16_HA 72
-#define R_PPC64_TPREL64 73
-#define R_PPC64_DTPREL16 74
-#define R_PPC64_DTPREL16_LO 75
-#define R_PPC64_DTPREL16_HI 76
-#define R_PPC64_DTPREL16_HA 77
-#define R_PPC64_DTPREL64 78
-#define R_PPC64_GOT_TLSGD16 79
-#define R_PPC64_GOT_TLSGD16_LO 80
-#define R_PPC64_GOT_TLSGD16_HI 81
-#define R_PPC64_GOT_TLSGD16_HA 82
-#define R_PPC64_GOT_TLSLD16 83
-#define R_PPC64_GOT_TLSLD16_LO 84
-#define R_PPC64_GOT_TLSLD16_HI 85
-#define R_PPC64_GOT_TLSLD16_HA 86
-#define R_PPC64_GOT_TPREL16_DS 87
-#define R_PPC64_GOT_TPREL16_LO_DS 88
-#define R_PPC64_GOT_TPREL16_HI 89
-#define R_PPC64_GOT_TPREL16_HA 90
-#define R_PPC64_GOT_DTPREL16_DS 91
-#define R_PPC64_GOT_DTPREL16_LO_DS 92
-#define R_PPC64_GOT_DTPREL16_HI 93
-#define R_PPC64_GOT_DTPREL16_HA 94
-#define R_PPC64_TPREL16_DS 95
-#define R_PPC64_TPREL16_LO_DS 96
-#define R_PPC64_TPREL16_HIGHER 97
-#define R_PPC64_TPREL16_HIGHERA 98
-#define R_PPC64_TPREL16_HIGHEST 99
-#define R_PPC64_TPREL16_HIGHESTA 100
-#define R_PPC64_DTPREL16_DS 101
-#define R_PPC64_DTPREL16_LO_DS 102
-#define R_PPC64_DTPREL16_HIGHER 103
-#define R_PPC64_DTPREL16_HIGHERA 104
-#define R_PPC64_DTPREL16_HIGHEST 105
-#define R_PPC64_DTPREL16_HIGHESTA 106
-#define R_PPC64_TLSGD 107
-#define R_PPC64_TLSLD 108
-#define R_PPC64_TOCSAVE 109
-#define R_PPC64_ADDR16_HIGH 110
-#define R_PPC64_ADDR16_HIGHA 111
-#define R_PPC64_TPREL16_HIGH 112
-#define R_PPC64_TPREL16_HIGHA 113
-#define R_PPC64_DTPREL16_HIGH 114
-#define R_PPC64_DTPREL16_HIGHA 115
-
-
-#define R_PPC64_JMP_IREL 247
-#define R_PPC64_IRELATIVE 248
-#define R_PPC64_REL16 249
-#define R_PPC64_REL16_LO 250
-#define R_PPC64_REL16_HI 251
-#define R_PPC64_REL16_HA 252
-
-#define EF_PPC64_ABI 3
-
-#define DT_PPC64_GLINK (DT_LOPROC + 0)
-#define DT_PPC64_OPD (DT_LOPROC + 1)
-#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
-#define DT_PPC64_OPT (DT_LOPROC + 3)
-#define DT_PPC64_NUM 4
-
-#define PPC64_OPT_TLS 1
-#define PPC64_OPT_MULTI_TOC 2
-
-#define STO_PPC64_LOCAL_BIT 5
-#define STO_PPC64_LOCAL_MASK 0xe0
-#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc)
-
-
-#define EF_ARM_RELEXEC 0x01
-#define EF_ARM_HASENTRY 0x02
-#define EF_ARM_INTERWORK 0x04
-#define EF_ARM_APCS_26 0x08
-#define EF_ARM_APCS_FLOAT 0x10
-#define EF_ARM_PIC 0x20
-#define EF_ARM_ALIGN8 0x40
-#define EF_ARM_NEW_ABI 0x80
-#define EF_ARM_OLD_ABI 0x100
-#define EF_ARM_SOFT_FLOAT 0x200
-#define EF_ARM_VFP_FLOAT 0x400
-#define EF_ARM_MAVERICK_FLOAT 0x800
-
-#define EF_ARM_ABI_FLOAT_SOFT 0x200
-#define EF_ARM_ABI_FLOAT_HARD 0x400
-
-
-#define EF_ARM_SYMSARESORTED 0x04
-#define EF_ARM_DYNSYMSUSESEGIDX 0x08
-#define EF_ARM_MAPSYMSFIRST 0x10
-#define EF_ARM_EABIMASK 0XFF000000
-
-
-#define EF_ARM_BE8 0x00800000
-#define EF_ARM_LE8 0x00400000
-
-#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
-#define EF_ARM_EABI_UNKNOWN 0x00000000
-#define EF_ARM_EABI_VER1 0x01000000
-#define EF_ARM_EABI_VER2 0x02000000
-#define EF_ARM_EABI_VER3 0x03000000
-#define EF_ARM_EABI_VER4 0x04000000
-#define EF_ARM_EABI_VER5 0x05000000
-
-
-#define STT_ARM_TFUNC STT_LOPROC
-#define STT_ARM_16BIT STT_HIPROC
-
-
-#define SHF_ARM_ENTRYSECT 0x10000000
-#define SHF_ARM_COMDEF 0x80000000
-
-
-
-#define PF_ARM_SB 0x10000000
-
-#define PF_ARM_PI 0x20000000
-#define PF_ARM_ABS 0x40000000
-
-
-#define PT_ARM_EXIDX (PT_LOPROC + 1)
-
-
-#define SHT_ARM_EXIDX (SHT_LOPROC + 1)
-#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2)
-#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3)
-
-#define R_AARCH64_NONE 0
-#define R_AARCH64_P32_ABS32 1
-#define R_AARCH64_P32_COPY 180
-#define R_AARCH64_P32_GLOB_DAT 181
-#define R_AARCH64_P32_JUMP_SLOT 182
-#define R_AARCH64_P32_RELATIVE 183
-#define R_AARCH64_P32_TLS_DTPMOD 184
-#define R_AARCH64_P32_TLS_DTPREL 185
-#define R_AARCH64_P32_TLS_TPREL 186
-#define R_AARCH64_P32_TLSDESC 187
-#define R_AARCH64_P32_IRELATIVE 188
-#define R_AARCH64_ABS64 257
-#define R_AARCH64_ABS32 258
-#define R_AARCH64_ABS16 259
-#define R_AARCH64_PREL64 260
-#define R_AARCH64_PREL32 261
-#define R_AARCH64_PREL16 262
-#define R_AARCH64_MOVW_UABS_G0 263
-#define R_AARCH64_MOVW_UABS_G0_NC 264
-#define R_AARCH64_MOVW_UABS_G1 265
-#define R_AARCH64_MOVW_UABS_G1_NC 266
-#define R_AARCH64_MOVW_UABS_G2 267
-#define R_AARCH64_MOVW_UABS_G2_NC 268
-#define R_AARCH64_MOVW_UABS_G3 269
-#define R_AARCH64_MOVW_SABS_G0 270
-#define R_AARCH64_MOVW_SABS_G1 271
-#define R_AARCH64_MOVW_SABS_G2 272
-#define R_AARCH64_LD_PREL_LO19 273
-#define R_AARCH64_ADR_PREL_LO21 274
-#define R_AARCH64_ADR_PREL_PG_HI21 275
-#define R_AARCH64_ADR_PREL_PG_HI21_NC 276
-#define R_AARCH64_ADD_ABS_LO12_NC 277
-#define R_AARCH64_LDST8_ABS_LO12_NC 278
-#define R_AARCH64_TSTBR14 279
-#define R_AARCH64_CONDBR19 280
-#define R_AARCH64_JUMP26 282
-#define R_AARCH64_CALL26 283
-#define R_AARCH64_LDST16_ABS_LO12_NC 284
-#define R_AARCH64_LDST32_ABS_LO12_NC 285
-#define R_AARCH64_LDST64_ABS_LO12_NC 286
-#define R_AARCH64_MOVW_PREL_G0 287
-#define R_AARCH64_MOVW_PREL_G0_NC 288
-#define R_AARCH64_MOVW_PREL_G1 289
-#define R_AARCH64_MOVW_PREL_G1_NC 290
-#define R_AARCH64_MOVW_PREL_G2 291
-#define R_AARCH64_MOVW_PREL_G2_NC 292
-#define R_AARCH64_MOVW_PREL_G3 293
-#define R_AARCH64_LDST128_ABS_LO12_NC 299
-#define R_AARCH64_MOVW_GOTOFF_G0 300
-#define R_AARCH64_MOVW_GOTOFF_G0_NC 301
-#define R_AARCH64_MOVW_GOTOFF_G1 302
-#define R_AARCH64_MOVW_GOTOFF_G1_NC 303
-#define R_AARCH64_MOVW_GOTOFF_G2 304
-#define R_AARCH64_MOVW_GOTOFF_G2_NC 305
-#define R_AARCH64_MOVW_GOTOFF_G3 306
-#define R_AARCH64_GOTREL64 307
-#define R_AARCH64_GOTREL32 308
-#define R_AARCH64_GOT_LD_PREL19 309
-#define R_AARCH64_LD64_GOTOFF_LO15 310
-#define R_AARCH64_ADR_GOT_PAGE 311
-#define R_AARCH64_LD64_GOT_LO12_NC 312
-#define R_AARCH64_LD64_GOTPAGE_LO15 313
-#define R_AARCH64_TLSGD_ADR_PREL21 512
-#define R_AARCH64_TLSGD_ADR_PAGE21 513
-#define R_AARCH64_TLSGD_ADD_LO12_NC 514
-#define R_AARCH64_TLSGD_MOVW_G1 515
-#define R_AARCH64_TLSGD_MOVW_G0_NC 516
-#define R_AARCH64_TLSLD_ADR_PREL21 517
-#define R_AARCH64_TLSLD_ADR_PAGE21 518
-#define R_AARCH64_TLSLD_ADD_LO12_NC 519
-#define R_AARCH64_TLSLD_MOVW_G1 520
-#define R_AARCH64_TLSLD_MOVW_G0_NC 521
-#define R_AARCH64_TLSLD_LD_PREL19 522
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526
-#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527
-#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528
-#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529
-#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530
-#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531
-#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532
-#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533
-#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534
-#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535
-#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536
-#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537
-#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538
-#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539
-#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540
-#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541
-#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542
-#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543
-#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544
-#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545
-#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546
-#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547
-#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548
-#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549
-#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550
-#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551
-#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552
-#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553
-#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554
-#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555
-#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556
-#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557
-#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558
-#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559
-#define R_AARCH64_TLSDESC_LD_PREL19 560
-#define R_AARCH64_TLSDESC_ADR_PREL21 561
-#define R_AARCH64_TLSDESC_ADR_PAGE21 562
-#define R_AARCH64_TLSDESC_LD64_LO12 563
-#define R_AARCH64_TLSDESC_ADD_LO12 564
-#define R_AARCH64_TLSDESC_OFF_G1 565
-#define R_AARCH64_TLSDESC_OFF_G0_NC 566
-#define R_AARCH64_TLSDESC_LDR 567
-#define R_AARCH64_TLSDESC_ADD 568
-#define R_AARCH64_TLSDESC_CALL 569
-#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570
-#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571
-#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572
-#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573
-#define R_AARCH64_COPY 1024
-#define R_AARCH64_GLOB_DAT 1025
-#define R_AARCH64_JUMP_SLOT 1026
-#define R_AARCH64_RELATIVE 1027
-#define R_AARCH64_TLS_DTPMOD 1028
-#define R_AARCH64_TLS_DTPMOD64 1028
-#define R_AARCH64_TLS_DTPREL 1029
-#define R_AARCH64_TLS_DTPREL64 1029
-#define R_AARCH64_TLS_TPREL 1030
-#define R_AARCH64_TLS_TPREL64 1030
-#define R_AARCH64_TLSDESC 1031
-
-
-#define R_ARM_NONE 0
-#define R_ARM_PC24 1
-#define R_ARM_ABS32 2
-#define R_ARM_REL32 3
-#define R_ARM_PC13 4
-#define R_ARM_ABS16 5
-#define R_ARM_ABS12 6
-#define R_ARM_THM_ABS5 7
-#define R_ARM_ABS8 8
-#define R_ARM_SBREL32 9
-#define R_ARM_THM_PC22 10
-#define R_ARM_THM_PC8 11
-#define R_ARM_AMP_VCALL9 12
-#define R_ARM_TLS_DESC 13
-#define R_ARM_THM_SWI8 14
-#define R_ARM_XPC25 15
-#define R_ARM_THM_XPC22 16
-#define R_ARM_TLS_DTPMOD32 17
-#define R_ARM_TLS_DTPOFF32 18
-#define R_ARM_TLS_TPOFF32 19
-#define R_ARM_COPY 20
-#define R_ARM_GLOB_DAT 21
-#define R_ARM_JUMP_SLOT 22
-#define R_ARM_RELATIVE 23
-#define R_ARM_GOTOFF 24
-#define R_ARM_GOTPC 25
-#define R_ARM_GOT32 26
-#define R_ARM_PLT32 27
-#define R_ARM_CALL 28
-#define R_ARM_JUMP24 29
-#define R_ARM_THM_JUMP24 30
-#define R_ARM_BASE_ABS 31
-#define R_ARM_ALU_PCREL_7_0 32
-#define R_ARM_ALU_PCREL_15_8 33
-#define R_ARM_ALU_PCREL_23_15 34
-#define R_ARM_LDR_SBREL_11_0 35
-#define R_ARM_ALU_SBREL_19_12 36
-#define R_ARM_ALU_SBREL_27_20 37
-#define R_ARM_TARGET1 38
-#define R_ARM_SBREL31 39
-#define R_ARM_V4BX 40
-#define R_ARM_TARGET2 41
-#define R_ARM_PREL31 42
-#define R_ARM_MOVW_ABS_NC 43
-#define R_ARM_MOVT_ABS 44
-#define R_ARM_MOVW_PREL_NC 45
-#define R_ARM_MOVT_PREL 46
-#define R_ARM_THM_MOVW_ABS_NC 47
-#define R_ARM_THM_MOVT_ABS 48
-#define R_ARM_THM_MOVW_PREL_NC 49
-#define R_ARM_THM_MOVT_PREL 50
-#define R_ARM_THM_JUMP19 51
-#define R_ARM_THM_JUMP6 52
-#define R_ARM_THM_ALU_PREL_11_0 53
-#define R_ARM_THM_PC12 54
-#define R_ARM_ABS32_NOI 55
-#define R_ARM_REL32_NOI 56
-#define R_ARM_ALU_PC_G0_NC 57
-#define R_ARM_ALU_PC_G0 58
-#define R_ARM_ALU_PC_G1_NC 59
-#define R_ARM_ALU_PC_G1 60
-#define R_ARM_ALU_PC_G2 61
-#define R_ARM_LDR_PC_G1 62
-#define R_ARM_LDR_PC_G2 63
-#define R_ARM_LDRS_PC_G0 64
-#define R_ARM_LDRS_PC_G1 65
-#define R_ARM_LDRS_PC_G2 66
-#define R_ARM_LDC_PC_G0 67
-#define R_ARM_LDC_PC_G1 68
-#define R_ARM_LDC_PC_G2 69
-#define R_ARM_ALU_SB_G0_NC 70
-#define R_ARM_ALU_SB_G0 71
-#define R_ARM_ALU_SB_G1_NC 72
-#define R_ARM_ALU_SB_G1 73
-#define R_ARM_ALU_SB_G2 74
-#define R_ARM_LDR_SB_G0 75
-#define R_ARM_LDR_SB_G1 76
-#define R_ARM_LDR_SB_G2 77
-#define R_ARM_LDRS_SB_G0 78
-#define R_ARM_LDRS_SB_G1 79
-#define R_ARM_LDRS_SB_G2 80
-#define R_ARM_LDC_SB_G0 81
-#define R_ARM_LDC_SB_G1 82
-#define R_ARM_LDC_SB_G2 83
-#define R_ARM_MOVW_BREL_NC 84
-#define R_ARM_MOVT_BREL 85
-#define R_ARM_MOVW_BREL 86
-#define R_ARM_THM_MOVW_BREL_NC 87
-#define R_ARM_THM_MOVT_BREL 88
-#define R_ARM_THM_MOVW_BREL 89
-#define R_ARM_TLS_GOTDESC 90
-#define R_ARM_TLS_CALL 91
-#define R_ARM_TLS_DESCSEQ 92
-#define R_ARM_THM_TLS_CALL 93
-#define R_ARM_PLT32_ABS 94
-#define R_ARM_GOT_ABS 95
-#define R_ARM_GOT_PREL 96
-#define R_ARM_GOT_BREL12 97
-#define R_ARM_GOTOFF12 98
-#define R_ARM_GOTRELAX 99
-#define R_ARM_GNU_VTENTRY 100
-#define R_ARM_GNU_VTINHERIT 101
-#define R_ARM_THM_PC11 102
-#define R_ARM_THM_PC9 103
-#define R_ARM_TLS_GD32 104
-
-#define R_ARM_TLS_LDM32 105
-
-#define R_ARM_TLS_LDO32 106
-
-#define R_ARM_TLS_IE32 107
-
-#define R_ARM_TLS_LE32 108
-#define R_ARM_TLS_LDO12 109
-#define R_ARM_TLS_LE12 110
-#define R_ARM_TLS_IE12GP 111
-#define R_ARM_ME_TOO 128
-#define R_ARM_THM_TLS_DESCSEQ 129
-#define R_ARM_THM_TLS_DESCSEQ16 129
-#define R_ARM_THM_TLS_DESCSEQ32 130
-#define R_ARM_THM_GOT_BREL12 131
-#define R_ARM_IRELATIVE 160
-#define R_ARM_RXPC25 249
-#define R_ARM_RSBREL32 250
-#define R_ARM_THM_RPC22 251
-#define R_ARM_RREL32 252
-#define R_ARM_RABS22 253
-#define R_ARM_RPC24 254
-#define R_ARM_RBASE 255
-
-#define R_ARM_NUM 256
-
-
-
-
-#define EF_IA_64_MASKOS 0x0000000f
-#define EF_IA_64_ABI64 0x00000010
-#define EF_IA_64_ARCH 0xff000000
-
-
-#define PT_IA_64_ARCHEXT (PT_LOPROC + 0)
-#define PT_IA_64_UNWIND (PT_LOPROC + 1)
-#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12)
-#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13)
-#define PT_IA_64_HP_STACK (PT_LOOS + 0x14)
-
-
-#define PF_IA_64_NORECOV 0x80000000
-
-
-#define SHT_IA_64_EXT (SHT_LOPROC + 0)
-#define SHT_IA_64_UNWIND (SHT_LOPROC + 1)
-
-
-#define SHF_IA_64_SHORT 0x10000000
-#define SHF_IA_64_NORECOV 0x20000000
-
-
-#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0)
-#define DT_IA_64_NUM 1
-
-
-#define R_IA64_NONE 0x00
-#define R_IA64_IMM14 0x21
-#define R_IA64_IMM22 0x22
-#define R_IA64_IMM64 0x23
-#define R_IA64_DIR32MSB 0x24
-#define R_IA64_DIR32LSB 0x25
-#define R_IA64_DIR64MSB 0x26
-#define R_IA64_DIR64LSB 0x27
-#define R_IA64_GPREL22 0x2a
-#define R_IA64_GPREL64I 0x2b
-#define R_IA64_GPREL32MSB 0x2c
-#define R_IA64_GPREL32LSB 0x2d
-#define R_IA64_GPREL64MSB 0x2e
-#define R_IA64_GPREL64LSB 0x2f
-#define R_IA64_LTOFF22 0x32
-#define R_IA64_LTOFF64I 0x33
-#define R_IA64_PLTOFF22 0x3a
-#define R_IA64_PLTOFF64I 0x3b
-#define R_IA64_PLTOFF64MSB 0x3e
-#define R_IA64_PLTOFF64LSB 0x3f
-#define R_IA64_FPTR64I 0x43
-#define R_IA64_FPTR32MSB 0x44
-#define R_IA64_FPTR32LSB 0x45
-#define R_IA64_FPTR64MSB 0x46
-#define R_IA64_FPTR64LSB 0x47
-#define R_IA64_PCREL60B 0x48
-#define R_IA64_PCREL21B 0x49
-#define R_IA64_PCREL21M 0x4a
-#define R_IA64_PCREL21F 0x4b
-#define R_IA64_PCREL32MSB 0x4c
-#define R_IA64_PCREL32LSB 0x4d
-#define R_IA64_PCREL64MSB 0x4e
-#define R_IA64_PCREL64LSB 0x4f
-#define R_IA64_LTOFF_FPTR22 0x52
-#define R_IA64_LTOFF_FPTR64I 0x53
-#define R_IA64_LTOFF_FPTR32MSB 0x54
-#define R_IA64_LTOFF_FPTR32LSB 0x55
-#define R_IA64_LTOFF_FPTR64MSB 0x56
-#define R_IA64_LTOFF_FPTR64LSB 0x57
-#define R_IA64_SEGREL32MSB 0x5c
-#define R_IA64_SEGREL32LSB 0x5d
-#define R_IA64_SEGREL64MSB 0x5e
-#define R_IA64_SEGREL64LSB 0x5f
-#define R_IA64_SECREL32MSB 0x64
-#define R_IA64_SECREL32LSB 0x65
-#define R_IA64_SECREL64MSB 0x66
-#define R_IA64_SECREL64LSB 0x67
-#define R_IA64_REL32MSB 0x6c
-#define R_IA64_REL32LSB 0x6d
-#define R_IA64_REL64MSB 0x6e
-#define R_IA64_REL64LSB 0x6f
-#define R_IA64_LTV32MSB 0x74
-#define R_IA64_LTV32LSB 0x75
-#define R_IA64_LTV64MSB 0x76
-#define R_IA64_LTV64LSB 0x77
-#define R_IA64_PCREL21BI 0x79
-#define R_IA64_PCREL22 0x7a
-#define R_IA64_PCREL64I 0x7b
-#define R_IA64_IPLTMSB 0x80
-#define R_IA64_IPLTLSB 0x81
-#define R_IA64_COPY 0x84
-#define R_IA64_SUB 0x85
-#define R_IA64_LTOFF22X 0x86
-#define R_IA64_LDXMOV 0x87
-#define R_IA64_TPREL14 0x91
-#define R_IA64_TPREL22 0x92
-#define R_IA64_TPREL64I 0x93
-#define R_IA64_TPREL64MSB 0x96
-#define R_IA64_TPREL64LSB 0x97
-#define R_IA64_LTOFF_TPREL22 0x9a
-#define R_IA64_DTPMOD64MSB 0xa6
-#define R_IA64_DTPMOD64LSB 0xa7
-#define R_IA64_LTOFF_DTPMOD22 0xaa
-#define R_IA64_DTPREL14 0xb1
-#define R_IA64_DTPREL22 0xb2
-#define R_IA64_DTPREL64I 0xb3
-#define R_IA64_DTPREL32MSB 0xb4
-#define R_IA64_DTPREL32LSB 0xb5
-#define R_IA64_DTPREL64MSB 0xb6
-#define R_IA64_DTPREL64LSB 0xb7
-#define R_IA64_LTOFF_DTPREL22 0xba
-
-
-#define EF_SH_MACH_MASK 0x1f
-#define EF_SH_UNKNOWN 0x0
-#define EF_SH1 0x1
-#define EF_SH2 0x2
-#define EF_SH3 0x3
-#define EF_SH_DSP 0x4
-#define EF_SH3_DSP 0x5
-#define EF_SH4AL_DSP 0x6
-#define EF_SH3E 0x8
-#define EF_SH4 0x9
-#define EF_SH2E 0xb
-#define EF_SH4A 0xc
-#define EF_SH2A 0xd
-#define EF_SH4_NOFPU 0x10
-#define EF_SH4A_NOFPU 0x11
-#define EF_SH4_NOMMU_NOFPU 0x12
-#define EF_SH2A_NOFPU 0x13
-#define EF_SH3_NOMMU 0x14
-#define EF_SH2A_SH4_NOFPU 0x15
-#define EF_SH2A_SH3_NOFPU 0x16
-#define EF_SH2A_SH4 0x17
-#define EF_SH2A_SH3E 0x18
-
-#define R_SH_NONE 0
-#define R_SH_DIR32 1
-#define R_SH_REL32 2
-#define R_SH_DIR8WPN 3
-#define R_SH_IND12W 4
-#define R_SH_DIR8WPL 5
-#define R_SH_DIR8WPZ 6
-#define R_SH_DIR8BP 7
-#define R_SH_DIR8W 8
-#define R_SH_DIR8L 9
-#define R_SH_SWITCH16 25
-#define R_SH_SWITCH32 26
-#define R_SH_USES 27
-#define R_SH_COUNT 28
-#define R_SH_ALIGN 29
-#define R_SH_CODE 30
-#define R_SH_DATA 31
-#define R_SH_LABEL 32
-#define R_SH_SWITCH8 33
-#define R_SH_GNU_VTINHERIT 34
-#define R_SH_GNU_VTENTRY 35
-#define R_SH_TLS_GD_32 144
-#define R_SH_TLS_LD_32 145
-#define R_SH_TLS_LDO_32 146
-#define R_SH_TLS_IE_32 147
-#define R_SH_TLS_LE_32 148
-#define R_SH_TLS_DTPMOD32 149
-#define R_SH_TLS_DTPOFF32 150
-#define R_SH_TLS_TPOFF32 151
-#define R_SH_GOT32 160
-#define R_SH_PLT32 161
-#define R_SH_COPY 162
-#define R_SH_GLOB_DAT 163
-#define R_SH_JMP_SLOT 164
-#define R_SH_RELATIVE 165
-#define R_SH_GOTOFF 166
-#define R_SH_GOTPC 167
-#define R_SH_GOT20 201
-#define R_SH_GOTOFF20 202
-#define R_SH_GOTFUNCDESC 203
-#define R_SH_GOTFUNCDEST20 204
-#define R_SH_GOTOFFFUNCDESC 205
-#define R_SH_GOTOFFFUNCDEST20 206
-#define R_SH_FUNCDESC 207
-#define R_SH_FUNCDESC_VALUE 208
-
-#define R_SH_NUM 256
-
-
-
-#define R_390_NONE 0
-#define R_390_8 1
-#define R_390_12 2
-#define R_390_16 3
-#define R_390_32 4
-#define R_390_PC32 5
-#define R_390_GOT12 6
-#define R_390_GOT32 7
-#define R_390_PLT32 8
-#define R_390_COPY 9
-#define R_390_GLOB_DAT 10
-#define R_390_JMP_SLOT 11
-#define R_390_RELATIVE 12
-#define R_390_GOTOFF32 13
-#define R_390_GOTPC 14
-#define R_390_GOT16 15
-#define R_390_PC16 16
-#define R_390_PC16DBL 17
-#define R_390_PLT16DBL 18
-#define R_390_PC32DBL 19
-#define R_390_PLT32DBL 20
-#define R_390_GOTPCDBL 21
-#define R_390_64 22
-#define R_390_PC64 23
-#define R_390_GOT64 24
-#define R_390_PLT64 25
-#define R_390_GOTENT 26
-#define R_390_GOTOFF16 27
-#define R_390_GOTOFF64 28
-#define R_390_GOTPLT12 29
-#define R_390_GOTPLT16 30
-#define R_390_GOTPLT32 31
-#define R_390_GOTPLT64 32
-#define R_390_GOTPLTENT 33
-#define R_390_PLTOFF16 34
-#define R_390_PLTOFF32 35
-#define R_390_PLTOFF64 36
-#define R_390_TLS_LOAD 37
-#define R_390_TLS_GDCALL 38
-
-#define R_390_TLS_LDCALL 39
-
-#define R_390_TLS_GD32 40
-
-#define R_390_TLS_GD64 41
-
-#define R_390_TLS_GOTIE12 42
-
-#define R_390_TLS_GOTIE32 43
-
-#define R_390_TLS_GOTIE64 44
-
-#define R_390_TLS_LDM32 45
-
-#define R_390_TLS_LDM64 46
-
-#define R_390_TLS_IE32 47
-
-#define R_390_TLS_IE64 48
-
-#define R_390_TLS_IEENT 49
-
-#define R_390_TLS_LE32 50
-
-#define R_390_TLS_LE64 51
-
-#define R_390_TLS_LDO32 52
-
-#define R_390_TLS_LDO64 53
-
-#define R_390_TLS_DTPMOD 54
-#define R_390_TLS_DTPOFF 55
-#define R_390_TLS_TPOFF 56
-
-#define R_390_20 57
-#define R_390_GOT20 58
-#define R_390_GOTPLT20 59
-#define R_390_TLS_GOTIE20 60
-
-
-#define R_390_NUM 61
-
-
-
-#define R_CRIS_NONE 0
-#define R_CRIS_8 1
-#define R_CRIS_16 2
-#define R_CRIS_32 3
-#define R_CRIS_8_PCREL 4
-#define R_CRIS_16_PCREL 5
-#define R_CRIS_32_PCREL 6
-#define R_CRIS_GNU_VTINHERIT 7
-#define R_CRIS_GNU_VTENTRY 8
-#define R_CRIS_COPY 9
-#define R_CRIS_GLOB_DAT 10
-#define R_CRIS_JUMP_SLOT 11
-#define R_CRIS_RELATIVE 12
-#define R_CRIS_16_GOT 13
-#define R_CRIS_32_GOT 14
-#define R_CRIS_16_GOTPLT 15
-#define R_CRIS_32_GOTPLT 16
-#define R_CRIS_32_GOTREL 17
-#define R_CRIS_32_PLT_GOTREL 18
-#define R_CRIS_32_PLT_PCREL 19
-
-#define R_CRIS_NUM 20
-
-
-
-#define R_X86_64_NONE 0
-#define R_X86_64_64 1
-#define R_X86_64_PC32 2
-#define R_X86_64_GOT32 3
-#define R_X86_64_PLT32 4
-#define R_X86_64_COPY 5
-#define R_X86_64_GLOB_DAT 6
-#define R_X86_64_JUMP_SLOT 7
-#define R_X86_64_RELATIVE 8
-#define R_X86_64_GOTPCREL 9
-
-#define R_X86_64_32 10
-#define R_X86_64_32S 11
-#define R_X86_64_16 12
-#define R_X86_64_PC16 13
-#define R_X86_64_8 14
-#define R_X86_64_PC8 15
-#define R_X86_64_DTPMOD64 16
-#define R_X86_64_DTPOFF64 17
-#define R_X86_64_TPOFF64 18
-#define R_X86_64_TLSGD 19
-
-#define R_X86_64_TLSLD 20
-
-#define R_X86_64_DTPOFF32 21
-#define R_X86_64_GOTTPOFF 22
-
-#define R_X86_64_TPOFF32 23
-#define R_X86_64_PC64 24
-#define R_X86_64_GOTOFF64 25
-#define R_X86_64_GOTPC32 26
-#define R_X86_64_GOT64 27
-#define R_X86_64_GOTPCREL64 28
-#define R_X86_64_GOTPC64 29
-#define R_X86_64_GOTPLT64 30
-#define R_X86_64_PLTOFF64 31
-#define R_X86_64_SIZE32 32
-#define R_X86_64_SIZE64 33
-
-#define R_X86_64_GOTPC32_TLSDESC 34
-#define R_X86_64_TLSDESC_CALL 35
-
-#define R_X86_64_TLSDESC 36
-#define R_X86_64_IRELATIVE 37
-#define R_X86_64_RELATIVE64 38
-#define R_X86_64_GOTPCRELX 41
-#define R_X86_64_REX_GOTPCRELX 42
-#define R_X86_64_NUM 43
-
-
-
-#define R_MN10300_NONE 0
-#define R_MN10300_32 1
-#define R_MN10300_16 2
-#define R_MN10300_8 3
-#define R_MN10300_PCREL32 4
-#define R_MN10300_PCREL16 5
-#define R_MN10300_PCREL8 6
-#define R_MN10300_GNU_VTINHERIT 7
-#define R_MN10300_GNU_VTENTRY 8
-#define R_MN10300_24 9
-#define R_MN10300_GOTPC32 10
-#define R_MN10300_GOTPC16 11
-#define R_MN10300_GOTOFF32 12
-#define R_MN10300_GOTOFF24 13
-#define R_MN10300_GOTOFF16 14
-#define R_MN10300_PLT32 15
-#define R_MN10300_PLT16 16
-#define R_MN10300_GOT32 17
-#define R_MN10300_GOT24 18
-#define R_MN10300_GOT16 19
-#define R_MN10300_COPY 20
-#define R_MN10300_GLOB_DAT 21
-#define R_MN10300_JMP_SLOT 22
-#define R_MN10300_RELATIVE 23
-
-#define R_MN10300_NUM 24
-
-
-
-#define R_M32R_NONE 0
-#define R_M32R_16 1
-#define R_M32R_32 2
-#define R_M32R_24 3
-#define R_M32R_10_PCREL 4
-#define R_M32R_18_PCREL 5
-#define R_M32R_26_PCREL 6
-#define R_M32R_HI16_ULO 7
-#define R_M32R_HI16_SLO 8
-#define R_M32R_LO16 9
-#define R_M32R_SDA16 10
-#define R_M32R_GNU_VTINHERIT 11
-#define R_M32R_GNU_VTENTRY 12
-
-#define R_M32R_16_RELA 33
-#define R_M32R_32_RELA 34
-#define R_M32R_24_RELA 35
-#define R_M32R_10_PCREL_RELA 36
-#define R_M32R_18_PCREL_RELA 37
-#define R_M32R_26_PCREL_RELA 38
-#define R_M32R_HI16_ULO_RELA 39
-#define R_M32R_HI16_SLO_RELA 40
-#define R_M32R_LO16_RELA 41
-#define R_M32R_SDA16_RELA 42
-#define R_M32R_RELA_GNU_VTINHERIT 43
-#define R_M32R_RELA_GNU_VTENTRY 44
-#define R_M32R_REL32 45
-
-#define R_M32R_GOT24 48
-#define R_M32R_26_PLTREL 49
-#define R_M32R_COPY 50
-#define R_M32R_GLOB_DAT 51
-#define R_M32R_JMP_SLOT 52
-#define R_M32R_RELATIVE 53
-#define R_M32R_GOTOFF 54
-#define R_M32R_GOTPC24 55
-#define R_M32R_GOT16_HI_ULO 56
-
-#define R_M32R_GOT16_HI_SLO 57
-
-#define R_M32R_GOT16_LO 58
-#define R_M32R_GOTPC_HI_ULO 59
-
-#define R_M32R_GOTPC_HI_SLO 60
-
-#define R_M32R_GOTPC_LO 61
-
-#define R_M32R_GOTOFF_HI_ULO 62
-
-#define R_M32R_GOTOFF_HI_SLO 63
-
-#define R_M32R_GOTOFF_LO 64
-#define R_M32R_NUM 256
-
-#define R_MICROBLAZE_NONE 0
-#define R_MICROBLAZE_32 1
-#define R_MICROBLAZE_32_PCREL 2
-#define R_MICROBLAZE_64_PCREL 3
-#define R_MICROBLAZE_32_PCREL_LO 4
-#define R_MICROBLAZE_64 5
-#define R_MICROBLAZE_32_LO 6
-#define R_MICROBLAZE_SRO32 7
-#define R_MICROBLAZE_SRW32 8
-#define R_MICROBLAZE_64_NONE 9
-#define R_MICROBLAZE_32_SYM_OP_SYM 10
-#define R_MICROBLAZE_GNU_VTINHERIT 11
-#define R_MICROBLAZE_GNU_VTENTRY 12
-#define R_MICROBLAZE_GOTPC_64 13
-#define R_MICROBLAZE_GOT_64 14
-#define R_MICROBLAZE_PLT_64 15
-#define R_MICROBLAZE_REL 16
-#define R_MICROBLAZE_JUMP_SLOT 17
-#define R_MICROBLAZE_GLOB_DAT 18
-#define R_MICROBLAZE_GOTOFF_64 19
-#define R_MICROBLAZE_GOTOFF_32 20
-#define R_MICROBLAZE_COPY 21
-#define R_MICROBLAZE_TLS 22
-#define R_MICROBLAZE_TLSGD 23
-#define R_MICROBLAZE_TLSLD 24
-#define R_MICROBLAZE_TLSDTPMOD32 25
-#define R_MICROBLAZE_TLSDTPREL32 26
-#define R_MICROBLAZE_TLSDTPREL64 27
-#define R_MICROBLAZE_TLSGOTTPREL32 28
-#define R_MICROBLAZE_TLSTPREL32 29
-
-#define DT_NIOS2_GP 0x70000002
-
-#define R_NIOS2_NONE 0
-#define R_NIOS2_S16 1
-#define R_NIOS2_U16 2
-#define R_NIOS2_PCREL16 3
-#define R_NIOS2_CALL26 4
-#define R_NIOS2_IMM5 5
-#define R_NIOS2_CACHE_OPX 6
-#define R_NIOS2_IMM6 7
-#define R_NIOS2_IMM8 8
-#define R_NIOS2_HI16 9
-#define R_NIOS2_LO16 10
-#define R_NIOS2_HIADJ16 11
-#define R_NIOS2_BFD_RELOC_32 12
-#define R_NIOS2_BFD_RELOC_16 13
-#define R_NIOS2_BFD_RELOC_8 14
-#define R_NIOS2_GPREL 15
-#define R_NIOS2_GNU_VTINHERIT 16
-#define R_NIOS2_GNU_VTENTRY 17
-#define R_NIOS2_UJMP 18
-#define R_NIOS2_CJMP 19
-#define R_NIOS2_CALLR 20
-#define R_NIOS2_ALIGN 21
-#define R_NIOS2_GOT16 22
-#define R_NIOS2_CALL16 23
-#define R_NIOS2_GOTOFF_LO 24
-#define R_NIOS2_GOTOFF_HA 25
-#define R_NIOS2_PCREL_LO 26
-#define R_NIOS2_PCREL_HA 27
-#define R_NIOS2_TLS_GD16 28
-#define R_NIOS2_TLS_LDM16 29
-#define R_NIOS2_TLS_LDO16 30
-#define R_NIOS2_TLS_IE16 31
-#define R_NIOS2_TLS_LE16 32
-#define R_NIOS2_TLS_DTPMOD 33
-#define R_NIOS2_TLS_DTPREL 34
-#define R_NIOS2_TLS_TPREL 35
-#define R_NIOS2_COPY 36
-#define R_NIOS2_GLOB_DAT 37
-#define R_NIOS2_JUMP_SLOT 38
-#define R_NIOS2_RELATIVE 39
-#define R_NIOS2_GOTOFF 40
-#define R_NIOS2_CALL26_NOAT 41
-#define R_NIOS2_GOT_LO 42
-#define R_NIOS2_GOT_HA 43
-#define R_NIOS2_CALL_LO 44
-#define R_NIOS2_CALL_HA 45
-
-#define R_OR1K_NONE 0
-#define R_OR1K_32 1
-#define R_OR1K_16 2
-#define R_OR1K_8 3
-#define R_OR1K_LO_16_IN_INSN 4
-#define R_OR1K_HI_16_IN_INSN 5
-#define R_OR1K_INSN_REL_26 6
-#define R_OR1K_GNU_VTENTRY 7
-#define R_OR1K_GNU_VTINHERIT 8
-#define R_OR1K_32_PCREL 9
-#define R_OR1K_16_PCREL 10
-#define R_OR1K_8_PCREL 11
-#define R_OR1K_GOTPC_HI16 12
-#define R_OR1K_GOTPC_LO16 13
-#define R_OR1K_GOT16 14
-#define R_OR1K_PLT26 15
-#define R_OR1K_GOTOFF_HI16 16
-#define R_OR1K_GOTOFF_LO16 17
-#define R_OR1K_COPY 18
-#define R_OR1K_GLOB_DAT 19
-#define R_OR1K_JMP_SLOT 20
-#define R_OR1K_RELATIVE 21
-#define R_OR1K_TLS_GD_HI16 22
-#define R_OR1K_TLS_GD_LO16 23
-#define R_OR1K_TLS_LDM_HI16 24
-#define R_OR1K_TLS_LDM_LO16 25
-#define R_OR1K_TLS_LDO_HI16 26
-#define R_OR1K_TLS_LDO_LO16 27
-#define R_OR1K_TLS_IE_HI16 28
-#define R_OR1K_TLS_IE_LO16 29
-#define R_OR1K_TLS_LE_HI16 30
-#define R_OR1K_TLS_LE_LO16 31
-#define R_OR1K_TLS_TPOFF 32
-#define R_OR1K_TLS_DTPOFF 33
-#define R_OR1K_TLS_DTPMOD 34
-
-#define R_BPF_NONE 0
-#define R_BPF_MAP_FD 1
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif
diff --git a/tools/gbafix/gbafix.c b/tools/gbafix/gbafix.c
deleted file mode 100644
index 598e43aa0823..000000000000
--- a/tools/gbafix/gbafix.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- "$Id: gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $"
-
- DevkitPro GBA ROM fix utility
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA.
-
- Please report all bugs and problems through the bug tracker at
- "http://sourceforge.net/tracker/?group_id=114505&atid=668551".
-
- "$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $"
-
-*/
-//---------------------------------------------------------------------------------
-// gbafix.c
-//---------------------------------------------------------------------------------
-/*
- Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome)
- Validates header of GBA roms.
-
- History
- -------
- v1.07 - added support for ELF input, (PikalaxALT)
- v1.06 - added output silencing, (Diegoisawesome)
- v1.05 - added debug offset argument, (Diegoisawesome)
- v1.04 - converted to plain C, (WinterMute)
- v1.03 - header.fixed, header.device_type
- v1.02 - redefined the options (rgbfix style), checksum=0
- v1.01 - fix in parameters
- v1.00 - logo, complement
-*/
-
-#pragma pack(1)
-
-#include
-#include
-#include
-#include
-#include "elf.h"
-
-#define VER "1.07"
-#define ARGV argv[arg]
-#define VALUE (ARGV+2)
-#define NUMBER strtoul(VALUE, NULL, 0)
-
-typedef struct
-{
- uint32_t start_code; // B instruction
- uint8_t logo[0xA0-0x04]; // logo data
- uint8_t title[0xC]; // game title name
- uint32_t game_code; //
- uint16_t maker_code; //
- uint8_t fixed; // 0x96
- uint8_t unit_code; // 0x00
- uint8_t device_type; // 0x00
- uint8_t unused[7]; //
- uint8_t game_version; // 0x00
- uint8_t complement; // 800000A0..800000BC
- uint16_t checksum; // 0x0000
-} Header;
-
-
-Header header;
-
-unsigned short checksum_without_header = 0;
-
-const Header good_header =
-{
- // start_code
- 0xEA00002E,
- // logo
- { 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD,
- 0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20,
- 0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF,
- 0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC,
- 0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76,
- 0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD,
- 0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25,
- 0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44,
- 0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF,
- 0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07 } ,
- // title
- { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
- // game code
- 0x00000000,
- // maker code
- 0x3130,
- // fixed
- 0x96,
- // unit_code
- 0x00,
- // device type
- 0x00,
- // unused
- { 0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
- // game version
- 0x00,
- // complement
- 0x00,
- // checksum
- 0x0000
-};
-
-//---------------------------------------------------------------------------------
-char HeaderComplement()
-/*---------------------------------------------------------------------------------
- Calculate Header complement check
----------------------------------------------------------------------------------*/
-{
- int n;
- char c = 0;
- char *p = (char *)&header + 0xA0;
- for (n=0; n<0xBD-0xA0; n++)
- {
- c += *p++;
- }
- return -(0x19+c);
-}
-
-
-//---------------------------------------------------------------------------------
-int main(int argc, char *argv[])
-//---------------------------------------------------------------------------------
-{
- int arg;
- char *argfile = 0;
- FILE *infile;
- int silent = 0;
- int schedule_pad = 0;
-
- int size,bit;
-
- // show syntax
- if (argc <= 1)
- {
- printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n");
- printf("Syntax: gbafix [-p] [-t[title]] [-c] [-m] [-r] [-d] [--silent]\n");
- printf("\n");
- printf("parameters:\n");
- printf(" -p Pad to next exact power of 2. No minimum size!\n");
- printf(" -t[] Patch title. Stripped filename if none given.\n");
- printf(" -c Patch game code (four characters)\n");
- printf(" -m Patch maker code (two characters)\n");
- printf(" -r Patch game version (number)\n");
- printf(" -d Enable debugging handler and set debug entry point (0 or 1)\n");
- printf(" --silent Silence non-error output\n");
- return -1;
- }
-
- // get filename
- for (arg=1; arge_shoff, SEEK_SET);
- int i;
- for (i = 0; i < elfHeader->e_shnum; i++) {
- fread(&secHeader, sizeof(Elf32_Shdr), 1, infile);
- if (secHeader.sh_type == SHT_PROGBITS && secHeader.sh_addr == elfHeader->e_entry) break;
- }
- if (i == elfHeader->e_shnum) { fprintf(stderr, "Error finding entry point!\n"); return 1; }
- fseek(infile, secHeader.sh_offset, SEEK_SET);
- sh_offset = secHeader.sh_offset;
- fread(&header, sizeof(header), 1, infile);
- }
-
- // fix some data
- memcpy(header.logo, good_header.logo, sizeof(header.logo));
- memcpy(&header.fixed, &good_header.fixed, sizeof(header.fixed));
- memcpy(&header.device_type, &good_header.device_type, sizeof(header.device_type));
-
- // parse command line
- for (arg=1; arg=0; bit--) if (size & (1<
-#include
-#include
-#include "global.h"
-#include "convert_png.h"
-#include "gfx.h"
-
-static FILE *PngReadOpen(char *path, png_structp *pngStruct, png_infop *pngInfo)
-{
- FILE *fp = fopen(path, "rb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
-
- unsigned char sig[8];
-
- if (fread(sig, 8, 1, fp) != 1)
- FATAL_ERROR("Failed to read PNG signature from \"%s\".\n", path);
-
- if (png_sig_cmp(sig, 0, 8))
- FATAL_ERROR("\"%s\" does not have a valid PNG signature.\n", path);
-
- png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-
- if (!png_ptr)
- FATAL_ERROR("Failed to create PNG read struct.\n");
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
-
- if (!info_ptr)
- FATAL_ERROR("Failed to create PNG info struct.\n");
-
- if (setjmp(png_jmpbuf(png_ptr)))
- FATAL_ERROR("Failed to init I/O for reading \"%s\".\n", path);
-
- png_init_io(png_ptr, fp);
- png_set_sig_bytes(png_ptr, 8);
- png_read_info(png_ptr, info_ptr);
-
- *pngStruct = png_ptr;
- *pngInfo = info_ptr;
-
- return fp;
-}
-
-static unsigned char *ConvertBitDepth(unsigned char *src, int srcBitDepth, int destBitDepth, int numPixels)
-{
- // Round the number of bits up to the next 8 and divide by 8 to get the number of bytes.
- int srcSize = ((numPixels * srcBitDepth + 7) & ~7) / 8;
- int destSize = ((numPixels * destBitDepth + 7) & ~7) / 8;
- unsigned char *output = calloc(destSize, 1);
- unsigned char *dest = output;
- int i;
- int j;
- int destBit = 8 - destBitDepth;
-
- for (i = 0; i < srcSize; i++)
- {
- unsigned char srcByte = src[i];
-
- for (j = 8 - srcBitDepth; j >= 0; j -= srcBitDepth)
- {
- unsigned char pixel = (srcByte >> j) % (1 << srcBitDepth);
-
- if (pixel >= (1 << destBitDepth))
- FATAL_ERROR("Image exceeds the maximum color value for a %ibpp image.\n", destBitDepth);
- *dest |= pixel << destBit;
- destBit -= destBitDepth;
- if (destBit < 0)
- {
- dest++;
- destBit = 8 - destBitDepth;
- }
- }
- }
-
- return output;
-}
-
-void ReadPng(char *path, struct Image *image)
-{
- png_structp png_ptr;
- png_infop info_ptr;
-
- FILE *fp = PngReadOpen(path, &png_ptr, &info_ptr);
-
- int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
-
- int color_type = png_get_color_type(png_ptr, info_ptr);
-
- if (color_type != PNG_COLOR_TYPE_GRAY && color_type != PNG_COLOR_TYPE_PALETTE)
- FATAL_ERROR("\"%s\" has an unsupported color type.\n", path);
-
- // Check if the image has a palette so that we can tell if the colors need to be inverted later.
- // Don't read the palette because it's not needed for now.
- image->hasPalette = (color_type == PNG_COLOR_TYPE_PALETTE);
-
- image->width = png_get_image_width(png_ptr, info_ptr);
- image->height = png_get_image_height(png_ptr, info_ptr);
-
- int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
-
- image->pixels = malloc(image->height * rowbytes);
-
- if (image->pixels == NULL)
- FATAL_ERROR("Failed to allocate pixel buffer.\n");
-
- png_bytepp row_pointers = malloc(image->height * sizeof(png_bytep));
-
- if (row_pointers == NULL)
- FATAL_ERROR("Failed to allocate row pointers.\n");
-
- for (int i = 0; i < image->height; i++)
- row_pointers[i] = (png_bytep)(image->pixels + (i * rowbytes));
-
- if (setjmp(png_jmpbuf(png_ptr)))
- FATAL_ERROR("Error reading from \"%s\".\n", path);
-
- png_read_image(png_ptr, row_pointers);
-
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-
- free(row_pointers);
- fclose(fp);
-
- if (bit_depth != image->bitDepth)
- {
- unsigned char *src = image->pixels;
-
- if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 && bit_depth != 8)
- FATAL_ERROR("Bit depth of image must be 1, 2, 4, or 8.\n");
- image->pixels = ConvertBitDepth(image->pixels, bit_depth, image->bitDepth, image->width * image->height);
- free(src);
- image->bitDepth = bit_depth;
- }
-}
-
-void ReadPngPalette(char *path, struct Palette *palette)
-{
- png_structp png_ptr;
- png_infop info_ptr;
- png_colorp colors;
- int numColors;
-
- FILE *fp = PngReadOpen(path, &png_ptr, &info_ptr);
-
- if (png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_PALETTE)
- FATAL_ERROR("The image \"%s\" does not contain a palette.\n", path);
-
- if (png_get_PLTE(png_ptr, info_ptr, &colors, &numColors) != PNG_INFO_PLTE)
- FATAL_ERROR("Failed to retrieve palette from \"%s\".\n", path);
-
- if (numColors > 256)
- FATAL_ERROR("Images with more than 256 colors are not supported.\n");
-
- palette->numColors = numColors;
- for (int i = 0; i < numColors; i++) {
- palette->colors[i].red = colors[i].red;
- palette->colors[i].green = colors[i].green;
- palette->colors[i].blue = colors[i].blue;
- }
-
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
-
- fclose(fp);
-}
-
-void SetPngPalette(png_structp png_ptr, png_infop info_ptr, struct Palette *palette)
-{
- png_colorp colors = malloc(palette->numColors * sizeof(png_color));
-
- if (colors == NULL)
- FATAL_ERROR("Failed to allocate PNG palette.\n");
-
- for (int i = 0; i < palette->numColors; i++) {
- colors[i].red = palette->colors[i].red;
- colors[i].green = palette->colors[i].green;
- colors[i].blue = palette->colors[i].blue;
- }
-
- png_set_PLTE(png_ptr, info_ptr, colors, palette->numColors);
-
- free(colors);
-}
-
-void WritePng(char *path, struct Image *image)
-{
- FILE *fp = fopen(path, "wb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for writing.\n", path);
-
- png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-
- if (!png_ptr)
- FATAL_ERROR("Failed to create PNG write struct.\n");
-
- png_infop info_ptr = png_create_info_struct(png_ptr);
-
- if (!info_ptr)
- FATAL_ERROR("Failed to create PNG info struct.\n");
-
- if (setjmp(png_jmpbuf(png_ptr)))
- FATAL_ERROR("Failed to init I/O for writing \"%s\".\n", path);
-
- png_init_io(png_ptr, fp);
-
- if (setjmp(png_jmpbuf(png_ptr)))
- FATAL_ERROR("Error writing header for \"%s\".\n", path);
-
- int color_type = image->hasPalette ? PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_GRAY;
-
- png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
- image->bitDepth, color_type, PNG_INTERLACE_NONE,
- PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
- if (image->hasPalette) {
- SetPngPalette(png_ptr, info_ptr, &image->palette);
-
- if (image->hasTransparency) {
- png_byte trans = 0;
- png_set_tRNS(png_ptr, info_ptr, &trans, 1, 0);
- }
- }
-
- png_write_info(png_ptr, info_ptr);
-
- png_bytepp row_pointers = malloc(image->height * sizeof(png_bytep));
-
- if (row_pointers == NULL)
- FATAL_ERROR("Failed to allocate row pointers.\n");
-
- int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
-
- for (int i = 0; i < image->height; i++)
- row_pointers[i] = (png_bytep)(image->pixels + (i * rowbytes));
-
- if (setjmp(png_jmpbuf(png_ptr)))
- FATAL_ERROR("Error writing \"%s\".\n", path);
-
- png_write_image(png_ptr, row_pointers);
-
- if (setjmp(png_jmpbuf(png_ptr)))
- FATAL_ERROR("Error ending write of \"%s\".\n", path);
-
- png_write_end(png_ptr, NULL);
-
- fclose(fp);
-
- png_destroy_write_struct(&png_ptr, &info_ptr);
- free(row_pointers);
-}
diff --git a/tools/gbagfx/convert_png.h b/tools/gbagfx/convert_png.h
deleted file mode 100644
index caf081b733e1..000000000000
--- a/tools/gbagfx/convert_png.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef CONVERT_PNG_H
-#define CONVERT_PNG_H
-
-#include "gfx.h"
-
-void ReadPng(char *path, struct Image *image);
-void WritePng(char *path, struct Image *image);
-void ReadPngPalette(char *path, struct Palette *palette);
-
-#endif // CONVERT_PNG_H
diff --git a/tools/gbagfx/font.c b/tools/gbagfx/font.c
deleted file mode 100644
index 0dd6fbc3ee01..000000000000
--- a/tools/gbagfx/font.c
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#include
-#include
-#include
-#include
-#include "global.h"
-#include "font.h"
-#include "gfx.h"
-#include "util.h"
-
-unsigned char gFontPalette[][3] = {
- {0x90, 0xC8, 0xFF}, // bg (saturated blue that contrasts well with the shadow color)
- {0x38, 0x38, 0x38}, // fg (dark grey)
- {0xD8, 0xD8, 0xD8}, // shadow (light grey)
- {0xFF, 0xFF, 0xFF} // box (white)
-};
-
-static void ConvertFromLatinFont(unsigned char *src, unsigned char *dest, unsigned int numRows)
-{
- unsigned int srcPixelsOffset = 0;
-
- for (unsigned int row = 0; row < numRows; row++) {
- for (unsigned int column = 0; column < 16; column++) {
- for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) {
- unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8);
-
- for (unsigned int i = 0; i < 8; i++) {
- unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i;
- unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4);
-
- dest[destPixelsOffset] = src[srcPixelsOffset + 1];
- dest[destPixelsOffset + 1] = src[srcPixelsOffset];
-
- srcPixelsOffset += 2;
- }
- }
- }
- }
-}
-
-static void ConvertToLatinFont(unsigned char *src, unsigned char *dest, unsigned int numRows)
-{
- unsigned int destPixelsOffset = 0;
-
- for (unsigned int row = 0; row < numRows; row++) {
- for (unsigned int column = 0; column < 16; column++) {
- for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) {
- unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8);
-
- for (unsigned int i = 0; i < 8; i++) {
- unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i;
- unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4);
-
- dest[destPixelsOffset] = src[srcPixelsOffset + 1];
- dest[destPixelsOffset + 1] = src[srcPixelsOffset];
-
- destPixelsOffset += 2;
- }
- }
- }
- }
-}
-
-static void ConvertFromHalfwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows)
-{
- for (unsigned int row = 0; row < numRows; row++) {
- for (unsigned int column = 0; column < 16; column++) {
- unsigned int glyphIndex = (row * 16) + column;
-
- for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) {
- unsigned int pixelsX = column * 8;
- unsigned int srcPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile;
-
- for (unsigned int i = 0; i < 8; i++) {
- unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i;
- unsigned int destPixelsOffset = (pixelsY * 32) + (pixelsX / 4);
-
- dest[destPixelsOffset] = src[srcPixelsOffset + 1];
- dest[destPixelsOffset + 1] = src[srcPixelsOffset];
-
- srcPixelsOffset += 2;
- }
- }
- }
- }
-}
-
-static void ConvertToHalfwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows)
-{
- for (unsigned int row = 0; row < numRows; row++) {
- for (unsigned int column = 0; column < 16; column++) {
- unsigned int glyphIndex = (row * 16) + column;
-
- for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) {
- unsigned int pixelsX = column * 8;
- unsigned int destPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile;
-
- for (unsigned int i = 0; i < 8; i++) {
- unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i;
- unsigned int srcPixelsOffset = (pixelsY * 32) + (pixelsX / 4);
-
- dest[destPixelsOffset] = src[srcPixelsOffset + 1];
- dest[destPixelsOffset + 1] = src[srcPixelsOffset];
-
- destPixelsOffset += 2;
- }
- }
- }
- }
-}
-
-static void ConvertFromFullwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows)
-{
- for (unsigned int row = 0; row < numRows; row++) {
- for (unsigned int column = 0; column < 16; column++) {
- unsigned int glyphIndex = (row * 16) + column;
-
- for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) {
- unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8);
- unsigned int srcPixelsOffset = 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1);
-
- for (unsigned int i = 0; i < 8; i++) {
- unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i;
- unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4);
-
- dest[destPixelsOffset] = src[srcPixelsOffset + 1];
- dest[destPixelsOffset + 1] = src[srcPixelsOffset];
-
- srcPixelsOffset += 2;
- }
- }
- }
- }
-}
-
-static void ConvertToFullwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows)
-{
- for (unsigned int row = 0; row < numRows; row++) {
- for (unsigned int column = 0; column < 16; column++) {
- unsigned int glyphIndex = (row * 16) + column;
-
- for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) {
- unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8);
- unsigned int destPixelsOffset = 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1);
-
- for (unsigned int i = 0; i < 8; i++) {
- unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i;
- unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4);
-
- dest[destPixelsOffset] = src[srcPixelsOffset + 1];
- dest[destPixelsOffset + 1] = src[srcPixelsOffset];
-
- destPixelsOffset += 2;
- }
- }
- }
- }
-}
-
-static void SetFontPalette(struct Image *image)
-{
- image->hasPalette = true;
-
- image->palette.numColors = 4;
-
- for (int i = 0; i < image->palette.numColors; i++) {
- image->palette.colors[i].red = gFontPalette[i][0];
- image->palette.colors[i].green = gFontPalette[i][1];
- image->palette.colors[i].blue = gFontPalette[i][2];
- }
-
- image->hasTransparency = false;
-}
-
-void ReadLatinFont(char *path, struct Image *image)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(path, &fileSize);
-
- int numGlyphs = fileSize / 64;
-
- if (numGlyphs % 16 != 0)
- FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs);
-
- int numRows = numGlyphs / 16;
-
- image->width = 256;
- image->height = numRows * 16;
- image->bitDepth = 2;
- image->pixels = malloc(fileSize);
-
- if (image->pixels == NULL)
- FATAL_ERROR("Failed to allocate memory for font.\n");
-
- ConvertFromLatinFont(buffer, image->pixels, numRows);
-
- free(buffer);
-
- SetFontPalette(image);
-}
-
-void WriteLatinFont(char *path, struct Image *image)
-{
- if (image->width != 256)
- FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width);
-
- if (image->height % 16 != 0)
- FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height);
-
- int numRows = image->height / 16;
- int bufferSize = numRows * 16 * 64;
- unsigned char *buffer = malloc(bufferSize);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for font.\n");
-
- ConvertToLatinFont(image->pixels, buffer, numRows);
-
- WriteWholeFile(path, buffer, bufferSize);
-
- free(buffer);
-}
-
-void ReadHalfwidthJapaneseFont(char *path, struct Image *image)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(path, &fileSize);
-
- int glyphSize = 32;
-
- if (fileSize % glyphSize != 0)
- FATAL_ERROR("The file size (%d) is not a multiple of %d.\n", fileSize, glyphSize);
-
- int numGlyphs = fileSize / glyphSize;
-
- if (numGlyphs % 16 != 0)
- FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs);
-
- int numRows = numGlyphs / 16;
-
- image->width = 128;
- image->height = numRows * 16;
- image->bitDepth = 2;
- image->pixels = malloc(fileSize);
-
- if (image->pixels == NULL)
- FATAL_ERROR("Failed to allocate memory for font.\n");
-
- ConvertFromHalfwidthJapaneseFont(buffer, image->pixels, numRows);
-
- free(buffer);
-
- SetFontPalette(image);
-}
-
-void WriteHalfwidthJapaneseFont(char *path, struct Image *image)
-{
- if (image->width != 128)
- FATAL_ERROR("The width of the font image (%d) is not 128.\n", image->width);
-
- if (image->height % 16 != 0)
- FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height);
-
- int numRows = image->height / 16;
- int bufferSize = numRows * 16 * 32;
- unsigned char *buffer = malloc(bufferSize);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for font.\n");
-
- ConvertToHalfwidthJapaneseFont(image->pixels, buffer, numRows);
-
- WriteWholeFile(path, buffer, bufferSize);
-
- free(buffer);
-}
-
-void ReadFullwidthJapaneseFont(char *path, struct Image *image)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(path, &fileSize);
-
- int numGlyphs = fileSize / 64;
-
- if (numGlyphs % 16 != 0)
- FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs);
-
- int numRows = numGlyphs / 16;
-
- image->width = 256;
- image->height = numRows * 16;
- image->bitDepth = 2;
- image->pixels = malloc(fileSize);
-
- if (image->pixels == NULL)
- FATAL_ERROR("Failed to allocate memory for font.\n");
-
- ConvertFromFullwidthJapaneseFont(buffer, image->pixels, numRows);
-
- free(buffer);
-
- SetFontPalette(image);
-}
-
-void WriteFullwidthJapaneseFont(char *path, struct Image *image)
-{
- if (image->width != 256)
- FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width);
-
- if (image->height % 16 != 0)
- FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height);
-
- int numRows = image->height / 16;
- int bufferSize = numRows * 16 * 64;
- unsigned char *buffer = malloc(bufferSize);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for font.\n");
-
- ConvertToFullwidthJapaneseFont(image->pixels, buffer, numRows);
-
- WriteWholeFile(path, buffer, bufferSize);
-
- free(buffer);
-}
diff --git a/tools/gbagfx/font.h b/tools/gbagfx/font.h
deleted file mode 100644
index 45086d02acbd..000000000000
--- a/tools/gbagfx/font.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef FONT_H
-#define FONT_H
-
-#include
-#include "gfx.h"
-
-void ReadLatinFont(char *path, struct Image *image);
-void WriteLatinFont(char *path, struct Image *image);
-void ReadHalfwidthJapaneseFont(char *path, struct Image *image);
-void WriteHalfwidthJapaneseFont(char *path, struct Image *image);
-void ReadFullwidthJapaneseFont(char *path, struct Image *image);
-void WriteFullwidthJapaneseFont(char *path, struct Image *image);
-
-#endif // FONT_H
diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c
deleted file mode 100644
index f927deed9b0e..000000000000
--- a/tools/gbagfx/gfx.c
+++ /dev/null
@@ -1,344 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#include
-#include
-#include
-#include
-#include "global.h"
-#include "gfx.h"
-#include "util.h"
-
-#define GET_GBA_PAL_RED(x) (((x) >> 0) & 0x1F)
-#define GET_GBA_PAL_GREEN(x) (((x) >> 5) & 0x1F)
-#define GET_GBA_PAL_BLUE(x) (((x) >> 10) & 0x1F)
-
-#define SET_GBA_PAL(r, g, b) (((b) << 10) | ((g) << 5) | (r))
-
-#define UPCONVERT_BIT_DEPTH(x) (((x) * 255) / 31)
-
-#define DOWNCONVERT_BIT_DEPTH(x) ((x) / 8)
-
-static void AdvanceMetatilePosition(int *subTileX, int *subTileY, int *metatileX, int *metatileY, int metatilesWide, int metatileWidth, int metatileHeight)
-{
- (*subTileX)++;
- if (*subTileX == metatileWidth) {
- *subTileX = 0;
- (*subTileY)++;
- if (*subTileY == metatileHeight) {
- *subTileY = 0;
- (*metatileX)++;
- if (*metatileX == metatilesWide) {
- *metatileX = 0;
- (*metatileY)++;
- }
- }
- }
-}
-
-static void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors)
-{
- int subTileX = 0;
- int subTileY = 0;
- int metatileX = 0;
- int metatileY = 0;
- int pitch = metatilesWide * metatileWidth;
-
- for (int i = 0; i < numTiles; i++) {
- for (int j = 0; j < 8; j++) {
- int destY = (metatileY * metatileHeight + subTileY) * 8 + j;
- int destX = metatileX * metatileWidth + subTileX;
- unsigned char srcPixelOctet = *src++;
- unsigned char *destPixelOctet = &dest[destY * pitch + destX];
-
- for (int k = 0; k < 8; k++) {
- *destPixelOctet <<= 1;
- *destPixelOctet |= (srcPixelOctet & 1) ^ invertColors;
- srcPixelOctet >>= 1;
- }
- }
-
- AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight);
- }
-}
-
-static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors)
-{
- int subTileX = 0;
- int subTileY = 0;
- int metatileX = 0;
- int metatileY = 0;
- int pitch = (metatilesWide * metatileWidth) * 4;
-
- for (int i = 0; i < numTiles; i++) {
- for (int j = 0; j < 8; j++) {
- int destY = (metatileY * metatileHeight + subTileY) * 8 + j;
-
- for (int k = 0; k < 4; k++) {
- int destX = (metatileX * metatileWidth + subTileX) * 4 + k;
- unsigned char srcPixelPair = *src++;
- unsigned char leftPixel = srcPixelPair & 0xF;
- unsigned char rightPixel = srcPixelPair >> 4;
-
- if (invertColors) {
- leftPixel = 15 - leftPixel;
- rightPixel = 15 - rightPixel;
- }
-
- dest[destY * pitch + destX] = (leftPixel << 4) | rightPixel;
- }
- }
-
- AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight);
- }
-}
-
-static void ConvertFromTiles8Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors)
-{
- int subTileX = 0;
- int subTileY = 0;
- int metatileX = 0;
- int metatileY = 0;
- int pitch = (metatilesWide * metatileWidth) * 8;
-
- for (int i = 0; i < numTiles; i++) {
- for (int j = 0; j < 8; j++) {
- int destY = (metatileY * metatileHeight + subTileY) * 8 + j;
-
- for (int k = 0; k < 8; k++) {
- int destX = (metatileX * metatileWidth + subTileX) * 8 + k;
- unsigned char srcPixel = *src++;
-
- if (invertColors)
- srcPixel = 255 - srcPixel;
-
- dest[destY * pitch + destX] = srcPixel;
- }
- }
-
- AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight);
- }
-}
-
-static void ConvertToTiles1Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors)
-{
- int subTileX = 0;
- int subTileY = 0;
- int metatileX = 0;
- int metatileY = 0;
- int pitch = metatilesWide * metatileWidth;
-
- for (int i = 0; i < numTiles; i++) {
- for (int j = 0; j < 8; j++) {
- int srcY = (metatileY * metatileHeight + subTileY) * 8 + j;
- int srcX = metatileX * metatileWidth + subTileX;
- unsigned char srcPixelOctet = src[srcY * pitch + srcX];
- unsigned char *destPixelOctet = dest++;
-
- for (int k = 0; k < 8; k++) {
- *destPixelOctet <<= 1;
- *destPixelOctet |= (srcPixelOctet & 1) ^ invertColors;
- srcPixelOctet >>= 1;
- }
- }
-
- AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight);
- }
-}
-
-static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors)
-{
- int subTileX = 0;
- int subTileY = 0;
- int metatileX = 0;
- int metatileY = 0;
- int pitch = (metatilesWide * metatileWidth) * 4;
-
- for (int i = 0; i < numTiles; i++) {
- for (int j = 0; j < 8; j++) {
- int srcY = (metatileY * metatileHeight + subTileY) * 8 + j;
-
- for (int k = 0; k < 4; k++) {
- int srcX = (metatileX * metatileWidth + subTileX) * 4 + k;
- unsigned char srcPixelPair = src[srcY * pitch + srcX];
- unsigned char leftPixel = srcPixelPair >> 4;
- unsigned char rightPixel = srcPixelPair & 0xF;
-
- if (invertColors) {
- leftPixel = 15 - leftPixel;
- rightPixel = 15 - rightPixel;
- }
-
- *dest++ = (rightPixel << 4) | leftPixel;
- }
- }
-
- AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight);
- }
-}
-
-static void ConvertToTiles8Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors)
-{
- int subTileX = 0;
- int subTileY = 0;
- int metatileX = 0;
- int metatileY = 0;
- int pitch = (metatilesWide * metatileWidth) * 8;
-
- for (int i = 0; i < numTiles; i++) {
- for (int j = 0; j < 8; j++) {
- int srcY = (metatileY * metatileHeight + subTileY) * 8 + j;
-
- for (int k = 0; k < 8; k++) {
- int srcX = (metatileX * metatileWidth + subTileX) * 8 + k;
- unsigned char srcPixel = src[srcY * pitch + srcX];
-
- if (invertColors)
- srcPixel = 255 - srcPixel;
-
- *dest++ = srcPixel;
- }
- }
-
- AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight);
- }
-}
-
-void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors)
-{
- int tileSize = bitDepth * 8;
-
- int fileSize;
- unsigned char *buffer = ReadWholeFile(path, &fileSize);
-
- int numTiles = fileSize / tileSize;
-
- int tilesHeight = (numTiles + tilesWidth - 1) / tilesWidth;
-
- if (tilesWidth % metatileWidth != 0)
- FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth);
-
- if (tilesHeight % metatileHeight != 0)
- FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight);
-
- image->width = tilesWidth * 8;
- image->height = tilesHeight * 8;
- image->bitDepth = bitDepth;
- image->pixels = calloc(tilesWidth * tilesHeight, tileSize);
-
- if (image->pixels == NULL)
- FATAL_ERROR("Failed to allocate memory for pixels.\n");
-
- int metatilesWide = tilesWidth / metatileWidth;
-
- switch (bitDepth) {
- case 1:
- ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
- break;
- case 4:
- ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
- break;
- case 8:
- ConvertFromTiles8Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
- break;
- }
-
- free(buffer);
-}
-
-void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors)
-{
- int tileSize = bitDepth * 8;
-
- if (image->width % 8 != 0)
- FATAL_ERROR("The width in pixels (%d) isn't a multiple of 8.\n", image->width);
-
- if (image->height % 8 != 0)
- FATAL_ERROR("The height in pixels (%d) isn't a multiple of 8.\n", image->height);
-
- int tilesWidth = image->width / 8;
- int tilesHeight = image->height / 8;
-
- if (tilesWidth % metatileWidth != 0)
- FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth);
-
- if (tilesHeight % metatileHeight != 0)
- FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight);
-
- int maxNumTiles = tilesWidth * tilesHeight;
-
- if (numTiles == 0)
- numTiles = maxNumTiles;
- else if (numTiles > maxNumTiles)
- FATAL_ERROR("The specified number of tiles (%d) is greater than the maximum possible value (%d).\n", numTiles, maxNumTiles);
-
- int bufferSize = numTiles * tileSize;
- unsigned char *buffer = malloc(bufferSize);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for pixels.\n");
-
- int metatilesWide = tilesWidth / metatileWidth;
-
- switch (bitDepth) {
- case 1:
- ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
- break;
- case 4:
- ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
- break;
- case 8:
- ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
- break;
- }
-
- WriteWholeFile(path, buffer, bufferSize);
-
- free(buffer);
-}
-
-void FreeImage(struct Image *image)
-{
- free(image->pixels);
- image->pixels = NULL;
-}
-
-void ReadGbaPalette(char *path, struct Palette *palette)
-{
- int fileSize;
- unsigned char *data = ReadWholeFile(path, &fileSize);
-
- if (fileSize % 2 != 0)
- FATAL_ERROR("The file size (%d) is not a multiple of 2.\n", fileSize);
-
- palette->numColors = fileSize / 2;
-
- for (int i = 0; i < palette->numColors; i++) {
- uint16_t paletteEntry = (data[i * 2 + 1] << 8) | data[i * 2];
- palette->colors[i].red = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_RED(paletteEntry));
- palette->colors[i].green = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_GREEN(paletteEntry));
- palette->colors[i].blue = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_BLUE(paletteEntry));
- }
-
- free(data);
-}
-
-void WriteGbaPalette(char *path, struct Palette *palette)
-{
- FILE *fp = fopen(path, "wb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for writing.\n", path);
-
- for (int i = 0; i < palette->numColors; i++) {
- unsigned char red = DOWNCONVERT_BIT_DEPTH(palette->colors[i].red);
- unsigned char green = DOWNCONVERT_BIT_DEPTH(palette->colors[i].green);
- unsigned char blue = DOWNCONVERT_BIT_DEPTH(palette->colors[i].blue);
-
- uint16_t paletteEntry = SET_GBA_PAL(red, green, blue);
-
- fputc(paletteEntry & 0xFF, fp);
- fputc(paletteEntry >> 8, fp);
- }
-
- fclose(fp);
-}
diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h
deleted file mode 100644
index 5355ced8568b..000000000000
--- a/tools/gbagfx/gfx.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef GFX_H
-#define GFX_H
-
-#include
-#include
-
-struct Color {
- unsigned char red;
- unsigned char green;
- unsigned char blue;
-};
-
-struct Palette {
- struct Color colors[256];
- int numColors;
-};
-
-struct Image {
- int width;
- int height;
- int bitDepth;
- unsigned char *pixels;
- bool hasPalette;
- struct Palette palette;
- bool hasTransparency;
-};
-
-void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors);
-void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors);
-void FreeImage(struct Image *image);
-void ReadGbaPalette(char *path, struct Palette *palette);
-void WriteGbaPalette(char *path, struct Palette *palette);
-
-#endif // GFX_H
diff --git a/tools/gbagfx/global.h b/tools/gbagfx/global.h
deleted file mode 100644
index 65dd351d21d2..000000000000
--- a/tools/gbagfx/global.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef GLOBAL_H
-#define GLOBAL_H
-
-#include
-#include
-
-#ifdef _MSC_VER
-
-#define FATAL_ERROR(format, ...) \
-do { \
- fprintf(stderr, format, __VA_ARGS__); \
- exit(1); \
-} while (0)
-
-#define UNUSED
-
-#else
-
-#define FATAL_ERROR(format, ...) \
-do { \
- fprintf(stderr, format, ##__VA_ARGS__); \
- exit(1); \
-} while (0)
-
-#define UNUSED __attribute__((__unused__))
-
-#endif // _MSC_VER
-
-#endif // GLOBAL_H
diff --git a/tools/gbagfx/huff.c b/tools/gbagfx/huff.c
deleted file mode 100644
index 143ed79be849..000000000000
--- a/tools/gbagfx/huff.c
+++ /dev/null
@@ -1,398 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include "global.h"
-#include "huff.h"
-
-static int cmp_tree(const void * a0, const void * b0) {
- return ((struct HuffData *)a0)->value - ((struct HuffData *)b0)->value;
-}
-
-typedef int (*cmpfun)(const void *, const void *);
-
-int msort_r(void * data, size_t count, size_t size, cmpfun cmp, void * buffer) {
- /*
- * Out-of-place mergesort (stable sort)
- * Returns 1 on success, 0 on failure
- */
- void * leftPtr;
- void * rightPtr;
- void * leftEnd;
- void * rightEnd;
- int i;
-
- switch (count) {
- case 0:
- // Should never be here
- return 0;
-
- case 1:
- // Nothing to do here
- break;
-
- case 2:
- // Swap the two entries if the right one compares higher.
- if (cmp(data, data + size) > 0) {
- memcpy(buffer, data, size);
- memcpy(data, data + size, size);
- memcpy(data + size, buffer, size);
- }
- break;
- default:
- // Merge sort out-of-place.
- leftPtr = data;
- leftEnd = rightPtr = data + count / 2 * size;
- rightEnd = data + count * size;
-
- // Sort the left half
- if (!msort_r(leftPtr, count / 2, size, cmp, buffer))
- return 0;
-
- // Sort the right half
- if (!msort_r(rightPtr, count / 2 + (count & 1), size, cmp, buffer))
- return 0;
-
- // Merge the sorted halves out of place
- i = 0;
- do {
- if (cmp(leftPtr, rightPtr) <= 0) {
- memcpy(buffer + i * size, leftPtr, size);
- leftPtr += size;
- } else {
- memcpy(buffer + i * size, rightPtr, size);
- rightPtr += size;
- }
-
- } while (++i < count && leftPtr < leftEnd && rightPtr < rightEnd);
-
- // Copy the remainder
- if (i < count) {
- if (leftPtr < leftEnd) {
- memcpy(buffer + i * size, leftPtr, leftEnd - leftPtr);
- }
- else {
- memcpy(buffer + i * size, rightPtr, rightEnd - rightPtr);
- }
- }
-
- // Copy the merged data back
- memcpy(data, buffer, count * size);
- break;
- }
-
- return 1;
-}
-
-int msort(void * data, size_t count, size_t size, cmpfun cmp) {
- void * buffer = malloc(count * size);
- if (buffer == NULL) return 0;
- int result = msort_r(data, count, size, cmp, buffer);
- free(buffer);
- return result;
-}
-
-static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, struct BitEncoding * encoding) {
- /*
- * The example used to guide this function encodes the tree in a
- * breadth-first manner. We attempt to emulate that here.
- */
-
- int i, j, k;
-
- // There are (2 * nitems - 1) nodes in the binary tree. Allocate that.
- HuffNode_t * traversal = calloc(2 * nitems - 1, sizeof(HuffNode_t));
- if (traversal == NULL)
- FATAL_ERROR("Fatal error while compressing Huff file.\n");
-
- // The first node is the root of the tree.
- traversal[0] = *tree;
- i = 1;
-
- // Copy the tree into a breadth-first ordering using brute force.
- for (int depth = 1; i < 2 * nitems - 1; depth++) {
- // Consider every possible path up to the current depth.
- for (j = 0; i < 2 * nitems - 1 && j < 1 << depth; j++) {
- // The index of the path is used to encode the path itself.
- // Start from the most significant relevant bit and work our way down.
- // Keep track of the current and previous nodes.
- HuffNode_t * currNode = traversal;
- HuffNode_t * parent = NULL;
- for (k = 0; k < depth; k++) {
- if (currNode->header.isLeaf)
- break;
- parent = currNode;
- if ((j >> (depth - k - 1)) & 1)
- currNode = currNode->branch.right;
- else
- currNode = currNode->branch.left;
- }
- // Check that the length of the current path equals the current depth.
- if (k == depth) {
- // Make sure we can encode the current branch.
- // Bail here if we cannot.
- // This is only applicable for 8-bit encodings.
- if (traversal + i - parent > 128)
- FATAL_ERROR("Fatal error while compressing Huff file: unable to encode binary tree.\n");
- // Copy the current node, and update its parent.
- traversal[i] = *currNode;
- if (parent != NULL) {
- if ((j & 1) == 1)
- parent->branch.right = traversal + i;
- else
- parent->branch.left = traversal + i;
- }
- // Encode the path through the tree in the lookup table
- if (traversal[i].header.isLeaf) {
- encoding[traversal[i].leaf.key].nbits = depth;
- encoding[traversal[i].leaf.key].bitstring = j;
- }
- i++;
- }
- }
- }
-
- // Encode the size of the tree.
- // This is used by the decompressor to skip the tree.
- dest[4] = nitems - 1;
-
- // Encode each node in the tree.
- for (i = 0; i < 2 * nitems - 1; i++) {
- HuffNode_t * currNode = traversal + i;
- if (currNode->header.isLeaf) {
- dest[5 + i] = traversal[i].leaf.key;
- } else {
- dest[5 + i] = (((currNode->branch.right - traversal - i) / 2) - 1);
- if (currNode->branch.left->header.isLeaf)
- dest[5 + i] |= 0x80;
- if (currNode->branch.right->header.isLeaf)
- dest[5 + i] |= 0x40;
- }
- }
-
- free(traversal);
-}
-
-static inline void write_32_le(unsigned char * dest, int * destPos, uint32_t * buff, int * buffPos) {
- dest[*destPos] = *buff;
- dest[*destPos + 1] = *buff >> 8;
- dest[*destPos + 2] = *buff >> 16;
- dest[*destPos + 3] = *buff >> 24;
- *destPos += 4;
- *buff = 0;
- *buffPos = 0;
-}
-
-static inline void read_32_le(unsigned char * src, int * srcPos, uint32_t * buff) {
- uint32_t tmp = src[*srcPos];
- tmp |= src[*srcPos + 1] << 8;
- tmp |= src[*srcPos + 2] << 16;
- tmp |= src[*srcPos + 3] << 24;
- *srcPos += 4;
- *buff = tmp;
-}
-
-static void write_bits(unsigned char * dest, int * destPos, struct BitEncoding * encoding, int value, uint32_t * buff, int * buffBits) {
- int nbits = encoding[value].nbits;
- uint32_t bitstring = encoding[value].bitstring;
-
- if (*buffBits + nbits >= 32) {
- int diff = *buffBits + nbits - 32;
- *buff <<= nbits - diff;
- *buff |= bitstring >> diff;
- bitstring &= ~(1 << diff);
- nbits = diff;
- write_32_le(dest, destPos, buff, buffBits);
- }
- if (nbits != 0) {
- *buff <<= nbits;
- *buff |= bitstring;
- *buffBits += nbits;
- }
-}
-
-/*
-=======================================
-MAIN COMPRESSION/DECOMPRESSION ROUTINES
-=======================================
- */
-
-unsigned char * HuffCompress(unsigned char * src, int srcSize, int * compressedSize_p, int bitDepth) {
- if (srcSize <= 0)
- goto fail;
-
- int worstCaseDestSize = 4 + (2 << bitDepth) + srcSize * 3;
-
- unsigned char *dest = malloc(worstCaseDestSize);
- if (dest == NULL)
- goto fail;
-
- int nitems = 1 << bitDepth;
-
- HuffNode_t * freqs = calloc(nitems, sizeof(HuffNode_t));
- if (freqs == NULL)
- goto fail;
-
- struct BitEncoding * encoding = calloc(nitems, sizeof(struct BitEncoding));
- if (encoding == NULL)
- goto fail;
-
- // Set up the frequencies table. This will inform the tree.
- for (int i = 0; i < nitems; i++) {
- freqs[i].header.isLeaf = 1;
- freqs[i].header.value = 0;
- freqs[i].leaf.key = i;
- }
-
- // Count each nybble or byte.
- for (int i = 0; i < srcSize; i++) {
- if (bitDepth == 8) {
- freqs[src[i]].header.value++;
- } else {
- freqs[src[i] >> 4].header.value++;
- freqs[src[i] & 0xF].header.value++;
- }
- }
-
-#ifdef DEBUG
- for (int i = 0; i < nitems; i++) {
- fprintf(stderr, "%d: %d\n", i, freqs[i].header.value);
- }
-#endif // DEBUG
-
- // Sort the frequency table.
- if (!msort(freqs, nitems, sizeof(HuffNode_t), cmp_tree))
- goto fail;
-
- // Prune zero-frequency values.
- for (int i = 0; i < nitems; i++) {
- if (freqs[i].header.value != 0) {
- if (i > 0) {
- for (int j = i; j < nitems; j++) {
- freqs[j - i] = freqs[j];
- }
- nitems -= i;
- }
- break;
- }
- // This should never happen:
- if (i == nitems - 1)
- goto fail;
- }
-
- HuffNode_t * tree = calloc(nitems * 2 - 1, sizeof(HuffNode_t));
- if (tree == NULL)
- goto fail;
-
- // Iteratively collapse the two least frequent nodes.
- HuffNode_t * endptr = freqs + nitems - 2;
-
- for (int i = 0; i < nitems - 1; i++) {
- HuffNode_t * left = freqs;
- HuffNode_t * right = freqs + 1;
- tree[i * 2] = *right;
- tree[i * 2 + 1] = *left;
- for (int j = 0; j < nitems - i - 2; j++)
- freqs[j] = freqs[j + 2];
- endptr->header.isLeaf = 0;
- endptr->header.value = tree[i * 2].header.value + tree[i * 2 + 1].header.value;
- endptr->branch.left = tree + i * 2;
- endptr->branch.right = tree + i * 2 + 1;
- endptr--;
- if (i < nitems - 2 && !msort(freqs, nitems - i - 1, sizeof(HuffNode_t), cmp_tree))
- goto fail;
- }
-
- // Write the tree breadth-first, and create the path lookup table.
- write_tree(dest, freqs, nitems, encoding);
-
- free(tree);
- free(freqs);
-
- // Encode the data itself.
- int destPos = 4 + nitems * 2;
- uint32_t destBuf = 0;
- uint32_t srcBuf = 0;
- int destBitPos = 0;
-
- for (int srcPos = 0; srcPos < srcSize;) {
- read_32_le(src, &srcPos, &srcBuf);
- for (int i = 0; i < 32 / bitDepth; i++) {
- write_bits(dest, &destPos, encoding, srcBuf & (0xFF >> (8 - bitDepth)), &destBuf, &destBitPos);
- srcBuf >>= bitDepth;
- }
- }
-
- if (destBitPos != 0) {
- write_32_le(dest, &destPos, &destBuf, &destBitPos);
- }
-
- free(encoding);
-
- // Write the header.
- dest[0] = bitDepth | 0x20;
- dest[1] = srcSize;
- dest[2] = srcSize >> 8;
- dest[3] = srcSize >> 16;
- *compressedSize_p = (destPos + 3) & ~3;
- return dest;
-
-fail:
- FATAL_ERROR("Fatal error while compressing Huff file.\n");
-}
-
-unsigned char * HuffDecompress(unsigned char * src, int srcSize, int * uncompressedSize_p) {
- if (srcSize < 4)
- goto fail;
-
- int bitDepth = *src & 15;
- if (bitDepth != 4 && bitDepth != 8)
- goto fail;
-
- int destSize = (src[3] << 16) | (src[2] << 8) | src[1];
-
- unsigned char *dest = malloc(destSize);
-
- if (dest == NULL)
- goto fail;
-
- int treePos = 5;
- int treeSize = (src[4] + 1) * 2;
- int srcPos = 4 + treeSize;
- int destPos = 0;
- int curValPos = 0;
- uint32_t destTmp = 0;
- uint32_t window;
-
- for (;;)
- {
- if (srcPos >= srcSize)
- goto fail;
- read_32_le(src, &srcPos, &window);
- for (int i = 0; i < 32; i++) {
- int curBit = (window >> 31) & 1;
- unsigned char treeView = src[treePos];
- bool isLeaf = ((treeView << curBit) & 0x80) != 0;
- treePos &= ~1; // align
- treePos += ((treeView & 0x3F) + 1) * 2 + curBit;
- if (isLeaf) {
- destTmp >>= bitDepth;
- destTmp |= (src[treePos] << (32 - bitDepth));
- curValPos++;
- if (curValPos == 32 / bitDepth) {
- write_32_le(dest, &destPos, &destTmp, &curValPos);
- if (destPos == destSize) {
- *uncompressedSize_p = destSize;
- return dest;
- }
- }
- treePos = 5;
- }
- window <<= 1;
- }
- }
-
-fail:
- FATAL_ERROR("Fatal error while decompressing Huff file.\n");
-}
diff --git a/tools/gbagfx/huff.h b/tools/gbagfx/huff.h
deleted file mode 100644
index 6002fe954aeb..000000000000
--- a/tools/gbagfx/huff.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef HUFF_H
-#define HUFF_H
-
-union HuffNode;
-
-struct HuffData {
- unsigned value:31;
- unsigned isLeaf:1;
-};
-
-struct HuffLeaf {
- struct HuffData header;
- unsigned char key;
-};
-
-struct HuffBranch {
- struct HuffData header;
- union HuffNode * left;
- union HuffNode * right;
-};
-
-union HuffNode {
- struct HuffData header;
- struct HuffLeaf leaf;
- struct HuffBranch branch;
-};
-
-typedef union HuffNode HuffNode_t;
-
-struct BitEncoding {
- unsigned long long nbits:6;
- unsigned long long bitstring:58;
-};
-
-unsigned char * HuffCompress(unsigned char * buffer, int srcSize, int * compressedSize_p, int bitDepth);
-unsigned char * HuffDecompress(unsigned char * buffer, int srcSize, int * uncompressedSize_p);
-
-#endif //HUFF_H
diff --git a/tools/gbagfx/jasc_pal.c b/tools/gbagfx/jasc_pal.c
deleted file mode 100644
index e5ba9c3c2f25..000000000000
--- a/tools/gbagfx/jasc_pal.c
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#include
-#include
-#include "global.h"
-#include "gfx.h"
-#include "util.h"
-
-// Read/write Paint Shop Pro palette files.
-
-// Format of a Paint Shop Pro palette file, line by line:
-// "JASC-PAL\r\n" (signature)
-// "0100\r\n" (version; seems to always be "0100")
-// "\r\n" (number of colors in decimal)
-//
-// times:
-// " \r\n" (color entry)
-//
-// Each color component is a decimal number from 0 to 255.
-// Examples:
-// Black - "0 0 0\r\n"
-// Blue - "0 0 255\r\n"
-// Brown - "150 75 0\r\n"
-
-#define MAX_LINE_LENGTH 11
-
-void ReadJascPaletteLine(FILE *fp, char *line)
-{
- int c;
- int length = 0;
-
- for (;;)
- {
- c = fgetc(fp);
-
- if (c == '\r')
- {
- c = fgetc(fp);
-
- if (c != '\n')
- FATAL_ERROR("CR line endings aren't supported.\n");
-
- line[length] = 0;
-
- return;
- }
-
- if (c == '\n')
- FATAL_ERROR("LF line endings aren't supported.\n");
-
- if (c == EOF)
- FATAL_ERROR("Unexpected EOF. No CRLF at end of file.\n");
-
- if (c == 0)
- FATAL_ERROR("NUL character in file.\n");
-
- if (length == MAX_LINE_LENGTH)
- {
- line[length] = 0;
- FATAL_ERROR("The line \"%s\" is too long.\n", line);
- }
-
- line[length++] = c;
- }
-}
-
-void ReadJascPalette(char *path, struct Palette *palette)
-{
- char line[MAX_LINE_LENGTH + 1];
-
- FILE *fp = fopen(path, "rb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open JASC-PAL file \"%s\" for reading.\n", path);
-
- ReadJascPaletteLine(fp, line);
-
- if (strcmp(line, "JASC-PAL") != 0)
- FATAL_ERROR("Invalid JASC-PAL signature.\n");
-
- ReadJascPaletteLine(fp, line);
-
- if (strcmp(line, "0100") != 0)
- FATAL_ERROR("Unsuported JASC-PAL version.\n");
-
- ReadJascPaletteLine(fp, line);
-
- if (!ParseNumber(line, NULL, 10, &palette->numColors))
- FATAL_ERROR("Failed to parse number of colors.\n");
-
- if (palette->numColors < 1 || palette->numColors > 256)
- FATAL_ERROR("%d is an invalid number of colors. The number of colors must be in the range [1, 256].\n", palette->numColors);
-
- for (int i = 0; i < palette->numColors; i++)
- {
- ReadJascPaletteLine(fp, line);
-
- char *s = line;
- char *end;
-
- int red;
- int green;
- int blue;
-
- if (!ParseNumber(s, &end, 10, &red))
- FATAL_ERROR("Failed to parse red color component.\n");
-
- s = end;
-
- if (*s != ' ')
- FATAL_ERROR("Expected a space after red color component.\n");
-
- s++;
-
- if (*s < '0' || *s > '9')
- FATAL_ERROR("Expected only a space between red and green color components.\n");
-
- if (!ParseNumber(s, &end, 10, &green))
- FATAL_ERROR("Failed to parse green color component.\n");
-
- s = end;
-
- if (*s != ' ')
- FATAL_ERROR("Expected a space after green color component.\n");
-
- s++;
-
- if (*s < '0' || *s > '9')
- FATAL_ERROR("Expected only a space between green and blue color components.\n");
-
- if (!ParseNumber(s, &end, 10, &blue))
- FATAL_ERROR("Failed to parse blue color component.\n");
-
- if (*end != 0)
- FATAL_ERROR("Garbage after blue color component.\n");
-
- if (red < 0 || red > 255)
- FATAL_ERROR("Red color component (%d) is outside the range [0, 255].\n", red);
-
- if (green < 0 || green > 255)
- FATAL_ERROR("Green color component (%d) is outside the range [0, 255].\n", green);
-
- if (blue < 0 || blue > 255)
- FATAL_ERROR("Blue color component (%d) is outside the range [0, 255].\n", blue);
-
- palette->colors[i].red = red;
- palette->colors[i].green = green;
- palette->colors[i].blue = blue;
- }
-
- if (fgetc(fp) != EOF)
- FATAL_ERROR("Garbage after color data.\n");
-
- fclose(fp);
-}
-
-void WriteJascPalette(char *path, struct Palette *palette)
-{
- FILE *fp = fopen(path, "wb");
-
- fputs("JASC-PAL\r\n", fp);
- fputs("0100\r\n", fp);
- fprintf(fp, "%d\r\n", palette->numColors);
-
- for (int i = 0; i < palette->numColors; i++)
- {
- struct Color *color = &palette->colors[i];
- fprintf(fp, "%d %d %d\r\n", color->red, color->green, color->blue);
- }
-
- fclose(fp);
-}
diff --git a/tools/gbagfx/jasc_pal.h b/tools/gbagfx/jasc_pal.h
deleted file mode 100644
index b60b31fc8d6f..000000000000
--- a/tools/gbagfx/jasc_pal.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef JASC_PAL_H
-#define JASC_PAL_H
-
-void ReadJascPalette(char *path, struct Palette *palette);
-void WriteJascPalette(char *path, struct Palette *palette);
-
-#endif // JASC_PAL_H
diff --git a/tools/gbagfx/lz.c b/tools/gbagfx/lz.c
deleted file mode 100644
index 97434ce506de..000000000000
--- a/tools/gbagfx/lz.c
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#include
-#include
-#include "global.h"
-#include "lz.h"
-
-unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize)
-{
- if (srcSize < 4)
- goto fail;
-
- int destSize = (src[3] << 16) | (src[2] << 8) | src[1];
-
- unsigned char *dest = malloc(destSize);
-
- if (dest == NULL)
- goto fail;
-
- int srcPos = 4;
- int destPos = 0;
-
- for (;;) {
- if (srcPos >= srcSize)
- goto fail;
-
- unsigned char flags = src[srcPos++];
-
- for (int i = 0; i < 8; i++) {
- if (flags & 0x80) {
- if (srcPos + 1 >= srcSize)
- goto fail;
-
- int blockSize = (src[srcPos] >> 4) + 3;
- int blockDistance = (((src[srcPos] & 0xF) << 8) | src[srcPos + 1]) + 1;
-
- srcPos += 2;
-
- int blockPos = destPos - blockDistance;
-
- // Some Ruby/Sapphire tilesets overflow.
- if (destPos + blockSize > destSize) {
- blockSize = destSize - destPos;
- fprintf(stderr, "Destination buffer overflow.\n");
- }
-
- if (blockPos < 0)
- goto fail;
-
- for (int j = 0; j < blockSize; j++)
- dest[destPos++] = dest[blockPos + j];
- } else {
- if (srcPos >= srcSize || destPos >= destSize)
- goto fail;
-
- dest[destPos++] = src[srcPos++];
- }
-
- if (destPos == destSize) {
- *uncompressedSize = destSize;
- return dest;
- }
-
- flags <<= 1;
- }
- }
-
-fail:
- FATAL_ERROR("Fatal error while decompressing LZ file.\n");
-}
-
-unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance)
-{
- if (srcSize <= 0)
- goto fail;
-
- int worstCaseDestSize = 4 + srcSize + ((srcSize + 7) / 8);
-
- // Round up to the next multiple of four.
- worstCaseDestSize = (worstCaseDestSize + 3) & ~3;
-
- unsigned char *dest = malloc(worstCaseDestSize);
-
- if (dest == NULL)
- goto fail;
-
- // header
- dest[0] = 0x10; // LZ compression type
- dest[1] = (unsigned char)srcSize;
- dest[2] = (unsigned char)(srcSize >> 8);
- dest[3] = (unsigned char)(srcSize >> 16);
-
- int srcPos = 0;
- int destPos = 4;
-
- for (;;) {
- unsigned char *flags = &dest[destPos++];
- *flags = 0;
-
- for (int i = 0; i < 8; i++) {
- int bestBlockDistance = 0;
- int bestBlockSize = 0;
- int blockDistance = minDistance;
-
- while (blockDistance <= srcPos && blockDistance <= 0x1000) {
- int blockStart = srcPos - blockDistance;
- int blockSize = 0;
-
- while (blockSize < 18
- && srcPos + blockSize < srcSize
- && src[blockStart + blockSize] == src[srcPos + blockSize])
- blockSize++;
-
- if (blockSize > bestBlockSize) {
- bestBlockDistance = blockDistance;
- bestBlockSize = blockSize;
-
- if (blockSize == 18)
- break;
- }
-
- blockDistance++;
- }
-
- if (bestBlockSize >= 3) {
- *flags |= (0x80 >> i);
- srcPos += bestBlockSize;
- bestBlockSize -= 3;
- bestBlockDistance--;
- dest[destPos++] = (bestBlockSize << 4) | ((unsigned int)bestBlockDistance >> 8);
- dest[destPos++] = (unsigned char)bestBlockDistance;
- } else {
- dest[destPos++] = src[srcPos++];
- }
-
- if (srcPos == srcSize) {
- // Pad to multiple of 4 bytes.
- int remainder = destPos % 4;
-
- if (remainder != 0) {
- for (int i = 0; i < 4 - remainder; i++)
- dest[destPos++] = 0;
- }
-
- *compressedSize = destPos;
- return dest;
- }
- }
- }
-
-fail:
- FATAL_ERROR("Fatal error while compressing LZ file.\n");
-}
diff --git a/tools/gbagfx/lz.h b/tools/gbagfx/lz.h
deleted file mode 100644
index 90f56b6430ab..000000000000
--- a/tools/gbagfx/lz.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef LZ_H
-#define LZ_H
-
-unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize);
-unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance);
-
-#endif // LZ_H
diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c
deleted file mode 100644
index aa0681fb6f1f..000000000000
--- a/tools/gbagfx/main.c
+++ /dev/null
@@ -1,537 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#include
-#include
-#include
-#include "global.h"
-#include "util.h"
-#include "options.h"
-#include "gfx.h"
-#include "convert_png.h"
-#include "jasc_pal.h"
-#include "lz.h"
-#include "rl.h"
-#include "font.h"
-#include "huff.h"
-
-struct CommandHandler
-{
- const char *inputFileExtension;
- const char *outputFileExtension;
- void(*function)(char *inputPath, char *outputPath, int argc, char **argv);
-};
-
-void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions *options)
-{
- struct Image image;
-
- if (options->paletteFilePath != NULL)
- {
- ReadGbaPalette(options->paletteFilePath, &image.palette);
- image.hasPalette = true;
- }
- else
- {
- image.hasPalette = false;
- }
-
- ReadImage(inputPath, options->width, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette);
-
- image.hasTransparency = options->hasTransparency;
-
- WritePng(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions *options)
-{
- struct Image image;
-
- image.bitDepth = options->bitDepth;
-
- ReadPng(inputPath, &image);
-
- WriteImage(outputPath, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette);
-
- FreeImage(&image);
-}
-
-void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **argv)
-{
- char *inputFileExtension = GetFileExtension(inputPath);
- struct GbaToPngOptions options;
- options.paletteFilePath = NULL;
- options.bitDepth = inputFileExtension[0] - '0';
- options.hasTransparency = false;
- options.width = 1;
- options.metatileWidth = 1;
- options.metatileHeight = 1;
-
- for (int i = 3; i < argc; i++)
- {
- char *option = argv[i];
-
- if (strcmp(option, "-palette") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No palette file path following \"-palette\".\n");
-
- i++;
-
- options.paletteFilePath = argv[i];
- }
- else if (strcmp(option, "-object") == 0)
- {
- options.hasTransparency = true;
- }
- else if (strcmp(option, "-width") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No width following \"-width\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &options.width))
- FATAL_ERROR("Failed to parse width.\n");
-
- if (options.width < 1)
- FATAL_ERROR("Width must be positive.\n");
- }
- else if (strcmp(option, "-mwidth") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No metatile width value following \"-mwidth\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &options.metatileWidth))
- FATAL_ERROR("Failed to parse metatile width.\n");
-
- if (options.metatileWidth < 1)
- FATAL_ERROR("metatile width must be positive.\n");
- }
- else if (strcmp(option, "-mheight") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No metatile height value following \"-mheight\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &options.metatileHeight))
- FATAL_ERROR("Failed to parse metatile height.\n");
-
- if (options.metatileHeight < 1)
- FATAL_ERROR("metatile height must be positive.\n");
- }
- else
- {
- FATAL_ERROR("Unrecognized option \"%s\".\n", option);
- }
- }
-
- if (options.metatileWidth > options.width)
- options.width = options.metatileWidth;
-
- ConvertGbaToPng(inputPath, outputPath, &options);
-}
-
-void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv)
-{
- char *outputFileExtension = GetFileExtension(outputPath);
- int bitDepth = outputFileExtension[0] - '0';
- struct PngToGbaOptions options;
- options.numTiles = 0;
- options.bitDepth = bitDepth;
- options.metatileWidth = 1;
- options.metatileHeight = 1;
-
- for (int i = 3; i < argc; i++)
- {
- char *option = argv[i];
-
- if (strcmp(option, "-num_tiles") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No number of tiles following \"-num_tiles\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &options.numTiles))
- FATAL_ERROR("Failed to parse number of tiles.\n");
-
- if (options.numTiles < 1)
- FATAL_ERROR("Number of tiles must be positive.\n");
- }
- else if (strcmp(option, "-mwidth") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No metatile width value following \"-mwidth\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &options.metatileWidth))
- FATAL_ERROR("Failed to parse metatile width.\n");
-
- if (options.metatileWidth < 1)
- FATAL_ERROR("metatile width must be positive.\n");
- }
- else if (strcmp(option, "-mheight") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No metatile height value following \"-mheight\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &options.metatileHeight))
- FATAL_ERROR("Failed to parse metatile height.\n");
-
- if (options.metatileHeight < 1)
- FATAL_ERROR("metatile height must be positive.\n");
- }
- else
- {
- FATAL_ERROR("Unrecognized option \"%s\".\n", option);
- }
- }
-
- ConvertPngToGba(inputPath, outputPath, &options);
-}
-
-void HandlePngToGbaPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Palette palette;
-
- ReadPngPalette(inputPath, &palette);
- WriteGbaPalette(outputPath, &palette);
-}
-
-void HandleGbaToJascPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Palette palette;
-
- ReadGbaPalette(inputPath, &palette);
- WriteJascPalette(outputPath, &palette);
-}
-
-void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc, char **argv)
-{
- int numColors = 0;
-
- for (int i = 3; i < argc; i++)
- {
- char *option = argv[i];
-
- if (strcmp(option, "-num_colors") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No number of colors following \"-num_colors\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &numColors))
- FATAL_ERROR("Failed to parse number of colors.\n");
-
- if (numColors < 1)
- FATAL_ERROR("Number of colors must be positive.\n");
- }
- else
- {
- FATAL_ERROR("Unrecognized option \"%s\".\n", option);
- }
- }
-
- struct Palette palette;
-
- ReadJascPalette(inputPath, &palette);
-
- if (numColors != 0)
- palette.numColors = numColors;
-
- WriteGbaPalette(outputPath, &palette);
-}
-
-void HandleLatinFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Image image;
-
- ReadLatinFont(inputPath, &image);
- WritePng(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void HandlePngToLatinFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Image image;
-
- image.bitDepth = 2;
-
- ReadPng(inputPath, &image);
- WriteLatinFont(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void HandleHalfwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Image image;
-
- ReadHalfwidthJapaneseFont(inputPath, &image);
- WritePng(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void HandlePngToHalfwidthJapaneseFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Image image;
-
- image.bitDepth = 2;
-
- ReadPng(inputPath, &image);
- WriteHalfwidthJapaneseFont(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void HandleFullwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Image image;
-
- ReadFullwidthJapaneseFont(inputPath, &image);
- WritePng(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void HandlePngToFullwidthJapaneseFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- struct Image image;
-
- image.bitDepth = 2;
-
- ReadPng(inputPath, &image);
- WriteFullwidthJapaneseFont(outputPath, &image);
-
- FreeImage(&image);
-}
-
-void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char **argv)
-{
- int overflowSize = 0;
- int minDistance = 2; // default, for compatibility with LZ77UnCompVram()
-
- for (int i = 3; i < argc; i++)
- {
- char *option = argv[i];
-
- if (strcmp(option, "-overflow") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No size following \"-overflow\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &overflowSize))
- FATAL_ERROR("Failed to parse overflow size.\n");
-
- if (overflowSize < 1)
- FATAL_ERROR("Overflow size must be positive.\n");
- }
- else if (strcmp(option, "-search") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No size following \"-overflow\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &minDistance))
- FATAL_ERROR("Failed to parse LZ min search distance.\n");
-
- if (minDistance < 1)
- FATAL_ERROR("LZ min search distance must be positive.\n");
- }
- else
- {
- FATAL_ERROR("Unrecognized option \"%s\".\n", option);
- }
- }
-
- // The overflow option allows a quirk in some of Ruby/Sapphire's tilesets
- // to be reproduced. It works by appending a number of zeros to the data
- // before compressing it and then amending the LZ header's size field to
- // reflect the expected size. This will cause an overflow when decompressing
- // the data.
-
- int fileSize;
- unsigned char *buffer = ReadWholeFileZeroPadded(inputPath, &fileSize, overflowSize);
-
- int compressedSize;
- unsigned char *compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize, minDistance);
-
- compressedData[1] = (unsigned char)fileSize;
- compressedData[2] = (unsigned char)(fileSize >> 8);
- compressedData[3] = (unsigned char)(fileSize >> 16);
-
- free(buffer);
-
- WriteWholeFile(outputPath, compressedData, compressedSize);
-
- free(compressedData);
-}
-
-void HandleLZDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
-
- int uncompressedSize;
- unsigned char *uncompressedData = LZDecompress(buffer, fileSize, &uncompressedSize);
-
- free(buffer);
-
- WriteWholeFile(outputPath, uncompressedData, uncompressedSize);
-
- free(uncompressedData);
-}
-
-void HandleRLCompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
-
- int compressedSize;
- unsigned char *compressedData = RLCompress(buffer, fileSize, &compressedSize);
-
- free(buffer);
-
- WriteWholeFile(outputPath, compressedData, compressedSize);
-
- free(compressedData);
-}
-
-void HandleRLDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
-
- int uncompressedSize;
- unsigned char *uncompressedData = RLDecompress(buffer, fileSize, &uncompressedSize);
-
- free(buffer);
-
- WriteWholeFile(outputPath, uncompressedData, uncompressedSize);
-
- free(uncompressedData);
-}
-
-void HandleHuffCompressCommand(char *inputPath, char *outputPath, int argc, char **argv)
-{
- int fileSize;
- int bitDepth = 4;
-
- for (int i = 3; i < argc; i++)
- {
- char *option = argv[i];
-
- if (strcmp(option, "-depth") == 0)
- {
- if (i + 1 >= argc)
- FATAL_ERROR("No size following \"-depth\".\n");
-
- i++;
-
- if (!ParseNumber(argv[i], NULL, 10, &bitDepth))
- FATAL_ERROR("Failed to parse bit depth.\n");
-
- if (bitDepth != 4 && bitDepth != 8)
- FATAL_ERROR("GBA only supports bit depth of 4 or 8.\n");
- }
- else
- {
- FATAL_ERROR("Unrecognized option \"%s\".\n", option);
- }
- }
-
- unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
-
- int compressedSize;
- unsigned char *compressedData = HuffCompress(buffer, fileSize, &compressedSize, bitDepth);
-
- free(buffer);
-
- WriteWholeFile(outputPath, compressedData, compressedSize);
-
- free(compressedData);
-}
-
-void HandleHuffDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED)
-{
- int fileSize;
- unsigned char *buffer = ReadWholeFile(inputPath, &fileSize);
-
- int uncompressedSize;
- unsigned char *uncompressedData = HuffDecompress(buffer, fileSize, &uncompressedSize);
-
- free(buffer);
-
- WriteWholeFile(outputPath, uncompressedData, uncompressedSize);
-
- free(uncompressedData);
-}
-
-int main(int argc, char **argv)
-{
- if (argc < 3)
- FATAL_ERROR("Usage: gbagfx INPUT_PATH OUTPUT_PATH [options...]\n");
-
- struct CommandHandler handlers[] =
- {
- { "1bpp", "png", HandleGbaToPngCommand },
- { "4bpp", "png", HandleGbaToPngCommand },
- { "8bpp", "png", HandleGbaToPngCommand },
- { "png", "1bpp", HandlePngToGbaCommand },
- { "png", "4bpp", HandlePngToGbaCommand },
- { "png", "8bpp", HandlePngToGbaCommand },
- { "png", "gbapal", HandlePngToGbaPaletteCommand },
- { "gbapal", "pal", HandleGbaToJascPaletteCommand },
- { "pal", "gbapal", HandleJascToGbaPaletteCommand },
- { "latfont", "png", HandleLatinFontToPngCommand },
- { "png", "latfont", HandlePngToLatinFontCommand },
- { "hwjpnfont", "png", HandleHalfwidthJapaneseFontToPngCommand },
- { "png", "hwjpnfont", HandlePngToHalfwidthJapaneseFontCommand },
- { "fwjpnfont", "png", HandleFullwidthJapaneseFontToPngCommand },
- { "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand },
- { NULL, "huff", HandleHuffCompressCommand },
- { NULL, "lz", HandleLZCompressCommand },
- { "huff", NULL, HandleHuffDecompressCommand },
- { "lz", NULL, HandleLZDecompressCommand },
- { NULL, "rl", HandleRLCompressCommand },
- { "rl", NULL, HandleRLDecompressCommand },
- { NULL, NULL, NULL }
- };
-
- char *inputPath = argv[1];
- char *outputPath = argv[2];
- char *inputFileExtension = GetFileExtension(inputPath);
- char *outputFileExtension = GetFileExtension(outputPath);
-
- if (inputFileExtension == NULL)
- FATAL_ERROR("Input file \"%s\" has no extension.\n", inputPath);
-
- if (outputFileExtension == NULL)
- FATAL_ERROR("Output file \"%s\" has no extension.\n", outputPath);
-
- for (int i = 0; handlers[i].function != NULL; i++)
- {
- if ((handlers[i].inputFileExtension == NULL || strcmp(handlers[i].inputFileExtension, inputFileExtension) == 0)
- && (handlers[i].outputFileExtension == NULL || strcmp(handlers[i].outputFileExtension, outputFileExtension) == 0))
- {
- handlers[i].function(inputPath, outputPath, argc, argv);
- return 0;
- }
- }
-
- FATAL_ERROR("Don't know how to convert \"%s\" to \"%s\".\n", inputPath, outputPath);
-}
diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h
deleted file mode 100644
index 2ff3967a4d09..000000000000
--- a/tools/gbagfx/options.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2018 huderlem
-
-#ifndef OPTIONS_H
-#define OPTIONS_H
-
-#include
-
-struct GbaToPngOptions {
- char *paletteFilePath;
- int bitDepth;
- bool hasTransparency;
- int width;
- int metatileWidth;
- int metatileHeight;
-};
-
-struct PngToGbaOptions {
- int numTiles;
- int bitDepth;
- int metatileWidth;
- int metatileHeight;
-};
-
-#endif // OPTIONS_H
diff --git a/tools/gbagfx/rl.c b/tools/gbagfx/rl.c
deleted file mode 100644
index 968c9347eb3e..000000000000
--- a/tools/gbagfx/rl.c
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright (c) 2016 YamaArashi
-
-#include
-#include
-#include "global.h"
-#include "rl.h"
-
-unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize)
-{
- if (srcSize < 4)
- goto fail;
-
- int destSize = (src[3] << 16) | (src[2] << 8) | src[1];
-
- unsigned char *dest = malloc(destSize);
-
- if (dest == NULL)
- goto fail;
-
- int srcPos = 4;
- int destPos = 0;
-
- for (;;)
- {
- if (srcPos >= srcSize)
- goto fail;
-
- unsigned char flags = src[srcPos++];
- bool compressed = ((flags & 0x80) != 0);
-
- if (compressed)
- {
- int length = (flags & 0x7F) + 3;
- unsigned char data = src[srcPos++];
-
- if (destPos + length > destSize)
- goto fail;
-
- for (int i = 0; i < length; i++)
- dest[destPos++] = data;
- }
- else
- {
- int length = (flags & 0x7F) + 1;
-
- if (destPos + length > destSize)
- goto fail;
-
- for (int i = 0; i < length; i++)
- dest[destPos++] = src[srcPos++];
- }
-
- if (destPos == destSize)
- {
- *uncompressedSize = destSize;
- return dest;
- }
- }
-
-fail:
- FATAL_ERROR("Fatal error while decompressing RL file.\n");
-}
-
-unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize)
-{
- if (srcSize <= 0)
- goto fail;
-
- int worstCaseDestSize = 4 + srcSize * 2;
-
- // Round up to the next multiple of four.
- worstCaseDestSize = (worstCaseDestSize + 3) & ~3;
-
- unsigned char *dest = malloc(worstCaseDestSize);
-
- if (dest == NULL)
- goto fail;
-
- // header
- dest[0] = 0x30; // RL compression type
- dest[1] = (unsigned char)srcSize;
- dest[2] = (unsigned char)(srcSize >> 8);
- dest[3] = (unsigned char)(srcSize >> 16);
-
- int srcPos = 0;
- int destPos = 4;
-
- for (;;)
- {
- bool compress = false;
- int uncompressedStart = srcPos;
- int uncompressedLength = 0;
-
- while (srcPos < srcSize && uncompressedLength < (0x7F + 1))
- {
- compress = (srcPos + 2 < srcSize && src[srcPos] == src[srcPos + 1] && src[srcPos] == src[srcPos + 2]);
-
- if (compress)
- break;
-
- srcPos++;
- uncompressedLength++;
- }
-
- if (uncompressedLength > 0)
- {
- dest[destPos++] = uncompressedLength - 1;
-
- for (int i = 0; i < uncompressedLength; i++)
- dest[destPos++] = src[uncompressedStart + i];
- }
-
- if (compress)
- {
- unsigned char data = src[srcPos];
- int compressedLength = 0;
-
- while (compressedLength < (0x7F + 3)
- && srcPos + compressedLength < srcSize
- && src[srcPos + compressedLength] == data)
- {
- compressedLength++;
- }
-
- dest[destPos++] = 0x80 | (compressedLength - 3);
- dest[destPos++] = data;
-
- srcPos += compressedLength;
- }
-
- if (srcPos == srcSize)
- {
- // Pad to multiple of 4 bytes.
- int remainder = destPos % 4;
-
- if (remainder != 0)
- {
- for (int i = 0; i < 4 - remainder; i++)
- dest[destPos++] = 0;
- }
-
- *compressedSize = destPos;
- return dest;
- }
- }
-
-fail:
- FATAL_ERROR("Fatal error while compressing RL file.\n");
-}
diff --git a/tools/gbagfx/rl.h b/tools/gbagfx/rl.h
deleted file mode 100644
index 02ad8d6d3be6..000000000000
--- a/tools/gbagfx/rl.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2016 YamaArashi
-
-#ifndef RL_H
-#define RL_H
-
-unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize);
-unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize);
-
-#endif // RL_H
diff --git a/tools/gbagfx/util.c b/tools/gbagfx/util.c
deleted file mode 100644
index 87abeb31c445..000000000000
--- a/tools/gbagfx/util.c
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include "global.h"
-#include "util.h"
-
-bool ParseNumber(char *s, char **end, int radix, int *intValue)
-{
- char *localEnd;
-
- if (end == NULL)
- end = &localEnd;
-
- errno = 0;
-
- const long longValue = strtol(s, end, radix);
-
- if (*end == s)
- return false; // not a number
-
- if ((longValue == LONG_MIN || longValue == LONG_MAX) && errno == ERANGE)
- return false;
-
- if (longValue > INT_MAX)
- return false;
-
- if (longValue < INT_MIN)
- return false;
-
- *intValue = (int)longValue;
-
- return true;
-}
-
-char *GetFileExtension(char *path)
-{
- char *extension = path;
-
- while (*extension != 0)
- extension++;
-
- while (extension > path && *extension != '.')
- extension--;
-
- if (extension == path)
- return NULL;
-
- extension++;
-
- if (*extension == 0)
- return NULL;
-
- return extension;
-}
-
-unsigned char *ReadWholeFile(char *path, int *size)
-{
- FILE *fp = fopen(path, "rb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
-
- fseek(fp, 0, SEEK_END);
-
- *size = ftell(fp);
-
- unsigned char *buffer = malloc(*size);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path);
-
- rewind(fp);
-
- if (fread(buffer, *size, 1, fp) != 1)
- FATAL_ERROR("Failed to read \"%s\".\n", path);
-
- fclose(fp);
-
- return buffer;
-}
-
-unsigned char *ReadWholeFileZeroPadded(char *path, int *size, int padAmount)
-{
- FILE *fp = fopen(path, "rb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for reading.\n", path);
-
- fseek(fp, 0, SEEK_END);
-
- *size = ftell(fp);
-
- unsigned char *buffer = calloc(*size + padAmount, 1);
-
- if (buffer == NULL)
- FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path);
-
- rewind(fp);
-
- if (fread(buffer, *size, 1, fp) != 1)
- FATAL_ERROR("Failed to read \"%s\".\n", path);
-
- fclose(fp);
-
- return buffer;
-}
-
-void WriteWholeFile(char *path, void *buffer, int bufferSize)
-{
- FILE *fp = fopen(path, "wb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for writing.\n", path);
-
- if (fwrite(buffer, bufferSize, 1, fp) != 1)
- FATAL_ERROR("Failed to write to \"%s\".\n", path);
-
- fclose(fp);
-}
diff --git a/tools/gbagfx/util.h b/tools/gbagfx/util.h
deleted file mode 100644
index 6d7a9c21ebe7..000000000000
--- a/tools/gbagfx/util.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2015 YamaArashi
-
-#ifndef UTIL_H
-#define UTIL_H
-
-#include
-
-bool ParseNumber(char *s, char **end, int radix, int *intValue);
-char *GetFileExtension(char *path);
-unsigned char *ReadWholeFile(char *path, int *size);
-unsigned char *ReadWholeFileZeroPadded(char *path, int *size, int padAmount);
-void WriteWholeFile(char *path, void *buffer, int bufferSize);
-
-#endif // UTIL_H
diff --git a/tools/jsonproc/.gitignore b/tools/jsonproc/.gitignore
deleted file mode 100755
index a613cf2d7482..000000000000
--- a/tools/jsonproc/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-jsonproc
diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile
deleted file mode 100755
index 47198b171ed8..000000000000
--- a/tools/jsonproc/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-CXX ?= g++
-
-CXXFLAGS := -Wall -std=c++11 -O2
-
-INCLUDES := -I .
-
-SRCS := jsonproc.cpp
-
-HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp
-
-.PHONY: all clean
-
-all: jsonproc
- @:
-
-jsonproc: $(SRCS) $(HEADERS)
- $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS)
-
-clean:
- $(RM) jsonproc jsonproc.exe
diff --git a/tools/jsonproc/inja.hpp b/tools/jsonproc/inja.hpp
deleted file mode 100755
index 3b726354603e..000000000000
--- a/tools/jsonproc/inja.hpp
+++ /dev/null
@@ -1,3396 +0,0 @@
-// MIT License
-
-// Copyright (c) 2018 lbersch
-
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-// SOFTWARE.
-
-
-// ---
-
-
-// Copyright (c) 2009-2018 FIRST
-// All rights reserved.
-
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the FIRST nor the
-// names of its contributors may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-
-// THIS SOFTWARE IS PROVIDED BY FIRST AND CONTRIBUTORS``AS IS'' AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-// WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR
-// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef PANTOR_INJA_HPP
-#define PANTOR_INJA_HPP
-
-#include
-#include
-#include