Showing preview only (2,370K chars total). Download the full file or copy to clipboard to get everything.
Repository: AmigaPorts/ACE
Branch: main
Commit: 87866470044e
Files: 226
Total size: 2.2 MB
Directory structure:
gitextract_3xxvfcyb/
├── .codedocs
├── .gitattributes
├── .github/
│ ├── PULL_REQUEST_TEMPLATE/
│ │ ├── minor.md
│ │ ├── new_component.md
│ │ └── significant_changes.md
│ └── pull_request_template.md
├── .gitignore
├── CMakeLists.txt
├── Doxyfile
├── Jenkinsfile
├── LICENSE
├── README.md
├── cmake/
│ ├── CPM.cmake
│ ├── ace_config.cmake
│ ├── ace_functions.cmake
│ └── ace_install.cmake
├── docs/
│ ├── README.md
│ ├── contributing/
│ │ └── codestyle.md
│ ├── installing/
│ │ ├── ace.md
│ │ ├── compiler.md
│ │ └── tools.md
│ ├── palette-plt-v2-changes.md
│ ├── programming/
│ │ ├── ace_in_a_nutshell.md
│ │ ├── advancedsprites.md
│ │ ├── aga.md
│ │ ├── audio.md
│ │ ├── blit.md
│ │ ├── blit_undraw.md
│ │ ├── blits_with_mask.md
│ │ ├── fixed_point.md
│ │ ├── fonts.md
│ │ ├── hello_world.md
│ │ ├── loading_images.md
│ │ ├── moving_blits.md
│ │ ├── os.md
│ │ ├── palette.md
│ │ ├── res/
│ │ │ └── overworld.gpl
│ │ ├── sprites.md
│ │ ├── tilebuffer.md
│ │ ├── using_bobs.md
│ │ └── view.md
│ └── tools/
│ ├── audio_conv.md
│ ├── bitmap_conv.md
│ ├── font_conv.md
│ └── palette_conv.md
├── include/
│ ├── ace/
│ │ ├── generic/
│ │ │ ├── main.h
│ │ │ └── screen.h
│ │ ├── macros.h
│ │ ├── managers/
│ │ │ ├── advancedsprite.h
│ │ │ ├── blit.h
│ │ │ ├── bob.h
│ │ │ ├── copper.h
│ │ │ ├── game.h
│ │ │ ├── joy.h
│ │ │ ├── key.h
│ │ │ ├── log.h
│ │ │ ├── memory.h
│ │ │ ├── mouse.h
│ │ │ ├── ptplayer.h
│ │ │ ├── rand.h
│ │ │ ├── sprite.h
│ │ │ ├── state.h
│ │ │ ├── system.h
│ │ │ ├── timer.h
│ │ │ └── viewport/
│ │ │ ├── camera.h
│ │ │ ├── scrollbuffer.h
│ │ │ ├── simplebuffer.h
│ │ │ └── tilebuffer.h
│ │ ├── types.h
│ │ └── utils/
│ │ ├── bitmap.h
│ │ ├── bmframe.h
│ │ ├── chunky.h
│ │ ├── custom.h
│ │ ├── dir.h
│ │ ├── disk_file.h
│ │ ├── disk_file_private.h
│ │ ├── endian.h
│ │ ├── extview.h
│ │ ├── file.h
│ │ ├── font.h
│ │ ├── mini_std.h
│ │ ├── pak_file.h
│ │ ├── palette.h
│ │ ├── sprite.h
│ │ ├── string.h
│ │ └── tag.h
│ ├── fixmath/
│ │ ├── fix16.h
│ │ ├── fix16_trig_sin_lut.h
│ │ ├── fixmath.h
│ │ ├── fract32.h
│ │ ├── int64.h
│ │ └── uint32.h
│ └── mini_std/
│ ├── ctype.h
│ ├── errno.h
│ ├── printf.h
│ ├── sort_r.h
│ ├── stdint.h
│ ├── stdio.h
│ ├── stdlib.h
│ └── string.h
├── showcase/
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── res/
│ │ ├── amidb32.gpl
│ │ ├── blitToSmall.gpl
│ │ └── pong.gpl
│ └── src/
│ ├── game.c
│ ├── game.h
│ ├── menu/
│ │ ├── menu.c
│ │ ├── menu.h
│ │ ├── menulist.c
│ │ └── menulist.h
│ └── test/
│ ├── blit.c
│ ├── blit.h
│ ├── blitsmalldest.c
│ ├── blitsmalldest.h
│ ├── buffer_scroll.c
│ ├── buffer_scroll.h
│ ├── copper.c
│ ├── copper.h
│ ├── font.c
│ ├── font.h
│ ├── input.c
│ ├── input.h
│ ├── interleaved.c
│ ├── interleaved.h
│ ├── lines.c
│ ├── lines.h
│ ├── twister.c
│ └── twister.h
├── src/
│ ├── ace/
│ │ ├── managers/
│ │ │ ├── advancedsprite.c
│ │ │ ├── blit.c
│ │ │ ├── bob.c
│ │ │ ├── copper.c
│ │ │ ├── game.c
│ │ │ ├── joy.c
│ │ │ ├── key.c
│ │ │ ├── log.c
│ │ │ ├── memory.c
│ │ │ ├── mouse.c
│ │ │ ├── ptplayer.c
│ │ │ ├── rand.c
│ │ │ ├── sprite.c
│ │ │ ├── state.c
│ │ │ ├── system.c
│ │ │ ├── timer.c
│ │ │ └── viewport/
│ │ │ ├── camera.c
│ │ │ ├── scrollbuffer.c
│ │ │ ├── simplebuffer.c
│ │ │ └── tilebuffer.c
│ │ └── utils/
│ │ ├── bitmap.c
│ │ ├── bmframe.c
│ │ ├── chunky.c
│ │ ├── custom.c
│ │ ├── dir.c
│ │ ├── disk_file.c
│ │ ├── extview.c
│ │ ├── file.c
│ │ ├── font.c
│ │ ├── pak_file.c
│ │ ├── palette.c
│ │ ├── sprite.c
│ │ ├── string.c
│ │ └── tag.c
│ ├── fixmath/
│ │ ├── fix16.c
│ │ ├── fix16_exp.c
│ │ ├── fix16_sqrt.c
│ │ ├── fix16_str.c
│ │ ├── fix16_trig.c
│ │ ├── fract32.c
│ │ └── uint32.c
│ └── mini_std/
│ ├── ctype.c
│ ├── errno.c
│ ├── intrin.c
│ ├── printf.c
│ ├── stdio_file.c
│ ├── stdio_putchar.c
│ ├── stdlib.c
│ ├── string.c
│ └── strtoul.c
└── tools/
├── .gitignore
├── CMakeLists.txt
└── src/
├── audio_conv.cpp
├── bitmap_conv.cpp
├── bitmap_transform.cpp
├── common/
│ ├── bitmap.cpp
│ ├── bitmap.h
│ ├── compress.cpp
│ ├── compress.hpp
│ ├── endian.h
│ ├── exception.cpp
│ ├── exception.h
│ ├── flags/
│ │ ├── allow_flags.hpp
│ │ ├── flags.hpp
│ │ ├── flagsfwd.hpp
│ │ └── iterator.hpp
│ ├── fs.cpp
│ ├── fs.h
│ ├── glyph_set.cpp
│ ├── glyph_set.h
│ ├── jsmn.c
│ ├── jsmn.h
│ ├── json.c
│ ├── json.h
│ ├── lodepng.cpp
│ ├── lodepng.h
│ ├── logging.h
│ ├── math.h
│ ├── mod.cpp
│ ├── mod.h
│ ├── palette.cpp
│ ├── palette.h
│ ├── parse.h
│ ├── rgb.cpp
│ ├── rgb.h
│ ├── sfx.cpp
│ ├── sfx.h
│ ├── stream.cpp
│ ├── stream.h
│ ├── utf8.h
│ ├── wav.cpp
│ └── wav.h
├── font_conv.cpp
├── mod_tool.cpp
├── pak_tool.cpp
├── palette_conv.cpp
└── tileset_conv.cpp
================================================
FILE CONTENTS
================================================
================================================
FILE: .codedocs
================================================
# CodeDocs.xyz Configuration File
#
# Rename this example to '.codedocs' and put it in the root directory of your
# repository. This file is optional, documentation will still be generated
# without it using sensible defaults.
#---------------------------------------------------------------------------
# CodeDocs Configuration
#---------------------------------------------------------------------------
# Include the Doxygen configuration from another file.
# The file must be a relative path with respect to the root of the repository.
# If any of the options in this doxyfile include a path (ie, INPUT), these
# paths will be considered relative to the root of the repository, not the
# location of the DOXYFILE.
DOXYFILE = Doxyfile
# Specify external repository to link documentation with.
# This is similar to Doxygen's TAGFILES option, but will automatically link to
# tags of other repositories already using CodeDocs. List each repository to
# link with by giving its location in the form of owner/repository.
# For example:
# TAGLINKS = doxygen/doxygen CodeDocs/osg
# Note: these repositories must already be built on CodeDocs.
TAGLINKS =
================================================
FILE: .gitattributes
================================================
# Explicit list for language for file extension
*.h linguist-language=C
*.c linguist-language=C
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/minor.md
================================================
<!--- Use this only if you've made non-breaking improvements or bugfixes -->
## Description
<!--- Describe your changes in few words/sentences. If your pull request is related to an issue, please put `Closes #issueNumber` or `Related to #issueNumber` sentence here. -->
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/new_component.md
================================================
<!--- Use this only if you've created new ACE component (manager, util, etc.). Please provide a name of your newly created ACE component in title of pull request. -->
## Description
<!--- Describe your changes in few sentences. If your pull request is related to an issue, please put `Closes #issueNumber` or `Related to #issueNumber` sentence here. -->
## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
## ACE inclusion self-assessment
<!--- It's most likely that we'll include your code in ACE's codebase anyway, however please take a few minutes to answer following questions, which will allow making more conscious decision. -->
**Are there significantly different solutions to same problem? If so, is it the most common/generic one?**
<!--- Please answer here -->
**Are other solutions better and should ACE incorporate it instead of this change in the long run?**
<!--- Please answer here -->
**Is given functionality needed or nice to have for most of games? Is it used often in tandem with ACE?**
<!--- Please answer here -->
**Is it small/simple enough to not require much maintenance?**
<!--- Please answer here -->
**Is the functionality related to a core Amiga concept?**
<!--- Please answer here -->
**Is it entirely, or its ACE interface, written by core ACE team or frequent contributors?**
<!--- Please answer here -->
**Is it a building block or dependency for other parts of code? How much coupling there is between this part and rest of ACE code?**
<!--- Please answer here -->
**Does it allow making significantly better games at reasonable performance cost?**
<!--- Please answer here -->
**Is most of the code first-party?**
<!--- Please answer here -->
**Does it require additions/changes/removal of some other parts of ACE functionality/tooling for its use?**
<!--- Please answer here -->
## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Especially point out in which productions it was used so far -->
## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project.
- [ ] My change requires a change to existing documentation.
- [ ] My change requires a new chapter in documentation's tutorial.
- [ ] I have updated the documentation accordingly.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/significant_changes.md
================================================
<!--- Use this only if you've made significant changes to ACE's inner workings. -->
## Description
<!--- Describe your changes in few sentences. If your pull request is related to an issue, please put `Closes #issueNumber` or `Related to #issueNumber` sentence here. -->
## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Especially point out in which productions it was used so far -->
## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
================================================
FILE: .github/pull_request_template.md
================================================
Please go the the `Preview` tab and select the appropriate sub-template:
* [New component](?expand=1&template=new_component.md)
* [Significant changes](?expand=1&template=significant_changes.md)
* [Small and non-breaking improvements or bugfixes](?expand=1&template=minor.md)
================================================
FILE: .gitignore
================================================
.idea/
**/.vscode/*
ace\.code-workspace
build/
lib/
bin/
# Showcase
showcase/showcase
showcase/*.bmp
showcase/memory\.log
showcase/game\.log
# Tools — ignore built tool binaries and generated/test artifacts dropped next to sources
tools/*/*.exe
*.dasm
showcase/NUL
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.14.0)
project(ACE
LANGUAGES C
DESCRIPTION "Amiga C Engine"
HOMEPAGE_URL "https://github.com/AmigaPorts/ACE"
)
# TODO: replace with PROJECT_IS_TOP_LEVEL with cmake 3.21+
get_directory_property(hasParent PARENT_DIRECTORY)
if(hasParent)
# needed for helper fns
set(ACE_DIR ${CMAKE_CURRENT_LIST_DIR} PARENT_SCOPE)
else()
set(ACE_DIR ${CMAKE_CURRENT_LIST_DIR})
endif()
# Adhere to GNU filesystem layout conventions
include(GNUInstallDirs)
# Lowercase project name for binaries and packaging
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
# Version number in format X.Y.Z
set(VER_X 0)
set(VER_Y 0)
set(VER_Z 1)
set(VER_FULL "${VER_X}.${VER_Y}.${VER_Z}")
if(NOT AMIGA)
message(SEND_ERROR "[ACE] This project only compiles for Amiga")
endif()
file(GLOB_RECURSE SOURCES src/ace/*.c src/fixmath/*.c)
file(GLOB HEADERS_ACE include/ace/*.h)
file(GLOB HEADERS_ACE_GENERIC include/ace/generic/*.h)
file(GLOB HEADERS_ACE_UTILS include/ace/utils/*.h)
file(GLOB HEADERS_ACE_MANAGERS include/ace/managers/*.h)
file(GLOB HEADERS_ACE_MANAGERS_VP include/ace/managers/viewport/*.h)
file(GLOB HEADERS_FIXMATH include/fixmath/*.h)
set(
HEADERS
${HEADERS_ACE} ${HEADERS_ACE_GENERIC} ${HEADERS_ACE_UTILS}
${HEADERS_ACE_MANAGERS} ${HEADERS_ACE_MANAGERS_VP} ${HEADERS_FIXMATH}
)
include(cmake/ace_config.cmake)
# Linux/other UNIX get a lower-case binary name
set(TARGET_NAME ${PROJECT_NAME_LOWER})
add_library(${TARGET_NAME} ${ACE_LIBRARY_KIND} ${SOURCES} ${HEADERS})
set(CMAKE_C_STANDARD 11)
target_compile_definitions(${TARGET_NAME} PUBLIC AMIGA)
target_compile_options(${TARGET_NAME} PRIVATE $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:C>>:-Wall -Wextra>)
target_compile_options(${TARGET_NAME} PUBLIC $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:C>>:-fomit-frame-pointer>)
if(ACE_DEBUG)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_DEBUG)
endif()
if(ACE_DEBUG_UAE)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_DEBUG_UAE)
endif()
if(NOT ACE_BOB_WRAP_Y)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_NO_BOB_WRAP_Y)
endif()
if(ACE_BOB_PRISTINE_BUFFER)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_BOB_PRISTINE_BUFFER)
endif()
if(ACE_USE_ECS_FEATURES)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_USE_ECS_FEATURES)
endif()
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_TILEBUFFER_TILE_TYPE=${ACE_TILEBUFFER_TILE_TYPE})
if(ACE_SCROLLBUFFER_POT_BITMAP_HEIGHT)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_SCROLLBUFFER_POT_BITMAP_HEIGHT)
endif()
if(ACE_SCROLLBUFFER_ENABLE_SCROLL_X)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_SCROLLBUFFER_ENABLE_SCROLL_X)
endif()
if(ACE_SCROLLBUFFER_ENABLE_SCROLL_Y)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_SCROLLBUFFER_ENABLE_SCROLL_Y)
endif()
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_SCROLLBUFFER_X_MARGIN_SIZE=${ACE_SCROLLBUFFER_X_MARGIN_SIZE})
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_SCROLLBUFFER_Y_MARGIN_SIZE=${ACE_SCROLLBUFFER_Y_MARGIN_SIZE})
if(ACE_USE_AGA_FEATURES)
target_compile_definitions(${TARGET_NAME} PUBLIC ACE_USE_ECS_FEATURES ACE_USE_AGA_FEATURES)
endif()
if(M68K_COMPILER MATCHES "Bartman")
include(cmake/CPM.cmake)
CPMAddPackage(
NAME bartman_gcc_support
GITHUB_REPOSITORY AmigaPorts/bartman_gcc_support
GIT_TAG latest
)
# Workaround for nested OBJECT library
# https://stackoverflow.com/questions/71040175
target_link_libraries(${TARGET_NAME} PUBLIC bartman_gcc_support "$<TARGET_OBJECTS:bartman_gcc_support>")
endif()
if(M68K_COMPILER MATCHES "Bartman" OR USE_MINI_STD)
target_include_directories(${TARGET_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/include/mini_std)
file(GLOB SOURCES_MINI_STD src/mini_std/*.c)
file(GLOB HEADERS_MINI_STD include/mini_std/*.h)
target_compile_definitions(${TARGET_NAME} PRIVATE PRINTF_DISABLE_SUPPORT_FLOAT PRINTF_DISABLE_SUPPORT_LONG_LONG)
target_sources(${TARGET_NAME} PRIVATE ${SOURCES_MINI_STD} ${HEADERS_MINI_STD})
message(STATUS "[ACE] Using mini std")
endif()
target_include_directories(${TARGET_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/include)
include(cmake/ace_install.cmake)
include(cmake/ace_functions.cmake)
================================================
FILE: Doxyfile
================================================
# Doxyfile 1.8.11
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all text
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
# for the list of possible encodings.
# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME = "ACE"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER =
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF = "Amiga C Engine"
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.
PROJECT_LOGO =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY = doxygen_docs
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
# will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system.
# The default value is: NO.
CREATE_SUBDIRS = NO
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.
ALLOW_UNICODE_NAMES = YES
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
# Ukrainian and Vietnamese.
# The default value is: English.
OUTPUT_LANGUAGE = English
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.
ABBREVIATE_BRIEF =
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.
FULL_PATH_NAMES = YES
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH =
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.
JAVADOC_AUTOBRIEF = NO
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.
QT_AUTOBRIEF = NO
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
INHERIT_DOCS = YES
# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 2
# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:\n"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines.
ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.
OPTIMIZE_FOR_FORTRAN = NO
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.
OPTIMIZE_OUTPUT_VHDL = NO
# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
# Fortran. In the later case the parser tries to guess whether the code is fixed
# or free formatted code, this is the default for Fortran type files), VHDL. For
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.
EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.
MARKDOWN_SUPPORT = YES
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
AUTOLINK_SUPPORT = YES
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
# If one adds a struct or class to a group and this option is enabled, then also
# any nested class or struct is added to the same group. By default this option
# is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO.
GROUP_NESTED_COMPOUNDS = NO
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.
SUBGROUPING = YES
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.
INLINE_GROUPED_CLASSES = NO
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.
INLINE_SIMPLE_STRUCTS = NO
# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.
TYPEDEF_HIDES_STRUCT = NO
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
EXTRACT_ALL = NO
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE = NO
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
EXTRACT_PACKAGE = NO
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
# The default value is: system dependent.
CASE_SENSE_NAMES = YES
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES = NO
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.
HIDE_COMPOUND_REFERENCE= NO
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.
SHOW_INCLUDE_FILES = YES
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
SHOW_GROUPED_MEMB_INC = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.
FORCE_LOCAL_INCLUDES = NO
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
SORT_BRIEF_DOCS = NO
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.
SORT_MEMBERS_CTORS_1ST = YES
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.
STRICT_PROTO_MATCHING = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.
SHOW_FILES = YES
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.
FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.
WARNINGS = YES
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
# in a documented function, or documenting parameters that don't exist or using
# markup commands wrongly.
# The default value is: YES.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete
# parameter documentation, but not about the absence of documentation.
# The default value is: NO.
WARN_NO_PARAMDOC = NO
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered.
# The default value is: NO.
WARN_AS_ERROR = NO
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr).
WARN_LOGFILE =
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = ./src ./include
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
# possible encodings.
# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
FILE_PATTERNS =
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.
EXCLUDE = ./tools ./showcase
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS =
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS =
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
EXAMPLE_PATTERNS =
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).
IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
# <filter> <input-file>
#
# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.
FILTER_SOURCE_FILES = NO
# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
FILTER_SOURCE_PATTERNS =
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.
SOURCE_BROWSER = NO
# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.
INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# function all documented functions referencing it will be listed.
# The default value is: NO.
REFERENCED_BY_RELATION = NO
# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.
REFERENCES_RELATION = NO
# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.
VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
# cost of reduced performance. This can be particularly helpful with template
# rich C++ code for which doxygen's built-in parser lacks the necessary type
# information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse-libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.
ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
# while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_STYLESHEET =
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET =
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_HUE = 220
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use grayscales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_SAT = 100
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to YES can help to show when doxygen was last run and thus if the
# documentation is up to date.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_SECTIONS = NO
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_DOCSET = NO
# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_FEEDNAME = "Doxygen generated docs"
# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_BUNDLE_ID = org.doxygen.Project
# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_HTMLHELP = NO
# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_FILE =
# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the master .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
GENERATE_CHI = NO
# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_INDEX_ENCODING =
# The BINARY_TOC flag controls whether a binary table of contents is generated
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
TOC_EXPAND = NO
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_QHP = NO
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.
QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
# folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_VIRTUAL_FOLDER = doc
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_ECLIPSEHELP = NO
# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
ECLIPSE_DOC_ID = org.doxygen.Project
# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
DISABLE_INDEX = NO
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style
# sheet generated by doxygen has an example that shows how to put an image at
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
# the same information as the tab index, you could consider setting
# DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = NO
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.
ENUM_VALUES_PER_LINE = 4
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.
TREEVIEW_WIDTH = 250
# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
EXT_LINKS_IN_WINDOW = NO
# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_FORMAT = HTML-CSS
# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment.
# The default value is: http://cdn.mathjax.org/mathjax/latest.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_CODEFILE =
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use <access key> + S
# (what the <access key> is depends on the OS and browser, but it is typically
# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
# key> to jump into the search results window, the results can be navigated
# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
# to select a filter and <Enter> or <escape> to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
# and searching needs to be provided by external tools. See the section
# "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
SERVER_BASED_SEARCH = NO
# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH = NO
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHENGINE_URL =
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
# The default file is: searchdata.xml.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHDATA_FILE = searchdata.xml
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH_ID =
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
# to a relative location where the documentation can be found. The format is:
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.
GENERATE_LATEX = YES
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when enabling USE_PDFLATEX this option is only used for generating
# bitmaps for formulas in the HTML output, but not in the Makefile that is
# written to the output directory.
# The default file is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = a4
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
# by its name or with the correct syntax as to be used with the LaTeX
# \usepackage command. To get the times font for instance you can specify :
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
# To use the option intlimits with the amsmath package you can specify:
# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
# generated LaTeX document. The header should contain everything until the first
# chapter. If it is left blank doxygen will generate a standard header. See
# section "Doxygen usage" for information on how to let doxygen write the
# default header to a separate file.
#
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
# string, for the replacement values of the other commands the user is referred
# to HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER =
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
# generated LaTeX document. The footer should contain everything after the last
# chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer.
#
# Note: Only use a user-defined footer if you know what you are doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_FOOTER =
# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# LaTeX style sheets that are included after the standard style sheets created
# by doxygen. Using this option one can overrule certain style aspects. Doxygen
# will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_STYLESHEET =
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_FILES =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
# command to the generated LaTeX files. This will instruct LaTeX to keep running
# if errors occur, instead of asking the user for help. This option is also used
# when generating formulas in HTML.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BIB_STYLE = plain
# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_TIMESTAMP = NO
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's config
# file, i.e. a series of assignments. You only have to provide replacements,
# missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated
# using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE =
# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
# with syntax highlighting in the RTF output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
# classes and files.
# The default value is: NO.
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_SUBDIR =
# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.
GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.
GENERATE_DOCBOOK = NO
# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_OUTPUT = docbook
# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
# The default value is: NO.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see http://autogen.sf.net) file that captures the
# structure of the code including all documentation. Note that this feature is
# still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.
ENABLE_PREPROCESSING = YES
# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will be
# used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
# macro definition that is found in the sources will be used. Use the PREDEFINED
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have
# an all uppercase name, and do not end with a semicolon. Such function macros
# are typically used for boiler-plate code, and will confuse the parser if not
# removed.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
# The TAGFILES tag can be used to specify one or more tag files. For each tag
# file the location of the external documentation should be added. The format of
# a tag file without this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where loc1 and loc2 can be relative or absolute paths or URLs. See the
# section "Linking to external documentation" for more information about the use
# of tag files.
# Note: Each tag file must have a unique name (where the name does NOT include
# the path). If a tag file is not located in the directory in which doxygen is
# run, you must also specify the path to the tagfile here.
TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
# tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
# the class index. If set to NO, only the inherited external classes will be
# listed.
# The default value is: NO.
ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.
EXTERNAL_GROUPS = YES
# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.
EXTERNAL_PAGES = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of 'which perl').
# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
# The default value is: YES.
CLASS_DIAGRAMS = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.
DIA_PATH =
# If set to YES the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class.
# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see:
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
# The default value is: YES.
HAVE_DOT = YES
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
# processors available in the system. You can set it explicitly to a value
# larger than 0 to get control over the balance between CPU load and processing
# speed.
# Minimum value: 0, maximum value: 32, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen
# generates you can specify the font name using DOT_FONTNAME. You need to make
# sure dot is able to find the font, which can be done by putting it in a
# standard location or by setting the DOTFONTPATH environment variable or by
# setting DOT_FONTPATH to the directory containing the font.
# The default value is: Helvetica.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTNAME = Helvetica
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
# dot graphs.
# Minimum value: 4, maximum value: 24, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTSIZE = 10
# By default doxygen will tell dot to use the default font as specified with
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
# the path where dot can find it using this tag.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTPATH =
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
# each documented class showing the direct and indirect inheritance relations.
# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
# class node. If there are many fields or methods and many nodes the graph may
# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
# number of items for each type to make the size more manageable. Set this to 0
# for no limit. Note that the threshold may be exceeded by 50% before the limit
# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
# but if the number exceeds 15, the total amount of fields shown is limited to
# 10.
# Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
UML_LIMIT_NUM_FIELDS = 10
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = NO
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command. Disabling a call graph can be
# accomplished by means of the command \hidecallgraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command. Disabling a caller graph can be
# accomplished by means of the command \hidecallergraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the
# files in the directories.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see:
# http://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
# png:gdiplus:gdiplus.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
#
# Note that this requires a modern browser other than Internet Explorer. Tested
# and working are Firefox, Chrome, Safari, and Opera.
# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
# the SVG files visible. Older versions of IE do not have SVG support.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
INTERACTIVE_SVG = NO
# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the \dotfile
# command).
# This tag requires that the tag HAVE_DOT is set to YES.
DOTFILE_DIRS =
# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).
MSCFILE_DIRS =
# The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile
# command).
DIAFILE_DIRS =
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file. If left blank, it is assumed
# PlantUML is not used or called during a preprocessing step. Doxygen will
# generate a warning when it encounters a \startuml command in this case and
# will not generate output for the diagram.
PLANTUML_JAR_PATH =
# When using plantuml, the specified paths are searched for files specified by
# the !include statement in a plantuml block.
PLANTUML_INCLUDE_PATH =
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes
# larger than this value, doxygen will truncate the graph, which is visualized
# by representing a node as a red box. Note that doxygen if the number of direct
# children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
# Minimum value: 0, maximum value: 10000, default value: 50.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_GRAPH_MAX_NODES = 50
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
# generated by dot. A depth value of 3 means that only nodes reachable from the
# root by following a path via at most 3 edges will be shown. Nodes that lay
# further from the root node will be omitted. Note that setting this option to 1
# or 2 may greatly reduce the computation time needed for large code bases. Also
# note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
# Minimum value: 0, maximum value: 1000, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not seem
# to support this out of the box.
#
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
# this, this feature is disabled by default.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated
# graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
# files that are used to generate the various graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
================================================
FILE: Jenkinsfile
================================================
def notify(status){
emailext (
body: '$DEFAULT_CONTENT',
recipientProviders: [
[$class: 'CulpritsRecipientProvider'],
[$class: 'DevelopersRecipientProvider'],
[$class: 'RequesterRecipientProvider']
],
replyTo: '$DEFAULT_REPLYTO',
subject: '$DEFAULT_SUBJECT',
to: '$DEFAULT_RECIPIENTS'
)
}
@NonCPS
def killall_jobs() {
def jobname = env.JOB_NAME
def buildnum = env.BUILD_NUMBER.toInteger()
def killnums = ""
def job = Jenkins.instance.getItemByFullName(jobname)
def fixed_job_name = env.JOB_NAME.replace('%2F','/')
for (build in job.builds) {
if (!build.isBuilding()) { continue; }
if (buildnum == build.getNumber().toInteger()) { continue; println "equals" }
if (buildnum < build.getNumber().toInteger()) { continue; println "newer" }
echo "Kill task = ${build}"
killnums += "#" + build.getNumber().toInteger() + ", "
build.doStop();
}
if (killnums != "") {
discordSend description: "in favor of #${buildnum}, ignore following failed builds for ${killnums}", footer: "", link: env.BUILD_URL, result: "ABORTED", title: "[${split_job_name[0]}] Killing task(s) ${fixed_job_name} ${killnums}", webhookURL: env.AMIGADEV_WEBHOOK
}
echo "Done killing"
}
def buildStep() {
def split_job_name = env.JOB_NAME.split(/\/{1}/);
def fixed_job_name = split_job_name[1].replace('%2F',' ');
try{
stage("Building on \"amigadev/crosstools:m68k-amigaos\" for \"Amiga Classic\"...") {
properties([pipelineTriggers([githubPush()])])
def commondir = env.WORKSPACE + '/../' + fixed_job_name + '/'
docker.withRegistry("https://index.docker.io/v1/", "dockerhub") {
def dockerImageRef = docker.image("amigadev/crosstools:m68k-amigaos");
dockerImageRef.pull();
checkout scm;
dockerImageRef.inside("") {
if (env.CHANGE_ID) {
echo 'Trying to build pull request'
}
sh "mkdir -p lib/"
sh "rm -rfv build-68k/*"
stage("Building...") {
sh "cmake -S . -B build-68k -DCMAKE_INSTALL_PREFIX=./install -DCMAKE_BUILD_TYPE=Release"
sh "cmake --build build-68k --config Release --target install -j 8"
sh "cd install && lha -c ../ace.lha ./*"
archiveArtifacts artifacts: '*.zip,*.tar.gz,*.tgz,*.lha'
}
discordSend description: "Target: Amiga Classic DockerImage: amigadev/crosstools:m68k-amigaos successful!", footer: "", link: env.BUILD_URL, result: currentBuild.currentResult, title: "[${split_job_name[0]}] Build Successful: ${fixed_job_name} #${env.BUILD_NUMBER}", webhookURL: env.AMIGADEV_WEBHOOK
}
}
}
} catch(err) {
currentBuild.result = 'FAILURE'
discordSend description: "Build Failed: ${fixed_job_name} #${env.BUILD_NUMBER} Target: Amiga Classic DockerImage: amigadev/crosstools:m68k-amigaos (<${env.BUILD_URL}|Open>)", footer: "", link: env.BUILD_URL, result: currentBuild.currentResult, title: "[${split_job_name[0]}] Build Failed: ${fixed_job_name} #${env.BUILD_NUMBER}", webhookURL: env.AMIGADEV_WEBHOOK
notify('Build failed')
throw err
}
}
node('master') {
killall_jobs();
def split_job_name = env.JOB_NAME.split(/\/{1}/);
def fixed_job_name = split_job_name[1].replace('%2F',' ');
checkout(scm);
env.COMMIT_MSG = sh (
script: 'git log -1 --pretty=%B ${GIT_COMMIT}',
returnStdout: true
).trim();
discordSend description: "${env.COMMIT_MSG}", footer: "", link: env.BUILD_URL, result: currentBuild.currentResult, title: "[${split_job_name[0]}] Build Started: ${fixed_job_name} #${env.BUILD_NUMBER}", webhookURL: env.AMIGADEV_WEBHOOK
def branches = [:]
branches["Build ACE"] = {
node {
buildStep()
}
}
sh "rm -rf ./*"
parallel branches;
}
================================================
FILE: LICENSE
================================================
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.
================================================
FILE: README.md
================================================
# ACE - Amiga C Engine
[](https://codedocs.xyz/AmigaPorts/ACE/)
Game engine / framework / support library written totally in C for classic Amiga hardware.
Lightweight, flexible and hackable.
ACE uses Amiga hardware features directly, aiming for as much speed as possible.
The code is OS-friendly, allowing running from and exiting to Workbench gracefully.
Current feature set is OCS-oriented, although produced code should work on AGA just fine.
AGA features have been added recently and should work but they weren't thoroughly battle-tested.
For build instructions basic how to and contributing guidelines, refer to [docs](docs/README.md).
## Why I should use ACE?
ACE is best if you want to:
- Learn how to code on Amiga - the only skill you need is familiarity with C language.
ACE Provides very thin hardware abstraction layer, which aims to be as documented as possible.
**Lack of documentation is treated as a bug**, so feel free to report it in an issue!
- Code a high performance game/demo but don't want to do it entirely in assembly.
Use stock ACE functions to make the code work, trim it down for maximum performance.
Or just write the assembly by hand for parts which really require it.
## What ACE does
- Provides slim HAL for audio, blitter, copper, keyboard and mouse.
- Provides view and viewport system which work in similar manner to Amiga OS, but in less bloated way.
- Has lots of runtime error checks when building in debug mode, which are completely gone in release builds.
- Disables OS for maximum performance, but allows re-enabling it when needed - e.g. for file access, memory allocation, etc.
- Provides optional framework which helps in organizing games and reducing boilerplate code.
- Provides code for scrolling large tilemaps in memory-efficient way.
- Requires only kickstart 1.3, but provides OS2.0+ features, like functions using taglists, interleaved bitplane modes, etc.
## Things you won't find in ACE
- A Game Maker experience - you need to code game logic and most of the engine yourself.
- Elaborate sprite management.
- Functions for direct data read from floppy sectors.
Most of those features were deliberately omitted because they can be done in very different ways depending on the game/demo.
Still, the list of open source games is increasing, so you can copy and modify most building blocks from them to suit your needs.
## Games created using ACE
In alphabetical order:
- [ami-invaders](https://github.com/approxit/amiga-invaders)
- [AMIner](https://github.com/Last-Minute-Creations/AMIner)
- [Atarenium Falcon](https://github.com/Last-Minute-Creations/AtareniumFalcon)
- [Battle Squadron 2](https://github.com/bitwise-brains/AGJ2024_BS2)
- CastleHack
- [Chaos Arena](https://github.com/Last-Minute-Creations/chaosArena)
- [Flappy Ace](https://github.com/NZjeux26/FlappyAceWin)
- [GermZ](https://github.com/Last-Minute-Creations/germz)
- [GermZ Survivor](https://github.com/Last-Minute-Creations/GermzSurvivor)
- [Goblin Villages](https://github.com/Last-Minute-Creations/goblin-villages)
- [Impsbru](https://github.com/approxit/impsbru)
- [OpenFire](https://github.com/Last-Minute-Creations/openFire)
- [Squared](https://github.com/tehKaiN/ld40-squared)
## Demos created using ACE
In alphabetical order:
- [Casentino Day 2020 invitation](https://github.com/Ozzyboshi/Casentinoday2020AmigaDemo/)
- [Starfield](https://github.com/Ozzyboshi/AmigaStarfield)
## License, 3rd party code
Unless otherwise stated, the code is licensed under [Mozilla Public License 2.0](LICENSE). The exceptions are:
- The ptplayer module is based on [ptplayer](http://aminet.net/package/mus/play/ptplayer.lha) by Frank Wille (Public Domain)
- the mini_std library is based on 3rd party code:
- [mpaland/printf](https://github.com/mpaland/printf) (MIT)
- [strtoul](https://github.com/diegocr/libnix/blob/master/stdlib/strtoul.c) from Libnix (Public Domain)
- [DeidaraC/ctype](https://github.com/DeidaraC/ctype.h/blob/master/ctype.c) (MIT)
- `qsort()` replacement: [noporpoise/sort_r](https://github.com/noporpoise/sort_r) (Public Domain)
================================================
FILE: cmake/CPM.cmake
================================================
# CPM.cmake - CMake's missing package manager
# ===========================================
# See https://github.com/cpm-cmake/CPM.cmake for usage and update instructions.
#
# MIT License
# -----------
#[[
Copyright (c) 2019-2023 Lars Melchior and contributors
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.
]]
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
# Initialize logging prefix
if(NOT CPM_INDENT)
set(CPM_INDENT
"CPM:"
CACHE INTERNAL ""
)
endif()
if(NOT COMMAND cpm_message)
function(cpm_message)
message(${ARGV})
endfunction()
endif()
set(CURRENT_CPM_VERSION 0.40.2)
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
if(CPM_DIRECTORY)
if(NOT CPM_DIRECTORY STREQUAL CPM_CURRENT_DIRECTORY)
if(CPM_VERSION VERSION_LESS CURRENT_CPM_VERSION)
message(
AUTHOR_WARNING
"${CPM_INDENT} \
A dependency is using a more recent CPM version (${CURRENT_CPM_VERSION}) than the current project (${CPM_VERSION}). \
It is recommended to upgrade CPM to the most recent version. \
See https://github.com/cpm-cmake/CPM.cmake for more information."
)
endif()
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
include(FetchContent)
endif()
return()
endif()
get_property(
CPM_INITIALIZED GLOBAL ""
PROPERTY CPM_INITIALIZED
SET
)
if(CPM_INITIALIZED)
return()
endif()
endif()
if(CURRENT_CPM_VERSION MATCHES "development-version")
message(
WARNING "${CPM_INDENT} Your project is using an unstable development version of CPM.cmake. \
Please update to a recent release if possible. \
See https://github.com/cpm-cmake/CPM.cmake for details."
)
endif()
set_property(GLOBAL PROPERTY CPM_INITIALIZED true)
macro(cpm_set_policies)
# the policy allows us to change options without caching
cmake_policy(SET CMP0077 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
# the policy allows us to change set(CACHE) without caching
if(POLICY CMP0126)
cmake_policy(SET CMP0126 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0126 NEW)
endif()
# The policy uses the download time for timestamp, instead of the timestamp in the archive. This
# allows for proper rebuilds when a projects url changes
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0135 NEW)
endif()
# treat relative git repository paths as being relative to the parent project's remote
if(POLICY CMP0150)
cmake_policy(SET CMP0150 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0150 NEW)
endif()
endmacro()
cpm_set_policies()
option(CPM_USE_LOCAL_PACKAGES "Always try to use `find_package` to get dependencies"
$ENV{CPM_USE_LOCAL_PACKAGES}
)
option(CPM_LOCAL_PACKAGES_ONLY "Only use `find_package` to get dependencies"
$ENV{CPM_LOCAL_PACKAGES_ONLY}
)
option(CPM_DOWNLOAD_ALL "Always download dependencies from source" $ENV{CPM_DOWNLOAD_ALL})
option(CPM_DONT_UPDATE_MODULE_PATH "Don't update the module path to allow using find_package"
$ENV{CPM_DONT_UPDATE_MODULE_PATH}
)
option(CPM_DONT_CREATE_PACKAGE_LOCK "Don't create a package lock file in the binary path"
$ENV{CPM_DONT_CREATE_PACKAGE_LOCK}
)
option(CPM_INCLUDE_ALL_IN_PACKAGE_LOCK
"Add all packages added through CPM.cmake to the package lock"
$ENV{CPM_INCLUDE_ALL_IN_PACKAGE_LOCK}
)
option(CPM_USE_NAMED_CACHE_DIRECTORIES
"Use additional directory of package name in cache on the most nested level."
$ENV{CPM_USE_NAMED_CACHE_DIRECTORIES}
)
set(CPM_VERSION
${CURRENT_CPM_VERSION}
CACHE INTERNAL ""
)
set(CPM_DIRECTORY
${CPM_CURRENT_DIRECTORY}
CACHE INTERNAL ""
)
set(CPM_FILE
${CMAKE_CURRENT_LIST_FILE}
CACHE INTERNAL ""
)
set(CPM_PACKAGES
""
CACHE INTERNAL ""
)
set(CPM_DRY_RUN
OFF
CACHE INTERNAL "Don't download or configure dependencies (for testing)"
)
if(DEFINED ENV{CPM_SOURCE_CACHE})
set(CPM_SOURCE_CACHE_DEFAULT $ENV{CPM_SOURCE_CACHE})
else()
set(CPM_SOURCE_CACHE_DEFAULT OFF)
endif()
set(CPM_SOURCE_CACHE
${CPM_SOURCE_CACHE_DEFAULT}
CACHE PATH "Directory to download CPM dependencies"
)
if(NOT CPM_DONT_UPDATE_MODULE_PATH)
set(CPM_MODULE_PATH
"${CMAKE_BINARY_DIR}/CPM_modules"
CACHE INTERNAL ""
)
# remove old modules
file(REMOVE_RECURSE ${CPM_MODULE_PATH})
file(MAKE_DIRECTORY ${CPM_MODULE_PATH})
# locally added CPM modules should override global packages
set(CMAKE_MODULE_PATH "${CPM_MODULE_PATH};${CMAKE_MODULE_PATH}")
endif()
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
set(CPM_PACKAGE_LOCK_FILE
"${CMAKE_BINARY_DIR}/cpm-package-lock.cmake"
CACHE INTERNAL ""
)
file(WRITE ${CPM_PACKAGE_LOCK_FILE}
"# CPM Package Lock\n# This file should be committed to version control\n\n"
)
endif()
include(FetchContent)
# Try to infer package name from git repository uri (path or url)
function(cpm_package_name_from_git_uri URI RESULT)
if("${URI}" MATCHES "([^/:]+)/?.git/?$")
set(${RESULT}
${CMAKE_MATCH_1}
PARENT_SCOPE
)
else()
unset(${RESULT} PARENT_SCOPE)
endif()
endfunction()
# Try to infer package name and version from a url
function(cpm_package_name_and_ver_from_url url outName outVer)
if(url MATCHES "[/\\?]([a-zA-Z0-9_\\.-]+)\\.(tar|tar\\.gz|tar\\.bz2|zip|ZIP)(\\?|/|$)")
# We matched an archive
set(filename "${CMAKE_MATCH_1}")
if(filename MATCHES "([a-zA-Z0-9_\\.-]+)[_-]v?(([0-9]+\\.)*[0-9]+[a-zA-Z0-9]*)")
# We matched <name>-<version> (ie foo-1.2.3)
set(${outName}
"${CMAKE_MATCH_1}"
PARENT_SCOPE
)
set(${outVer}
"${CMAKE_MATCH_2}"
PARENT_SCOPE
)
elseif(filename MATCHES "(([0-9]+\\.)+[0-9]+[a-zA-Z0-9]*)")
# We couldn't find a name, but we found a version
#
# In many cases (which we don't handle here) the url would look something like
# `irrelevant/ACTUAL_PACKAGE_NAME/irrelevant/1.2.3.zip`. In such a case we can't possibly
# distinguish the package name from the irrelevant bits. Moreover if we try to match the
# package name from the filename, we'd get bogus at best.
unset(${outName} PARENT_SCOPE)
set(${outVer}
"${CMAKE_MATCH_1}"
PARENT_SCOPE
)
else()
# Boldly assume that the file name is the package name.
#
# Yes, something like `irrelevant/ACTUAL_NAME/irrelevant/download.zip` will ruin our day, but
# such cases should be quite rare. No popular service does this... we think.
set(${outName}
"${filename}"
PARENT_SCOPE
)
unset(${outVer} PARENT_SCOPE)
endif()
else()
# No ideas yet what to do with non-archives
unset(${outName} PARENT_SCOPE)
unset(${outVer} PARENT_SCOPE)
endif()
endfunction()
function(cpm_find_package NAME VERSION)
string(REPLACE " " ";" EXTRA_ARGS "${ARGN}")
find_package(${NAME} ${VERSION} ${EXTRA_ARGS} QUIET)
if(${CPM_ARGS_NAME}_FOUND)
if(DEFINED ${CPM_ARGS_NAME}_VERSION)
set(VERSION ${${CPM_ARGS_NAME}_VERSION})
endif()
cpm_message(STATUS "${CPM_INDENT} Using local package ${CPM_ARGS_NAME}@${VERSION}")
CPMRegisterPackage(${CPM_ARGS_NAME} "${VERSION}")
set(CPM_PACKAGE_FOUND
YES
PARENT_SCOPE
)
else()
set(CPM_PACKAGE_FOUND
NO
PARENT_SCOPE
)
endif()
endfunction()
# Create a custom FindXXX.cmake module for a CPM package This prevents `find_package(NAME)` from
# finding the system library
function(cpm_create_module_file Name)
if(NOT CPM_DONT_UPDATE_MODULE_PATH)
# erase any previous modules
file(WRITE ${CPM_MODULE_PATH}/Find${Name}.cmake
"include(\"${CPM_FILE}\")\n${ARGN}\nset(${Name}_FOUND TRUE)"
)
endif()
endfunction()
# Find a package locally or fallback to CPMAddPackage
function(CPMFindPackage)
set(oneValueArgs NAME VERSION GIT_TAG FIND_PACKAGE_ARGUMENTS)
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "" ${ARGN})
if(NOT DEFINED CPM_ARGS_VERSION)
if(DEFINED CPM_ARGS_GIT_TAG)
cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
endif()
endif()
set(downloadPackage ${CPM_DOWNLOAD_ALL})
if(DEFINED CPM_DOWNLOAD_${CPM_ARGS_NAME})
set(downloadPackage ${CPM_DOWNLOAD_${CPM_ARGS_NAME}})
elseif(DEFINED ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}})
set(downloadPackage $ENV{CPM_DOWNLOAD_${CPM_ARGS_NAME}})
endif()
if(downloadPackage)
CPMAddPackage(${ARGN})
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS})
if(NOT CPM_PACKAGE_FOUND)
CPMAddPackage(${ARGN})
cpm_export_variables(${CPM_ARGS_NAME})
endif()
endfunction()
# checks if a package has been added before
function(cpm_check_if_package_already_added CPM_ARGS_NAME CPM_ARGS_VERSION)
if("${CPM_ARGS_NAME}" IN_LIST CPM_PACKAGES)
CPMGetPackageVersion(${CPM_ARGS_NAME} CPM_PACKAGE_VERSION)
if("${CPM_PACKAGE_VERSION}" VERSION_LESS "${CPM_ARGS_VERSION}")
message(
WARNING
"${CPM_INDENT} Requires a newer version of ${CPM_ARGS_NAME} (${CPM_ARGS_VERSION}) than currently included (${CPM_PACKAGE_VERSION})."
)
endif()
cpm_get_fetch_properties(${CPM_ARGS_NAME})
set(${CPM_ARGS_NAME}_ADDED NO)
set(CPM_PACKAGE_ALREADY_ADDED
YES
PARENT_SCOPE
)
cpm_export_variables(${CPM_ARGS_NAME})
else()
set(CPM_PACKAGE_ALREADY_ADDED
NO
PARENT_SCOPE
)
endif()
endfunction()
# Parse the argument of CPMAddPackage in case a single one was provided and convert it to a list of
# arguments which can then be parsed idiomatically. For example gh:foo/bar@1.2.3 will be converted
# to: GITHUB_REPOSITORY;foo/bar;VERSION;1.2.3
function(cpm_parse_add_package_single_arg arg outArgs)
# Look for a scheme
if("${arg}" MATCHES "^([a-zA-Z]+):(.+)$")
string(TOLOWER "${CMAKE_MATCH_1}" scheme)
set(uri "${CMAKE_MATCH_2}")
# Check for CPM-specific schemes
if(scheme STREQUAL "gh")
set(out "GITHUB_REPOSITORY;${uri}")
set(packageType "git")
elseif(scheme STREQUAL "gl")
set(out "GITLAB_REPOSITORY;${uri}")
set(packageType "git")
elseif(scheme STREQUAL "bb")
set(out "BITBUCKET_REPOSITORY;${uri}")
set(packageType "git")
# A CPM-specific scheme was not found. Looks like this is a generic URL so try to determine
# type
elseif(arg MATCHES ".git/?(@|#|$)")
set(out "GIT_REPOSITORY;${arg}")
set(packageType "git")
else()
# Fall back to a URL
set(out "URL;${arg}")
set(packageType "archive")
# We could also check for SVN since FetchContent supports it, but SVN is so rare these days.
# We just won't bother with the additional complexity it will induce in this function. SVN is
# done by multi-arg
endif()
else()
if(arg MATCHES ".git/?(@|#|$)")
set(out "GIT_REPOSITORY;${arg}")
set(packageType "git")
else()
# Give up
message(FATAL_ERROR "${CPM_INDENT} Can't determine package type of '${arg}'")
endif()
endif()
# For all packages we interpret @... as version. Only replace the last occurrence. Thus URIs
# containing '@' can be used
string(REGEX REPLACE "@([^@]+)$" ";VERSION;\\1" out "${out}")
# Parse the rest according to package type
if(packageType STREQUAL "git")
# For git repos we interpret #... as a tag or branch or commit hash
string(REGEX REPLACE "#([^#]+)$" ";GIT_TAG;\\1" out "${out}")
elseif(packageType STREQUAL "archive")
# For archives we interpret #... as a URL hash.
string(REGEX REPLACE "#([^#]+)$" ";URL_HASH;\\1" out "${out}")
# We don't try to parse the version if it's not provided explicitly. cpm_get_version_from_url
# should do this at a later point
else()
# We should never get here. This is an assertion and hitting it means there's a problem with the
# code above. A packageType was set, but not handled by this if-else.
message(FATAL_ERROR "${CPM_INDENT} Unsupported package type '${packageType}' of '${arg}'")
endif()
set(${outArgs}
${out}
PARENT_SCOPE
)
endfunction()
# Check that the working directory for a git repo is clean
function(cpm_check_git_working_dir_is_clean repoPath gitTag isClean)
find_package(Git REQUIRED)
if(NOT GIT_EXECUTABLE)
# No git executable, assume directory is clean
set(${isClean}
TRUE
PARENT_SCOPE
)
return()
endif()
# check for uncommitted changes
execute_process(
COMMAND ${GIT_EXECUTABLE} status --porcelain
RESULT_VARIABLE resultGitStatus
OUTPUT_VARIABLE repoStatus
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
WORKING_DIRECTORY ${repoPath}
)
if(resultGitStatus)
# not supposed to happen, assume clean anyway
message(WARNING "${CPM_INDENT} Calling git status on folder ${repoPath} failed")
set(${isClean}
TRUE
PARENT_SCOPE
)
return()
endif()
if(NOT "${repoStatus}" STREQUAL "")
set(${isClean}
FALSE
PARENT_SCOPE
)
return()
endif()
# check for committed changes
execute_process(
COMMAND ${GIT_EXECUTABLE} diff -s --exit-code ${gitTag}
RESULT_VARIABLE resultGitDiff
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_QUIET
WORKING_DIRECTORY ${repoPath}
)
if(${resultGitDiff} EQUAL 0)
set(${isClean}
TRUE
PARENT_SCOPE
)
else()
set(${isClean}
FALSE
PARENT_SCOPE
)
endif()
endfunction()
# Add PATCH_COMMAND to CPM_ARGS_UNPARSED_ARGUMENTS. This method consumes a list of files in ARGN
# then generates a `PATCH_COMMAND` appropriate for `ExternalProject_Add()`. This command is appended
# to the parent scope's `CPM_ARGS_UNPARSED_ARGUMENTS`.
function(cpm_add_patches)
# Return if no patch files are supplied.
if(NOT ARGN)
return()
endif()
# Find the patch program.
find_program(PATCH_EXECUTABLE patch)
if(WIN32 AND NOT PATCH_EXECUTABLE)
# The Windows git executable is distributed with patch.exe. Find the path to the executable, if
# it exists, then search `../usr/bin` and `../../usr/bin` for patch.exe.
find_package(Git QUIET)
if(GIT_EXECUTABLE)
get_filename_component(extra_search_path ${GIT_EXECUTABLE} DIRECTORY)
get_filename_component(extra_search_path_1up ${extra_search_path} DIRECTORY)
get_filename_component(extra_search_path_2up ${extra_search_path_1up} DIRECTORY)
find_program(
PATCH_EXECUTABLE patch HINTS "${extra_search_path_1up}/usr/bin"
"${extra_search_path_2up}/usr/bin"
)
endif()
endif()
if(NOT PATCH_EXECUTABLE)
message(FATAL_ERROR "Couldn't find `patch` executable to use with PATCHES keyword.")
endif()
# Create a temporary
set(temp_list ${CPM_ARGS_UNPARSED_ARGUMENTS})
# Ensure each file exists (or error out) and add it to the list.
set(first_item True)
foreach(PATCH_FILE ${ARGN})
# Make sure the patch file exists, if we can't find it, try again in the current directory.
if(NOT EXISTS "${PATCH_FILE}")
if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/${PATCH_FILE}")
message(FATAL_ERROR "Couldn't find patch file: '${PATCH_FILE}'")
endif()
set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/${PATCH_FILE}")
endif()
# Convert to absolute path for use with patch file command.
get_filename_component(PATCH_FILE "${PATCH_FILE}" ABSOLUTE)
# The first patch entry must be preceded by "PATCH_COMMAND" while the following items are
# preceded by "&&".
if(first_item)
set(first_item False)
list(APPEND temp_list "PATCH_COMMAND")
else()
list(APPEND temp_list "&&")
endif()
# Add the patch command to the list
list(APPEND temp_list "${PATCH_EXECUTABLE}" "-p1" "<" "${PATCH_FILE}")
endforeach()
# Move temp out into parent scope.
set(CPM_ARGS_UNPARSED_ARGUMENTS
${temp_list}
PARENT_SCOPE
)
endfunction()
# method to overwrite internal FetchContent properties, to allow using CPM.cmake to overload
# FetchContent calls. As these are internal cmake properties, this method should be used carefully
# and may need modification in future CMake versions. Source:
# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake#L1152
function(cpm_override_fetchcontent contentName)
cmake_parse_arguments(PARSE_ARGV 1 arg "" "SOURCE_DIR;BINARY_DIR" "")
if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "")
message(FATAL_ERROR "${CPM_INDENT} Unsupported arguments: ${arg_UNPARSED_ARGUMENTS}")
endif()
string(TOLOWER ${contentName} contentNameLower)
set(prefix "_FetchContent_${contentNameLower}")
set(propertyName "${prefix}_sourceDir")
define_property(
GLOBAL
PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} "${arg_SOURCE_DIR}")
set(propertyName "${prefix}_binaryDir")
define_property(
GLOBAL
PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} "${arg_BINARY_DIR}")
set(propertyName "${prefix}_populated")
define_property(
GLOBAL
PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} TRUE)
endfunction()
# Download and add a package from source
function(CPMAddPackage)
cpm_set_policies()
list(LENGTH ARGN argnLength)
if(argnLength EQUAL 1)
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
# The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;")
endif()
set(oneValueArgs
NAME
FORCE
VERSION
GIT_TAG
DOWNLOAD_ONLY
GITHUB_REPOSITORY
GITLAB_REPOSITORY
BITBUCKET_REPOSITORY
GIT_REPOSITORY
SOURCE_DIR
FIND_PACKAGE_ARGUMENTS
NO_CACHE
SYSTEM
GIT_SHALLOW
EXCLUDE_FROM_ALL
SOURCE_SUBDIR
CUSTOM_CACHE_KEY
)
set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND PATCHES)
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
# Set default values for arguments
if(NOT DEFINED CPM_ARGS_VERSION)
if(DEFINED CPM_ARGS_GIT_TAG)
cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
endif()
endif()
if(CPM_ARGS_DOWNLOAD_ONLY)
set(DOWNLOAD_ONLY ${CPM_ARGS_DOWNLOAD_ONLY})
else()
set(DOWNLOAD_ONLY NO)
endif()
if(DEFINED CPM_ARGS_GITHUB_REPOSITORY)
set(CPM_ARGS_GIT_REPOSITORY "https://github.com/${CPM_ARGS_GITHUB_REPOSITORY}.git")
elseif(DEFINED CPM_ARGS_GITLAB_REPOSITORY)
set(CPM_ARGS_GIT_REPOSITORY "https://gitlab.com/${CPM_ARGS_GITLAB_REPOSITORY}.git")
elseif(DEFINED CPM_ARGS_BITBUCKET_REPOSITORY)
set(CPM_ARGS_GIT_REPOSITORY "https://bitbucket.org/${CPM_ARGS_BITBUCKET_REPOSITORY}.git")
endif()
if(DEFINED CPM_ARGS_GIT_REPOSITORY)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_REPOSITORY ${CPM_ARGS_GIT_REPOSITORY})
if(NOT DEFINED CPM_ARGS_GIT_TAG)
set(CPM_ARGS_GIT_TAG v${CPM_ARGS_VERSION})
endif()
# If a name wasn't provided, try to infer it from the git repo
if(NOT DEFINED CPM_ARGS_NAME)
cpm_package_name_from_git_uri(${CPM_ARGS_GIT_REPOSITORY} CPM_ARGS_NAME)
endif()
endif()
set(CPM_SKIP_FETCH FALSE)
if(DEFINED CPM_ARGS_GIT_TAG)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_TAG ${CPM_ARGS_GIT_TAG})
# If GIT_SHALLOW is explicitly specified, honor the value.
if(DEFINED CPM_ARGS_GIT_SHALLOW)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_SHALLOW ${CPM_ARGS_GIT_SHALLOW})
endif()
endif()
if(DEFINED CPM_ARGS_URL)
# If a name or version aren't provided, try to infer them from the URL
list(GET CPM_ARGS_URL 0 firstUrl)
cpm_package_name_and_ver_from_url(${firstUrl} nameFromUrl verFromUrl)
# If we fail to obtain name and version from the first URL, we could try other URLs if any.
# However multiple URLs are expected to be quite rare, so for now we won't bother.
# If the caller provided their own name and version, they trump the inferred ones.
if(NOT DEFINED CPM_ARGS_NAME)
set(CPM_ARGS_NAME ${nameFromUrl})
endif()
if(NOT DEFINED CPM_ARGS_VERSION)
set(CPM_ARGS_VERSION ${verFromUrl})
endif()
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS URL "${CPM_ARGS_URL}")
endif()
# Check for required arguments
if(NOT DEFINED CPM_ARGS_NAME)
message(
FATAL_ERROR
"${CPM_INDENT} 'NAME' was not provided and couldn't be automatically inferred for package added with arguments: '${ARGN}'"
)
endif()
# Check if package has been added before
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}")
if(CPM_PACKAGE_ALREADY_ADDED)
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
# Check for manual overrides
if(NOT CPM_ARGS_FORCE AND NOT "${CPM_${CPM_ARGS_NAME}_SOURCE}" STREQUAL "")
set(PACKAGE_SOURCE ${CPM_${CPM_ARGS_NAME}_SOURCE})
set(CPM_${CPM_ARGS_NAME}_SOURCE "")
CPMAddPackage(
NAME "${CPM_ARGS_NAME}"
SOURCE_DIR "${PACKAGE_SOURCE}"
EXCLUDE_FROM_ALL "${CPM_ARGS_EXCLUDE_FROM_ALL}"
SYSTEM "${CPM_ARGS_SYSTEM}"
PATCHES "${CPM_ARGS_PATCHES}"
OPTIONS "${CPM_ARGS_OPTIONS}"
SOURCE_SUBDIR "${CPM_ARGS_SOURCE_SUBDIR}"
DOWNLOAD_ONLY "${DOWNLOAD_ONLY}"
FORCE True
)
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
# Check for available declaration
if(NOT CPM_ARGS_FORCE AND NOT "${CPM_DECLARATION_${CPM_ARGS_NAME}}" STREQUAL "")
set(declaration ${CPM_DECLARATION_${CPM_ARGS_NAME}})
set(CPM_DECLARATION_${CPM_ARGS_NAME} "")
CPMAddPackage(${declaration})
cpm_export_variables(${CPM_ARGS_NAME})
# checking again to ensure version and option compatibility
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}")
return()
endif()
if(NOT CPM_ARGS_FORCE)
if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY)
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS})
if(CPM_PACKAGE_FOUND)
cpm_export_variables(${CPM_ARGS_NAME})
return()
endif()
if(CPM_LOCAL_PACKAGES_ONLY)
message(
SEND_ERROR
"${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION})"
)
endif()
endif()
endif()
CPMRegisterPackage("${CPM_ARGS_NAME}" "${CPM_ARGS_VERSION}")
if(DEFINED CPM_ARGS_GIT_TAG)
set(PACKAGE_INFO "${CPM_ARGS_GIT_TAG}")
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
set(PACKAGE_INFO "${CPM_ARGS_SOURCE_DIR}")
else()
set(PACKAGE_INFO "${CPM_ARGS_VERSION}")
endif()
if(DEFINED FETCHCONTENT_BASE_DIR)
# respect user's FETCHCONTENT_BASE_DIR if set
set(CPM_FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR})
else()
set(CPM_FETCHCONTENT_BASE_DIR ${CMAKE_BINARY_DIR}/_deps)
endif()
cpm_add_patches(${CPM_ARGS_PATCHES})
if(DEFINED CPM_ARGS_DOWNLOAD_COMMAND)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS DOWNLOAD_COMMAND ${CPM_ARGS_DOWNLOAD_COMMAND})
elseif(DEFINED CPM_ARGS_SOURCE_DIR)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${CPM_ARGS_SOURCE_DIR})
if(NOT IS_ABSOLUTE ${CPM_ARGS_SOURCE_DIR})
# Expand `CPM_ARGS_SOURCE_DIR` relative path. This is important because EXISTS doesn't work
# for relative paths.
get_filename_component(
source_directory ${CPM_ARGS_SOURCE_DIR} REALPATH BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}
)
else()
set(source_directory ${CPM_ARGS_SOURCE_DIR})
endif()
if(NOT EXISTS ${source_directory})
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
# remove timestamps so CMake will re-download the dependency
file(REMOVE_RECURSE "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild")
endif()
elseif(CPM_SOURCE_CACHE AND NOT CPM_ARGS_NO_CACHE)
string(TOLOWER ${CPM_ARGS_NAME} lower_case_name)
set(origin_parameters ${CPM_ARGS_UNPARSED_ARGUMENTS})
list(SORT origin_parameters)
if(CPM_ARGS_CUSTOM_CACHE_KEY)
# Application set a custom unique directory name
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${CPM_ARGS_CUSTOM_CACHE_KEY})
elseif(CPM_USE_NAMED_CACHE_DIRECTORIES)
string(SHA1 origin_hash "${origin_parameters};NEW_CACHE_STRUCTURE_TAG")
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash}/${CPM_ARGS_NAME})
else()
string(SHA1 origin_hash "${origin_parameters}")
set(download_directory ${CPM_SOURCE_CACHE}/${lower_case_name}/${origin_hash})
endif()
# Expand `download_directory` relative path. This is important because EXISTS doesn't work for
# relative paths.
get_filename_component(download_directory ${download_directory} ABSOLUTE)
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${download_directory})
if(CPM_SOURCE_CACHE)
file(LOCK ${download_directory}/../cmake.lock)
endif()
if(EXISTS ${download_directory})
if(CPM_SOURCE_CACHE)
file(LOCK ${download_directory}/../cmake.lock RELEASE)
endif()
cpm_store_fetch_properties(
${CPM_ARGS_NAME} "${download_directory}"
"${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build"
)
cpm_get_fetch_properties("${CPM_ARGS_NAME}")
if(DEFINED CPM_ARGS_GIT_TAG AND NOT (PATCH_COMMAND IN_LIST CPM_ARGS_UNPARSED_ARGUMENTS))
# warn if cache has been changed since checkout
cpm_check_git_working_dir_is_clean(${download_directory} ${CPM_ARGS_GIT_TAG} IS_CLEAN)
if(NOT ${IS_CLEAN})
message(
WARNING "${CPM_INDENT} Cache for ${CPM_ARGS_NAME} (${download_directory}) is dirty"
)
endif()
endif()
cpm_add_subdirectory(
"${CPM_ARGS_NAME}"
"${DOWNLOAD_ONLY}"
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
"${${CPM_ARGS_NAME}_BINARY_DIR}"
"${CPM_ARGS_EXCLUDE_FROM_ALL}"
"${CPM_ARGS_SYSTEM}"
"${CPM_ARGS_OPTIONS}"
)
set(PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory}")
# As the source dir is already cached/populated, we override the call to FetchContent.
set(CPM_SKIP_FETCH TRUE)
cpm_override_fetchcontent(
"${lower_case_name}" SOURCE_DIR "${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
BINARY_DIR "${${CPM_ARGS_NAME}_BINARY_DIR}"
)
else()
# Enable shallow clone when GIT_TAG is not a commit hash. Our guess may not be accurate, but
# it should guarantee no commit hash get mis-detected.
if(NOT DEFINED CPM_ARGS_GIT_SHALLOW)
cpm_is_git_tag_commit_hash("${CPM_ARGS_GIT_TAG}" IS_HASH)
if(NOT ${IS_HASH})
list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS GIT_SHALLOW TRUE)
endif()
endif()
# remove timestamps so CMake will re-download the dependency
file(REMOVE_RECURSE ${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild)
set(PACKAGE_INFO "${PACKAGE_INFO} to ${download_directory}")
endif()
endif()
cpm_create_module_file(${CPM_ARGS_NAME} "CPMAddPackage(\"${ARGN}\")")
if(CPM_PACKAGE_LOCK_ENABLED)
if((CPM_ARGS_VERSION AND NOT CPM_ARGS_SOURCE_DIR) OR CPM_INCLUDE_ALL_IN_PACKAGE_LOCK)
cpm_add_to_package_lock(${CPM_ARGS_NAME} "${ARGN}")
elseif(CPM_ARGS_SOURCE_DIR)
cpm_add_comment_to_package_lock(${CPM_ARGS_NAME} "local directory")
else()
cpm_add_comment_to_package_lock(${CPM_ARGS_NAME} "${ARGN}")
endif()
endif()
cpm_message(
STATUS "${CPM_INDENT} Adding package ${CPM_ARGS_NAME}@${CPM_ARGS_VERSION} (${PACKAGE_INFO})"
)
if(NOT CPM_SKIP_FETCH)
# CMake 3.28 added EXCLUDE, SYSTEM (3.25), and SOURCE_SUBDIR (3.18) to FetchContent_Declare.
# Calling FetchContent_MakeAvailable will then internally forward these options to
# add_subdirectory. Up until these changes, we had to call FetchContent_Populate and
# add_subdirectory separately, which is no longer necessary and has been deprecated as of 3.30.
set(fetchContentDeclareExtraArgs "")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
if(${CPM_ARGS_EXCLUDE_FROM_ALL})
list(APPEND fetchContentDeclareExtraArgs EXCLUDE_FROM_ALL)
endif()
if(${CPM_ARGS_SYSTEM})
list(APPEND fetchContentDeclareExtraArgs SYSTEM)
endif()
if(DEFINED CPM_ARGS_SOURCE_SUBDIR)
list(APPEND fetchContentDeclareExtraArgs SOURCE_SUBDIR ${CPM_ARGS_SOURCE_SUBDIR})
endif()
# For CMake version <3.28 OPTIONS are parsed in cpm_add_subdirectory
if(CPM_ARGS_OPTIONS AND NOT DOWNLOAD_ONLY)
foreach(OPTION ${CPM_ARGS_OPTIONS})
cpm_parse_option("${OPTION}")
set(${OPTION_KEY} "${OPTION_VALUE}")
endforeach()
endif()
endif()
cpm_declare_fetch(
"${CPM_ARGS_NAME}" ${fetchContentDeclareExtraArgs} "${CPM_ARGS_UNPARSED_ARGUMENTS}"
)
cpm_fetch_package("${CPM_ARGS_NAME}" ${DOWNLOAD_ONLY} populated ${CPM_ARGS_UNPARSED_ARGUMENTS})
if(CPM_SOURCE_CACHE AND download_directory)
file(LOCK ${download_directory}/../cmake.lock RELEASE)
endif()
if(${populated} AND ${CMAKE_VERSION} VERSION_LESS "3.28.0")
cpm_add_subdirectory(
"${CPM_ARGS_NAME}"
"${DOWNLOAD_ONLY}"
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
"${${CPM_ARGS_NAME}_BINARY_DIR}"
"${CPM_ARGS_EXCLUDE_FROM_ALL}"
"${CPM_ARGS_SYSTEM}"
"${CPM_ARGS_OPTIONS}"
)
endif()
cpm_get_fetch_properties("${CPM_ARGS_NAME}")
endif()
set(${CPM_ARGS_NAME}_ADDED YES)
cpm_export_variables("${CPM_ARGS_NAME}")
endfunction()
# Fetch a previously declared package
macro(CPMGetPackage Name)
if(DEFINED "CPM_DECLARATION_${Name}")
CPMAddPackage(NAME ${Name})
else()
message(SEND_ERROR "${CPM_INDENT} Cannot retrieve package ${Name}: no declaration available")
endif()
endmacro()
# export variables available to the caller to the parent scope expects ${CPM_ARGS_NAME} to be set
macro(cpm_export_variables name)
set(${name}_SOURCE_DIR
"${${name}_SOURCE_DIR}"
PARENT_SCOPE
)
set(${name}_BINARY_DIR
"${${name}_BINARY_DIR}"
PARENT_SCOPE
)
set(${name}_ADDED
"${${name}_ADDED}"
PARENT_SCOPE
)
set(CPM_LAST_PACKAGE_NAME
"${name}"
PARENT_SCOPE
)
endmacro()
# declares a package, so that any call to CPMAddPackage for the package name will use these
# arguments instead. Previous declarations will not be overridden.
macro(CPMDeclarePackage Name)
if(NOT DEFINED "CPM_DECLARATION_${Name}")
set("CPM_DECLARATION_${Name}" "${ARGN}")
endif()
endmacro()
function(cpm_add_to_package_lock Name)
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
cpm_prettify_package_arguments(PRETTY_ARGN false ${ARGN})
file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name}\n${PRETTY_ARGN})\n")
endif()
endfunction()
function(cpm_add_comment_to_package_lock Name)
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
cpm_prettify_package_arguments(PRETTY_ARGN true ${ARGN})
file(APPEND ${CPM_PACKAGE_LOCK_FILE}
"# ${Name} (unversioned)\n# CPMDeclarePackage(${Name}\n${PRETTY_ARGN}#)\n"
)
endif()
endfunction()
# includes the package lock file if it exists and creates a target `cpm-update-package-lock` to
# update it
macro(CPMUsePackageLock file)
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
get_filename_component(CPM_ABSOLUTE_PACKAGE_LOCK_PATH ${file} ABSOLUTE)
if(EXISTS ${CPM_ABSOLUTE_PACKAGE_LOCK_PATH})
include(${CPM_ABSOLUTE_PACKAGE_LOCK_PATH})
endif()
if(NOT TARGET cpm-update-package-lock)
add_custom_target(
cpm-update-package-lock COMMAND ${CMAKE_COMMAND} -E copy ${CPM_PACKAGE_LOCK_FILE}
${CPM_ABSOLUTE_PACKAGE_LOCK_PATH}
)
endif()
set(CPM_PACKAGE_LOCK_ENABLED true)
endif()
endmacro()
# registers a package that has been added to CPM
function(CPMRegisterPackage PACKAGE VERSION)
list(APPEND CPM_PACKAGES ${PACKAGE})
set(CPM_PACKAGES
${CPM_PACKAGES}
CACHE INTERNAL ""
)
set("CPM_PACKAGE_${PACKAGE}_VERSION"
${VERSION}
CACHE INTERNAL ""
)
endfunction()
# retrieve the current version of the package to ${OUTPUT}
function(CPMGetPackageVersion PACKAGE OUTPUT)
set(${OUTPUT}
"${CPM_PACKAGE_${PACKAGE}_VERSION}"
PARENT_SCOPE
)
endfunction()
# declares a package in FetchContent_Declare
function(cpm_declare_fetch PACKAGE)
if(${CPM_DRY_RUN})
cpm_message(STATUS "${CPM_INDENT} Package not declared (dry run)")
return()
endif()
FetchContent_Declare(${PACKAGE} ${ARGN})
endfunction()
# returns properties for a package previously defined by cpm_declare_fetch
function(cpm_get_fetch_properties PACKAGE)
if(${CPM_DRY_RUN})
return()
endif()
set(${PACKAGE}_SOURCE_DIR
"${CPM_PACKAGE_${PACKAGE}_SOURCE_DIR}"
PARENT_SCOPE
)
set(${PACKAGE}_BINARY_DIR
"${CPM_PACKAGE_${PACKAGE}_BINARY_DIR}"
PARENT_SCOPE
)
endfunction()
function(cpm_store_fetch_properties PACKAGE source_dir binary_dir)
if(${CPM_DRY_RUN})
return()
endif()
set(CPM_PACKAGE_${PACKAGE}_SOURCE_DIR
"${source_dir}"
CACHE INTERNAL ""
)
set(CPM_PACKAGE_${PACKAGE}_BINARY_DIR
"${binary_dir}"
CACHE INTERNAL ""
)
endfunction()
# adds a package as a subdirectory if viable, according to provided options
function(
cpm_add_subdirectory
PACKAGE
DOWNLOAD_ONLY
SOURCE_DIR
BINARY_DIR
EXCLUDE
SYSTEM
OPTIONS
)
if(NOT DOWNLOAD_ONLY AND EXISTS ${SOURCE_DIR}/CMakeLists.txt)
set(addSubdirectoryExtraArgs "")
if(EXCLUDE)
list(APPEND addSubdirectoryExtraArgs EXCLUDE_FROM_ALL)
endif()
if("${SYSTEM}" AND "${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.25")
# https://cmake.org/cmake/help/latest/prop_dir/SYSTEM.html#prop_dir:SYSTEM
list(APPEND addSubdirectoryExtraArgs SYSTEM)
endif()
if(OPTIONS)
foreach(OPTION ${OPTIONS})
cpm_parse_option("${OPTION}")
set(${OPTION_KEY} "${OPTION_VALUE}")
endforeach()
endif()
set(CPM_OLD_INDENT "${CPM_INDENT}")
set(CPM_INDENT "${CPM_INDENT} ${PACKAGE}:")
add_subdirectory(${SOURCE_DIR} ${BINARY_DIR} ${addSubdirectoryExtraArgs})
set(CPM_INDENT "${CPM_OLD_INDENT}")
endif()
endfunction()
# downloads a previously declared package via FetchContent and exports the variables
# `${PACKAGE}_SOURCE_DIR` and `${PACKAGE}_BINARY_DIR` to the parent scope
function(cpm_fetch_package PACKAGE DOWNLOAD_ONLY populated)
set(${populated}
FALSE
PARENT_SCOPE
)
if(${CPM_DRY_RUN})
cpm_message(STATUS "${CPM_INDENT} Package ${PACKAGE} not fetched (dry run)")
return()
endif()
FetchContent_GetProperties(${PACKAGE})
string(TOLOWER "${PACKAGE}" lower_case_name)
if(NOT ${lower_case_name}_POPULATED)
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
if(DOWNLOAD_ONLY)
# MakeAvailable will call add_subdirectory internally which is not what we want when
# DOWNLOAD_ONLY is set. Populate will only download the dependency without adding it to the
# build
FetchContent_Populate(
${PACKAGE}
SOURCE_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-src"
BINARY_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build"
SUBBUILD_DIR "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-subbuild"
${ARGN}
)
else()
FetchContent_MakeAvailable(${PACKAGE})
endif()
else()
FetchContent_Populate(${PACKAGE})
endif()
set(${populated}
TRUE
PARENT_SCOPE
)
endif()
cpm_store_fetch_properties(
${CPM_ARGS_NAME} ${${lower_case_name}_SOURCE_DIR} ${${lower_case_name}_BINARY_DIR}
)
set(${PACKAGE}_SOURCE_DIR
${${lower_case_name}_SOURCE_DIR}
PARENT_SCOPE
)
set(${PACKAGE}_BINARY_DIR
${${lower_case_name}_BINARY_DIR}
PARENT_SCOPE
)
endfunction()
# splits a package option
function(cpm_parse_option OPTION)
string(REGEX MATCH "^[^ ]+" OPTION_KEY "${OPTION}")
string(LENGTH "${OPTION}" OPTION_LENGTH)
string(LENGTH "${OPTION_KEY}" OPTION_KEY_LENGTH)
if(OPTION_KEY_LENGTH STREQUAL OPTION_LENGTH)
# no value for key provided, assume user wants to set option to "ON"
set(OPTION_VALUE "ON")
else()
math(EXPR OPTION_KEY_LENGTH "${OPTION_KEY_LENGTH}+1")
string(SUBSTRING "${OPTION}" "${OPTION_KEY_LENGTH}" "-1" OPTION_VALUE)
endif()
set(OPTION_KEY
"${OPTION_KEY}"
PARENT_SCOPE
)
set(OPTION_VALUE
"${OPTION_VALUE}"
PARENT_SCOPE
)
endfunction()
# guesses the package version from a git tag
function(cpm_get_version_from_git_tag GIT_TAG RESULT)
string(LENGTH ${GIT_TAG} length)
if(length EQUAL 40)
# GIT_TAG is probably a git hash
set(${RESULT}
0
PARENT_SCOPE
)
else()
string(REGEX MATCH "v?([0123456789.]*).*" _ ${GIT_TAG})
set(${RESULT}
${CMAKE_MATCH_1}
PARENT_SCOPE
)
endif()
endfunction()
# guesses if the git tag is a commit hash or an actual tag or a branch name.
function(cpm_is_git_tag_commit_hash GIT_TAG RESULT)
string(LENGTH "${GIT_TAG}" length)
# full hash has 40 characters, and short hash has at least 7 characters.
if(length LESS 7 OR length GREATER 40)
set(${RESULT}
0
PARENT_SCOPE
)
else()
if(${GIT_TAG} MATCHES "^[a-fA-F0-9]+$")
set(${RESULT}
1
PARENT_SCOPE
)
else()
set(${RESULT}
0
PARENT_SCOPE
)
endif()
endif()
endfunction()
function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT)
set(oneValueArgs
NAME
FORCE
VERSION
GIT_TAG
DOWNLOAD_ONLY
GITHUB_REPOSITORY
GITLAB_REPOSITORY
BITBUCKET_REPOSITORY
GIT_REPOSITORY
SOURCE_DIR
FIND_PACKAGE_ARGUMENTS
NO_CACHE
SYSTEM
GIT_SHALLOW
EXCLUDE_FROM_ALL
SOURCE_SUBDIR
)
set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND)
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(oneArgName ${oneValueArgs})
if(DEFINED CPM_ARGS_${oneArgName})
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
if(${oneArgName} STREQUAL "SOURCE_DIR")
string(REPLACE ${CMAKE_SOURCE_DIR} "\${CMAKE_SOURCE_DIR}" CPM_ARGS_${oneArgName}
${CPM_ARGS_${oneArgName}}
)
endif()
string(APPEND PRETTY_OUT_VAR " ${oneArgName} ${CPM_ARGS_${oneArgName}}\n")
endif()
endforeach()
foreach(multiArgName ${multiValueArgs})
if(DEFINED CPM_ARGS_${multiArgName})
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
string(APPEND PRETTY_OUT_VAR " ${multiArgName}\n")
foreach(singleOption ${CPM_ARGS_${multiArgName}})
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
string(APPEND PRETTY_OUT_VAR " \"${singleOption}\"\n")
endforeach()
endif()
endforeach()
if(NOT "${CPM_ARGS_UNPARSED_ARGUMENTS}" STREQUAL "")
if(${IS_IN_COMMENT})
string(APPEND PRETTY_OUT_VAR "#")
endif()
string(APPEND PRETTY_OUT_VAR " ")
foreach(CPM_ARGS_UNPARSED_ARGUMENT ${CPM_ARGS_UNPARSED_ARGUMENTS})
string(APPEND PRETTY_OUT_VAR " ${CPM_ARGS_UNPARSED_ARGUMENT}")
endforeach()
string(APPEND PRETTY_OUT_VAR "\n")
endif()
set(${OUT_VAR}
${PRETTY_OUT_VAR}
PARENT_SCOPE
)
endfunction()
================================================
FILE: cmake/ace_config.cmake
================================================
set(ACE_LIBRARY_KIND OBJECT CACHE STRING "Build kind: static library or bunch of .o files. OBJECT allows for more link-time optimizations.")
set(ACE_LIBRARY_KINDS "OBJECT" "STATIC")
set_property(CACHE ACE_LIBRARY_KIND PROPERTY STRINGS ${ACE_LIBRARY_KINDS})
set(ACE_DEBUG OFF CACHE BOOL "Build with ACE-specific debug/safety functionality.")
set(ACE_DEBUG_UAE OFF CACHE BOOL "With ACE_DEBUG enabled, output log to UAE console.")
set(ACE_BOB_WRAP_Y ON CACHE BOOL "Conrols Y-wrapping support in bob manager. Disable for extra performance in simple buffer scenarios.")
set(ACE_BOB_PRISTINE_BUFFER OFF CACHE BOOL "When enabled, uses pristine buffer for bob undraw instead of allocating restore buffers.")
set(ACE_USE_ECS_FEATURES OFF CACHE BOOL "Enable ECS feature sets, makes ACE OCS-incompatible.")
set(ACE_USE_AGA_FEATURES OFF CACHE BOOL "Enable AGA feature sets, makes ACE use AGA Features.")
set(ACE_TILEBUFFER_TILE_TYPE UBYTE CACHE STRING "Tilebuffer: Specify type used for storing tile indices.")
set(ACE_SCROLLBUFFER_POT_BITMAP_HEIGHT ON CACHE BOOL "Scroll/tilebuffer: Round up the frame buffer height to power of two. More memory usage but faster calculations.")
set(ACE_SCROLLBUFFER_ENABLE_SCROLL_X ON CACHE BOOL "Scroll/tilebuffer: Enables scroll in X direction.")
set(ACE_SCROLLBUFFER_ENABLE_SCROLL_Y ON CACHE BOOL "Scroll/tilebuffer: Enables scroll in Y direction.")
set(ACE_SCROLLBUFFER_X_MARGIN_SIZE 1 CACHE STRING "Scroll/tilebuffer: Number of tiles comprising into offscreen margins in X direction. Bigger allows drawing in bigger objects than tile size.")
set(ACE_SCROLLBUFFER_Y_MARGIN_SIZE 1 CACHE STRING "Scroll/tilebuffer: Number of tiles comprising into offscreen margins in X direction. Bigger allows drawing in bigger objects than tile size.")
set(ACE_FILE_USE_ONLY_DISK OFF CACHE BOOL "If enabled, only diskFile functions will be available for file access.")
message(STATUS "[ACE] ACE_LIBRARY_KIND: '${ACE_LIBRARY_KIND}'")
message(STATUS "[ACE] ACE_DEBUG: '${ACE_DEBUG}'")
message(STATUS "[ACE] ACE_DEBUG_UAE: '${ACE_DEBUG_UAE}'")
message(STATUS "[ACE] ACE_BOB_WRAP_Y: '${ACE_BOB_WRAP_Y}'")
message(STATUS "[ACE] ACE_BOB_PRISTINE_BUFFER: '${ACE_BOB_PRISTINE_BUFFER}'")
message(STATUS "[ACE] ACE_USE_ECS_FEATURES: '${ACE_USE_ECS_FEATURES}'")
message(STATUS "[ACE] ACE_USE_AGA_FEATURES: '${ACE_USE_AGA_FEATURES}'")
message(STATUS "[ACE] ACE_TILEBUFFER_TILE_TYPE: '${ACE_TILEBUFFER_TILE_TYPE}'")
message(STATUS "[ACE] ACE_SCROLLBUFFER_POT_BITMAP_HEIGHT: '${ACE_SCROLLBUFFER_POT_BITMAP_HEIGHT}'")
message(STATUS "[ACE] ACE_SCROLLBUFFER_ENABLE_SCROLL_X: '${ACE_SCROLLBUFFER_ENABLE_SCROLL_X}'")
message(STATUS "[ACE] ACE_SCROLLBUFFER_ENABLE_SCROLL_Y: '${ACE_SCROLLBUFFER_ENABLE_SCROLL_Y}'")
message(STATUS "[ACE] ACE_SCROLLBUFFER_X_MARGIN_SIZE: '${ACE_SCROLLBUFFER_X_MARGIN_SIZE}'")
message(STATUS "[ACE] ACE_SCROLLBUFFER_Y_MARGIN_SIZE: '${ACE_SCROLLBUFFER_Y_MARGIN_SIZE}'")
message(STATUS "[ACE] ACE_FILE_USE_ONLY_DISK: '${ACE_FILE_USE_ONLY_DISK}'")
================================================
FILE: cmake/ace_functions.cmake
================================================
function(toAbsolute PATH_IN)
if(NOT IS_ABSOLUTE ${${PATH_IN}})
set(${PATH_IN} "${CMAKE_CURRENT_SOURCE_DIR}/${${PATH_IN}}" PARENT_SCOPE)
endif()
endfunction()
function(getToolPath TOOL_NAME TOOL_VAR)
# This should be called from other fns - `ACE_DIR` gets usually populated in parent scope
set(TOOLS_BIN ${ACE_DIR}/tools/bin/)
if(CMAKE_HOST_WIN32)
set(TOOL_PATHS "${TOOL_NAME}.exe" "Debug/${TOOL_NAME}.exe" "Release/${TOOL_NAME}.exe")
else()
set(TOOL_PATHS ${TOOL_NAME})
endif()
foreach(TOOL_CANDIDATE IN LISTS TOOL_PATHS)
set(${TOOL_VAR} ${TOOLS_BIN}${TOOL_CANDIDATE})
if(EXISTS "${${TOOL_VAR}}")
break()
endif()
unset(${TOOL_VAR})
endforeach()
if(NOT DEFINED ${TOOL_VAR})
message(FATAL_ERROR "Couldn't find ${TOOL_NAME} in ${TOOLS_BIN}${TOOL_PATHS} - have you built tools?")
endif()
# Return value
set(${TOOL_VAR} ${${TOOL_VAR}} PARENT_SCOPE)
endfunction()
function(convertPalette TARGET PALETTE_IN PALETTE_OUT)
getToolPath(palette_conv TOOL_PALETTE_CONV)
set(options CONVERT_COLORS AGA_COLORS)
set(oneValArgs)
set(multiValArgs)
cmake_parse_arguments(
convertPalette "${options}" "${oneValArgs}" "${multiValArgs}" ${ARGN}
)
if(${convertPalette_CONVERT_COLORS})
list(APPEND extraFlags "-cc")
endif()
if(${convertPalette_AGA_COLORS})
list(APPEND extraFlags "-aga")
endif()
add_custom_command(
OUTPUT ${PALETTE_OUT}
COMMAND ${TOOL_PALETTE_CONV} ${PALETTE_IN} ${PALETTE_OUT} ${extraFlags}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${PALETTE_IN}
)
target_sources(${TARGET} PUBLIC ${PALETTE_OUT})
endfunction()
function(convertBitmaps)
getToolPath(bitmap_conv TOOL_BITMAP_CONV)
set(options INTERLEAVED EHB)
set(oneValArgs TARGET PALETTE MASK_COLOR)
set(multiValArgs SOURCES DESTINATIONS MASKS)
cmake_parse_arguments(
convertBitmaps "${options}" "${oneValArgs}" "${multiValArgs}" ${ARGN}
)
if(${convertBitmaps_EHB})
list(APPEND extraFlags "-ehb")
endif()
if(${convertBitmaps_INTERLEAVED})
list(APPEND extraFlags "-i")
endif()
list(LENGTH convertBitmaps_SOURCES srcCount)
list(LENGTH convertBitmaps_DESTINATIONS dstCount)
list(LENGTH convertBitmaps_MASKS maskCount)
if(NOT ${srcCount} EQUAL ${dstCount})
message(FATAL_ERROR "[convertBitmaps] SOURCES count doesn't match DESTINATIONS count")
endif()
if(${maskCount} AND NOT ${maskCount} EQUAL ${srcCount})
message(FATAL_ERROR "[convertBitmaps] MASKS count doesn't match SOURCES count")
endif()
if("${convertBitmaps_MASK_COLOR} " STREQUAL " ")
if(${maskCount} GREATER 0)
message(FATAL_ERROR "[convertBitmaps] MASK_COLOR unspecified")
endif()
endif()
MATH(EXPR srcCount "${srcCount}-1")
foreach(bitmap_idx RANGE ${srcCount}) # /path/file.png
list(GET convertBitmaps_SOURCES ${bitmap_idx} bitmapPath)
toAbsolute(bitmapPath)
list(GET convertBitmaps_DESTINATIONS ${bitmap_idx} outPath)
if("${outPath}" STREQUAL "NONE")
set(outPath "")
else()
toAbsolute(outPath)
endif()
if(${maskCount} GREATER 0)
list(GET convertBitmaps_MASKS ${bitmap_idx} maskPath)
if("${maskPath}" STREQUAL "NONE")
set(maskPath "")
else()
toAbsolute(maskPath)
endif()
endif()
set(extraFlagsPerFile ${extraFlags})
if("${outPath} " STREQUAL " ")
list(APPEND extraFlagsPerFile -no)
else()
list(APPEND extraFlagsPerFile -o ${outPath})
endif()
if(NOT "${convertBitmaps_MASK_COLOR} " STREQUAL " ")
list(APPEND extraFlagsPerFile -mc "\"${convertBitmaps_MASK_COLOR}\"")
if("${maskPath} " STREQUAL " ")
list(APPEND extraFlagsPerFile -nmo)
else()
list(APPEND extraFlagsPerFile -mf ${maskPath})
endif()
endif()
add_custom_command(
OUTPUT ${outPath} ${maskPath}
COMMAND ${TOOL_BITMAP_CONV} ${convertBitmaps_PALETTE} ${bitmapPath} ${extraFlagsPerFile}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${convertBitmaps_PALETTE} ${bitmapPath}
)
target_sources(${convertBitmaps_TARGET} PUBLIC ${outPath} ${maskPath})
endforeach()
endfunction()
function(convertFont)
getToolPath(font_conv TOOL_FONT_CONV)
cmake_parse_arguments(args "" "TARGET;SOURCE;DESTINATION;FIRST_CHAR" "" ${ARGN})
toAbsolute(args_SOURCE)
toAbsolute(args_DESTINATION)
get_filename_component(ext ${args_DESTINATION} EXT)
if(ext)
string(SUBSTRING ${ext} 1 -1 ext)
else()
SET(ext "dir")
endif()
if(DEFINED args_FIRST_CHAR)
SET(argsOptional ${argsOptional} -fc ${args_FIRST_CHAR})
endif()
add_custom_command(
OUTPUT ${args_DESTINATION}
COMMAND ${TOOL_FONT_CONV} ${args_SOURCE} ${ext} -out ${args_DESTINATION} ${argsOptional}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${args_SOURCE}
)
target_sources(${args_TARGET} PUBLIC ${args_DESTINATION})
endfunction()
function(transformBitmap)
getToolPath(bitmap_transform TOOL_BITMAP_TRANSFORM)
cmake_parse_arguments(args "" "TARGET;SOURCE;DESTINATION" "TRANSFORM" ${ARGN})
# Make is dumb and randomly has problem with unescaped # or not
set(argsEscaped "")
foreach(arg IN LISTS args_TRANSFORM)
list(APPEND argsEscaped "\"${arg}\"")
endforeach()
add_custom_command(
OUTPUT ${args_DESTINATION}
COMMAND ${TOOL_BITMAP_TRANSFORM} ${args_SOURCE} ${args_DESTINATION} ${argsEscaped}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${args_SOURCE}
)
target_sources(${args_TARGET} PUBLIC ${args_DESTINATION})
endfunction()
function(extractBitmaps)
cmake_parse_arguments(args "" "TARGET;SOURCE;GENERATED_FILE_LIST" "DESTINATIONS" ${ARGN})
list(LENGTH args_DESTINATIONS destArgCount)
MATH(EXPR destCount "${destArgCount} / 5 - 1")
foreach(destIdx RANGE ${destCount})
MATH(EXPR idxOutName "5 * ${destIdx} + 0")
MATH(EXPR idxX "5 * ${destIdx} + 1")
MATH(EXPR idxY "5 * ${destIdx} + 2")
MATH(EXPR idxWidth "5 * ${destIdx} + 3")
MATH(EXPR idxHeight "5 * ${destIdx} + 4")
list(GET args_DESTINATIONS ${idxOutName} outName)
list(GET args_DESTINATIONS ${idxX} X)
list(GET args_DESTINATIONS ${idxY} Y)
list(GET args_DESTINATIONS ${idxWidth} width)
list(GET args_DESTINATIONS ${idxHeight} height)
transformBitmap(
TARGET ${args_TARGET} SOURCE ${args_SOURCE} DESTINATION ${outName}
TRANSFORM -extract ${X} ${Y} ${width} ${height}
)
set(generatedFiles "${generatedFiles};${outName}")
endforeach()
if(DEFINED args_GENERATED_FILE_LIST)
SET(${args_GENERATED_FILE_LIST} ${generatedFiles} PARENT_SCOPE)
endif()
endfunction()
function(convertTileset)
getToolPath(tileset_conv TOOL_TILESET_CONV)
cmake_parse_arguments(
args
"INTERLEAVED;VARIABLE_HEIGHT"
"TARGET;SIZE;SOURCE;DESTINATION;HEIGHT;PALETTE;COLUMN_WIDTH"
"TILE_PATHS" ${ARGN}
)
if(DEFINED args_TILE_PATHS)
foreach(tileNumber ${args_TILE_PATHS})
set(convDepends "${convDepends};${tileNumber}")
endforeach()
else()
message(FATAL_ERROR "No TILE_PATHS param found")
endif()
if(${args_INTERLEAVED})
SET(argsOptional ${argsOptional} -i)
endif()
if(${args_VARIABLE_HEIGHT})
SET(argsOptional ${argsOptional} -vh)
endif()
if(DEFINED args_HEIGHT)
SET(argsOptional ${argsOptional} -h ${args_HEIGHT})
endif()
if(DEFINED args_PALETTE)
SET(argsOptional ${argsOptional} -plt ${args_PALETTE})
endif()
if(DEFINED args_COLUMN_WIDTH)
SET(argsOptional ${argsOptional} -cw ${args_COLUMN_WIDTH})
endif()
add_custom_command(
OUTPUT ${args_DESTINATION}
COMMAND ${TOOL_TILESET_CONV} ${args_SOURCE} ${args_SIZE} ${args_DESTINATION} ${argsOptional}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${convDepends}
)
target_sources(${args_TARGET} PUBLIC ${args_DESTINATION})
endfunction()
function(convertAudio)
getToolPath(audio_conv TOOL_AUDIO_CONV)
cmake_parse_arguments(
args
"STRICT;PTPLAYER;NORMALIZE;COMPRESS;"
"TARGET;SOURCE;DESTINATION;PAD_BYTES;DIVIDE_AMPLITUDE;CHECK_DIVIDED_AMPLITUDE"
"" ${ARGN}
)
if(${args_STRICT})
set(argsOptional ${argsOptional} -strict)
endif()
if(${args_PTPLAYER})
set(argsOptional ${argsOptional} -fpt)
endif()
if(${args_NORMALIZE})
set(argsOptional ${argsOptional} -n)
endif()
if(${args_COMPRESS})
set(argsOptional ${argsOptional} -c)
endif()
if(${args_PAD_BYTES})
set(argsOptional ${argsOptional} -pad ${args_PAD_BYTES})
endif()
if(${args_CHECK_DIVIDED_AMPLITUDE})
set(argsOptional ${argsOptional} -cd ${args_CHECK_DIVIDED_AMPLITUDE})
elseif(${args_DIVIDE_AMPLITUDE})
set(argsOptional ${argsOptional} -d ${args_DIVIDE_AMPLITUDE})
endif()
toAbsolute(args_SOURCE)
toAbsolute(args_DESTINATION)
add_custom_command(
OUTPUT ${args_DESTINATION}
COMMAND ${TOOL_AUDIO_CONV} ${args_SOURCE} -o ${args_DESTINATION} ${argsOptional}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${args_SOURCE}
)
target_sources(${args_TARGET} PUBLIC ${args_DESTINATION})
endfunction()
function(mergeMods)
getToolPath(mod_tool TOOL_MOD_TOOL)
set(cmdParams "")
cmake_parse_arguments(
args
"COMPRESS"
"SAMPLE_PACK;TARGET"
"SOURCES;DESTINATIONS" ${ARGN}
)
if(NOT ("${args_SAMPLE_PACK} " STREQUAL " "))
list(APPEND cmdParams -sp ${args_SAMPLE_PACK})
endif()
if(${args_COMPRESS})
list(APPEND cmdParams -c)
endif()
list(LENGTH args_SOURCES srcCount)
list(LENGTH args_DESTINATIONS dstCount)
if(NOT ${srcCount} EQUAL ${dstCount})
message(FATAL_ERROR "[mergeMods] SOURCES count ${srcCount} doesn't match DESTINATIONS count ${dstCount}")
endif()
MATH(EXPR srcCount "${srcCount}-1")
foreach(mod_idx RANGE ${srcCount})
list(GET args_SOURCES ${mod_idx} inPath)
toAbsolute(inPath)
list(APPEND sourcesAbsolute ${inPath})
list(GET args_DESTINATIONS ${mod_idx} outPath)
toAbsolute(outPath)
list(APPEND destinationsAbsolute ${outPath})
list(APPEND cmdParams -i ${inPath} -o ${outPath})
endforeach()
add_custom_command(
OUTPUT ${destinationsAbsolute}
COMMAND ${TOOL_MOD_TOOL} ${cmdParams}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${sourcesAbsolute}
)
target_sources(${args_TARGET} PUBLIC ${destinationsAbsolute})
endfunction()
function(packDirectory)
getToolPath(pak_tool TOOL_PAK_TOOL)
cmake_parse_arguments(
args
"COMPRESS"
"SOURCE_DIR;DEST_FILE;TARGET;REORDER_FILE"
""
${ARGN}
)
toAbsolute(args_SOURCE_DIR)
toAbsolute(args_DEST_FILE)
FILE(GLOB_RECURSE sourceDirFiles "${args_SOURCE_DIR}/*")
if(${args_COMPRESS})
set(argsOptional ${argsOptional} -c)
endif()
if(NOT "${args_REORDER_FILE} " STREQUAL " ")
set(argsOptional ${argsOptional} -r ${args_REORDER_FILE})
endif()
add_custom_command(
OUTPUT ${args_DEST_FILE}
COMMAND ${TOOL_PAK_TOOL} ${args_SOURCE_DIR} ${args_DEST_FILE} ${argsOptional}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${sourceDirFiles}
)
target_sources(${args_TARGET} PUBLIC ${args_DEST_FILE})
endfunction()
================================================
FILE: cmake/ace_install.cmake
================================================
install(TARGETS ${TARGET_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES ${HEADERS_ACE} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ace)
install(FILES ${HEADERS_ACE_GENERIC} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ace/generic)
install(FILES ${HEADERS_ACE_UTILS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ace/utils)
install(FILES ${HEADERS_ACE_MANAGERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ace/managers)
install(FILES ${HEADERS_ACE_MANAGERS_VP} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ace/managers/viewport)
install(FILES ${HEADERS_FIXMATH} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/fixmath)
================================================
FILE: docs/README.md
================================================
# Documentation
Welcome to the ACE docs! If you're interested in something and it's not covered
here, or you have a hard time understanding something, please submit an issue.
We want to keep those docs as elaborate and easy to understand as possible.
## Installing
- [Compiler setup](installing/compiler.md)
- [Building ACE](installing/ace.md)
- [Building tools](installing/tools.md)
## Tutorial
1. [ACE in a nutshell](programming/ace_in_a_nutshell.md)
1. [Hello World example](programming/hello_world.md)
1. [View & viewports explained](programming/view.md)
1. [AGA support](programming/aga.md)
1. [Blitter](programming/blit.md)
1. [Moving blitted objects](programming/moving_blits.md)
1. [Loading images and displaying background](programming/loading_images.md)
1. [Handling blitted object undraw](programming/blit_undraw.md)
1. [Blitting with masks](programming/blits_with_mask.md)
1. [Using BOBs (Blitter OBjects)](programming/using_bobs.md)
1. [Working with Fonts](programming/fonts.md)
1. [Palettes](programming/palette.md)
1. [Fixed-point math](programming/fixed_point.md)
1. Optimizing blits
1. [Working with Audio](programming/audio.m
gitextract_3xxvfcyb/
├── .codedocs
├── .gitattributes
├── .github/
│ ├── PULL_REQUEST_TEMPLATE/
│ │ ├── minor.md
│ │ ├── new_component.md
│ │ └── significant_changes.md
│ └── pull_request_template.md
├── .gitignore
├── CMakeLists.txt
├── Doxyfile
├── Jenkinsfile
├── LICENSE
├── README.md
├── cmake/
│ ├── CPM.cmake
│ ├── ace_config.cmake
│ ├── ace_functions.cmake
│ └── ace_install.cmake
├── docs/
│ ├── README.md
│ ├── contributing/
│ │ └── codestyle.md
│ ├── installing/
│ │ ├── ace.md
│ │ ├── compiler.md
│ │ └── tools.md
│ ├── palette-plt-v2-changes.md
│ ├── programming/
│ │ ├── ace_in_a_nutshell.md
│ │ ├── advancedsprites.md
│ │ ├── aga.md
│ │ ├── audio.md
│ │ ├── blit.md
│ │ ├── blit_undraw.md
│ │ ├── blits_with_mask.md
│ │ ├── fixed_point.md
│ │ ├── fonts.md
│ │ ├── hello_world.md
│ │ ├── loading_images.md
│ │ ├── moving_blits.md
│ │ ├── os.md
│ │ ├── palette.md
│ │ ├── res/
│ │ │ └── overworld.gpl
│ │ ├── sprites.md
│ │ ├── tilebuffer.md
│ │ ├── using_bobs.md
│ │ └── view.md
│ └── tools/
│ ├── audio_conv.md
│ ├── bitmap_conv.md
│ ├── font_conv.md
│ └── palette_conv.md
├── include/
│ ├── ace/
│ │ ├── generic/
│ │ │ ├── main.h
│ │ │ └── screen.h
│ │ ├── macros.h
│ │ ├── managers/
│ │ │ ├── advancedsprite.h
│ │ │ ├── blit.h
│ │ │ ├── bob.h
│ │ │ ├── copper.h
│ │ │ ├── game.h
│ │ │ ├── joy.h
│ │ │ ├── key.h
│ │ │ ├── log.h
│ │ │ ├── memory.h
│ │ │ ├── mouse.h
│ │ │ ├── ptplayer.h
│ │ │ ├── rand.h
│ │ │ ├── sprite.h
│ │ │ ├── state.h
│ │ │ ├── system.h
│ │ │ ├── timer.h
│ │ │ └── viewport/
│ │ │ ├── camera.h
│ │ │ ├── scrollbuffer.h
│ │ │ ├── simplebuffer.h
│ │ │ └── tilebuffer.h
│ │ ├── types.h
│ │ └── utils/
│ │ ├── bitmap.h
│ │ ├── bmframe.h
│ │ ├── chunky.h
│ │ ├── custom.h
│ │ ├── dir.h
│ │ ├── disk_file.h
│ │ ├── disk_file_private.h
│ │ ├── endian.h
│ │ ├── extview.h
│ │ ├── file.h
│ │ ├── font.h
│ │ ├── mini_std.h
│ │ ├── pak_file.h
│ │ ├── palette.h
│ │ ├── sprite.h
│ │ ├── string.h
│ │ └── tag.h
│ ├── fixmath/
│ │ ├── fix16.h
│ │ ├── fix16_trig_sin_lut.h
│ │ ├── fixmath.h
│ │ ├── fract32.h
│ │ ├── int64.h
│ │ └── uint32.h
│ └── mini_std/
│ ├── ctype.h
│ ├── errno.h
│ ├── printf.h
│ ├── sort_r.h
│ ├── stdint.h
│ ├── stdio.h
│ ├── stdlib.h
│ └── string.h
├── showcase/
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── res/
│ │ ├── amidb32.gpl
│ │ ├── blitToSmall.gpl
│ │ └── pong.gpl
│ └── src/
│ ├── game.c
│ ├── game.h
│ ├── menu/
│ │ ├── menu.c
│ │ ├── menu.h
│ │ ├── menulist.c
│ │ └── menulist.h
│ └── test/
│ ├── blit.c
│ ├── blit.h
│ ├── blitsmalldest.c
│ ├── blitsmalldest.h
│ ├── buffer_scroll.c
│ ├── buffer_scroll.h
│ ├── copper.c
│ ├── copper.h
│ ├── font.c
│ ├── font.h
│ ├── input.c
│ ├── input.h
│ ├── interleaved.c
│ ├── interleaved.h
│ ├── lines.c
│ ├── lines.h
│ ├── twister.c
│ └── twister.h
├── src/
│ ├── ace/
│ │ ├── managers/
│ │ │ ├── advancedsprite.c
│ │ │ ├── blit.c
│ │ │ ├── bob.c
│ │ │ ├── copper.c
│ │ │ ├── game.c
│ │ │ ├── joy.c
│ │ │ ├── key.c
│ │ │ ├── log.c
│ │ │ ├── memory.c
│ │ │ ├── mouse.c
│ │ │ ├── ptplayer.c
│ │ │ ├── rand.c
│ │ │ ├── sprite.c
│ │ │ ├── state.c
│ │ │ ├── system.c
│ │ │ ├── timer.c
│ │ │ └── viewport/
│ │ │ ├── camera.c
│ │ │ ├── scrollbuffer.c
│ │ │ ├── simplebuffer.c
│ │ │ └── tilebuffer.c
│ │ └── utils/
│ │ ├── bitmap.c
│ │ ├── bmframe.c
│ │ ├── chunky.c
│ │ ├── custom.c
│ │ ├── dir.c
│ │ ├── disk_file.c
│ │ ├── extview.c
│ │ ├── file.c
│ │ ├── font.c
│ │ ├── pak_file.c
│ │ ├── palette.c
│ │ ├── sprite.c
│ │ ├── string.c
│ │ └── tag.c
│ ├── fixmath/
│ │ ├── fix16.c
│ │ ├── fix16_exp.c
│ │ ├── fix16_sqrt.c
│ │ ├── fix16_str.c
│ │ ├── fix16_trig.c
│ │ ├── fract32.c
│ │ └── uint32.c
│ └── mini_std/
│ ├── ctype.c
│ ├── errno.c
│ ├── intrin.c
│ ├── printf.c
│ ├── stdio_file.c
│ ├── stdio_putchar.c
│ ├── stdlib.c
│ ├── string.c
│ └── strtoul.c
└── tools/
├── .gitignore
├── CMakeLists.txt
└── src/
├── audio_conv.cpp
├── bitmap_conv.cpp
├── bitmap_transform.cpp
├── common/
│ ├── bitmap.cpp
│ ├── bitmap.h
│ ├── compress.cpp
│ ├── compress.hpp
│ ├── endian.h
│ ├── exception.cpp
│ ├── exception.h
│ ├── flags/
│ │ ├── allow_flags.hpp
│ │ ├── flags.hpp
│ │ ├── flagsfwd.hpp
│ │ └── iterator.hpp
│ ├── fs.cpp
│ ├── fs.h
│ ├── glyph_set.cpp
│ ├── glyph_set.h
│ ├── jsmn.c
│ ├── jsmn.h
│ ├── json.c
│ ├── json.h
│ ├── lodepng.cpp
│ ├── lodepng.h
│ ├── logging.h
│ ├── math.h
│ ├── mod.cpp
│ ├── mod.h
│ ├── palette.cpp
│ ├── palette.h
│ ├── parse.h
│ ├── rgb.cpp
│ ├── rgb.h
│ ├── sfx.cpp
│ ├── sfx.h
│ ├── stream.cpp
│ ├── stream.h
│ ├── utf8.h
│ ├── wav.cpp
│ └── wav.h
├── font_conv.cpp
├── mod_tool.cpp
├── pak_tool.cpp
├── palette_conv.cpp
└── tileset_conv.cpp
SYMBOL INDEX (1302 symbols across 142 files)
FILE: include/ace/generic/main.h
function __stack_chk_fail (line 97) | __attribute__((noreturn))
function main (line 106) | int main(void) {
FILE: include/ace/macros.h
function UWORD (line 32) | static inline UWORD rol16(UWORD uwIn, UBYTE ubRot) {
function UWORD (line 38) | static inline UWORD ror16(UWORD uwIn, UBYTE ubRot) {
function ULONG (line 44) | static inline ULONG rol32(ULONG ulIn, UBYTE ubRot) {
function ULONG (line 50) | static inline ULONG ror32(ULONG ulIn, UBYTE ubRot) {
FILE: include/ace/managers/advancedsprite.h
type tAdvancedSprite (line 23) | typedef struct tAdvancedSprite {
FILE: include/ace/managers/blit.h
type tBlitLineMode (line 52) | typedef enum tBlitLineMode {
FILE: include/ace/managers/bob.h
type tBob (line 59) | typedef struct tBob {
FILE: include/ace/managers/copper.h
type tCopListCreateTags (line 41) | typedef enum tCopListCreateTags {
type tCopMoveCmd (line 63) | typedef struct tCopMoveCmd {
type tCopWaitCmd (line 72) | typedef struct _tCopWaitCmd {
type tCopCmd (line 84) | typedef union _tCopCmd {
type tCopBfr (line 90) | typedef struct _tCopBfr {
type tCopBlock (line 96) | typedef struct _tCopBlock {
type tCopList (line 107) | typedef struct _tCopList {
type tCopManager (line 116) | typedef struct _tCopManager {
type tSpriteMask (line 126) | typedef enum tSpriteMask {
function copSetMoveVal (line 291) | static inline void copSetMoveVal(tCopMoveCmd *pMoveCmd, UWORD uwValue) {
FILE: include/ace/managers/joy.h
type tJoyManager (line 64) | typedef struct _tJoyManager {
FILE: include/ace/managers/key.h
type tKeyManager (line 147) | typedef struct _tKeyManager {
function UBYTE (line 198) | static inline UBYTE keyUse(UBYTE ubKeyCode) {
function keyReset (line 206) | static inline void keyReset(void) {
FILE: include/ace/managers/log.h
type tAvg (line 20) | typedef struct _tAvg {
type tLogManager (line 32) | typedef struct _tLogManager {
FILE: include/ace/managers/mouse.h
type tMouse (line 31) | typedef struct _tMouse {
type tMouseManager (line 42) | typedef struct _tMouseManager {
function mouseSetBounds (line 84) | static inline void mouseSetBounds(
function UWORD (line 99) | static inline UWORD mouseGetX(UBYTE ubMousePort) {
function UWORD (line 108) | static inline UWORD mouseGetY(UBYTE ubMousePort) {
function mouseSetButton (line 120) | static inline void mouseSetButton(
function UBYTE (line 132) | static inline UBYTE mouseCheck(UBYTE ubMousePort, UBYTE ubMouseCode) {
function UBYTE (line 144) | static inline UBYTE mouseUse(UBYTE ubMousePort, UBYTE ubMouseCode) {
function UBYTE (line 159) | static inline UBYTE mouseInRect(UBYTE ubMousePort, tUwRect sRect) {
function mouseSetPosition (line 177) | static inline void mouseSetPosition(
function mouseMoveBy (line 194) | static inline void mouseMoveBy(UBYTE ubMousePort, WORD wDx, WORD wDy) {
function mouseResetPos (line 208) | static inline void mouseResetPos(UBYTE ubMousePort) {
FILE: include/ace/managers/ptplayer.h
type tPtplayerSfx (line 28) | typedef struct _tPtplayerSfx {
type tPtplayerSampleHeader (line 34) | typedef struct _tPtplayerSampleHeader {
type tPtplayerMod (line 44) | typedef struct _tPtplayerMod {
type tPtplayerSamplePack (line 62) | typedef struct tPtplayerSamplePack {
FILE: include/ace/managers/rand.h
type tRandManager (line 18) | typedef struct _tRandManager {
FILE: include/ace/managers/sprite.h
type tSprite (line 28) | typedef struct tSprite {
FILE: include/ace/managers/state.h
type tState (line 21) | typedef struct _tState {
type tStateManager (line 44) | typedef struct _tStateManager {
FILE: include/ace/managers/system.h
type GfxBase (line 116) | struct GfxBase
FILE: include/ace/managers/timer.h
type tTimerManager (line 30) | typedef struct _tTimerManager {
FILE: include/ace/managers/viewport/camera.h
type tCameraManager (line 22) | typedef struct _tCameraManager {
FILE: include/ace/managers/viewport/scrollbuffer.h
type tScrollBufferCreateTags (line 51) | typedef enum tScrollBufferCreateTags {
type tScrollBufferManager (line 74) | typedef struct _tScrollBufferManager {
FILE: include/ace/managers/viewport/simplebuffer.h
type tSimpleBufferCreateTags (line 24) | typedef enum tSimpleBufferCreateTags {
type tSimpleBufferManager (line 42) | typedef struct _tSimpleBufferManager {
FILE: include/ace/managers/viewport/tilebuffer.h
type ACE_TILEBUFFER_TILE_TYPE (line 26) | typedef ACE_TILEBUFFER_TILE_TYPE tTileBufferTileIndex;
type tTileBufferCreateTags (line 28) | typedef enum tTileBufferCreateTags {
type tMarginState (line 98) | typedef struct tMarginState {
type tRedrawState (line 104) | typedef struct tRedrawState {
type tTileBufferManager (line 127) | typedef struct tTileBufferManager {
function UBYTE (line 284) | static inline UBYTE tileBufferGetRawCopperlistInstructionCountStart(UBYT...
function UBYTE (line 288) | static inline UBYTE tileBufferGetRawCopperlistInstructionCountBreak(UBYT...
FILE: include/ace/types.h
type UBYTE (line 26) | typedef uint8_t UBYTE;
type UWORD (line 27) | typedef uint16_t UWORD;
type ULONG (line 28) | typedef uint32_t ULONG;
type BYTE (line 30) | typedef int8_t BYTE;
type WORD (line 31) | typedef int16_t WORD;
type LONG (line 32) | typedef int32_t LONG;
type UWORD (line 118) | typedef UWORD FUBYTE;
type UWORD (line 119) | typedef UWORD FUWORD;
type ULONG (line 120) | typedef ULONG FULONG;
type WORD (line 121) | typedef WORD FBYTE;
type WORD (line 122) | typedef WORD FWORD;
type LONG (line 123) | typedef LONG FLONG;
type tUwCoordYX (line 135) | typedef union _tUwCoordYX {
type tUbCoordYX (line 143) | typedef union _tUbCoordYX {
type tBCoordYX (line 151) | typedef struct _tBCoordYX {
type tWCoordYX (line 156) | typedef struct _tWCoordYX {
type tUwRect (line 164) | typedef struct _tUwRect {
type tUwAbsRect (line 171) | typedef struct _tUwAbsRect {
FILE: include/ace/utils/bitmap.h
type tBitMap (line 28) | typedef struct BitMap tBitMap;
type tBitMap (line 30) | typedef struct _tBitMap {
type tAceBitmap (line 62) | typedef struct _tAceBitmap {
FILE: include/ace/utils/custom.h
type tCustom (line 21) | typedef struct Custom tCustom;
type tRayPos (line 29) | typedef struct _tRayPos {
type tCopperUlong (line 41) | typedef struct _tCopperUlong {
type tCia (line 50) | typedef struct _tCia {
FILE: include/ace/utils/dir.h
type tDir (line 16) | typedef struct _tDir {
FILE: include/ace/utils/disk_file.h
type tDiskFileMode (line 14) | typedef enum tDiskFileMode {
FILE: include/ace/utils/endian.h
function UWORD (line 29) | static inline UWORD endianLittle16(UWORD uwIn) {
function UWORD (line 48) | static inline UWORD endianBig16(UWORD uwIn) {
function ULONG (line 64) | static inline ULONG endianLittle32(ULONG ulIn) {
function ULONG (line 83) | static inline ULONG endianBig32(ULONG ulIn) {
FILE: include/ace/utils/extview.h
type tTagView (line 23) | typedef enum tTagView {
type tTagVport (line 51) | typedef enum tTagVport {
type tViewFlags (line 86) | typedef enum tViewFlags {
type tVpFlag (line 99) | typedef enum tVpFlag {
type tVpManager (line 121) | typedef struct tVpManager {
type tView (line 136) | typedef struct tView {
type tVPort (line 153) | typedef struct _tVPort {
type UCopList (line 319) | struct UCopList
type UCopList (line 321) | struct UCopList
FILE: include/ace/utils/file.h
type ULONG (line 23) | typedef ULONG (*tCbFileRead)(void *pData, void *pDest, ULONG ulSize);
type ULONG (line 24) | typedef ULONG (*tCbFileWrite)(void *pData, const void *pSrc, ULONG ulSize);
type ULONG (line 25) | typedef ULONG (*tCbFileSeek)(void *pData, LONG lPos, WORD wMode);
type ULONG (line 26) | typedef ULONG (*tCbFileGetPos)(void *pData);
type ULONG (line 27) | typedef ULONG (*tCbFileGetSize)(void *pData);
type UBYTE (line 28) | typedef UBYTE (*tCbFileIsEof)(void *pData);
type tFileCallbacks (line 31) | typedef struct tFileCallbacks {
type tFile (line 42) | typedef struct tFile {
FILE: include/ace/utils/font.h
type tFont (line 41) | typedef struct _tFont {
type tTextBitMap (line 56) | typedef struct _tTextBitMap {
FILE: include/ace/utils/mini_std.h
type FILE (line 13) | typedef int FILE;
FILE: include/ace/utils/pak_file.h
type tPakFileEntry (line 17) | typedef struct tPakFileEntry {
type tPakFile (line 24) | typedef struct tPakFile {
FILE: include/ace/utils/tag.h
type ULONG (line 24) | typedef ULONG tTag;
FILE: include/fixmath/fix16.h
type fix16_t (line 35) | typedef int32_t fix16_t;
function fix16_t (line 54) | static inline fix16_t fix16_from_int(int a) { return a * fix16_one; }
function fix16_to_float (line 56) | static inline float fix16_to_float(fix16_t a) { return (float)a / fix1...
function fix16_to_dbl (line 57) | static inline double fix16_to_dbl(fix16_t a) { return (double)a / fix...
function fix16_to_int (line 60) | static inline int fix16_to_int(fix16_t a)
function fix16_t (line 72) | static inline fix16_t fix16_from_float(float a)
function fix16_t (line 81) | static inline fix16_t fix16_from_dbl(double a)
function fix16_t (line 102) | static inline fix16_t fix16_abs(fix16_t x)
function fix16_t (line 104) | static inline fix16_t fix16_floor(fix16_t x)
function fix16_t (line 106) | static inline fix16_t fix16_ceil(fix16_t x)
function fix16_t (line 108) | static inline fix16_t fix16_min(fix16_t x, fix16_t y)
function fix16_t (line 110) | static inline fix16_t fix16_max(fix16_t x, fix16_t y)
function fix16_t (line 112) | static inline fix16_t fix16_clamp(fix16_t x, fix16_t lo, fix16_t hi)
function fix16_t (line 118) | static inline fix16_t fix16_add(fix16_t inArg0, fix16_t inArg1) { return...
function fix16_t (line 119) | static inline fix16_t fix16_sub(fix16_t inArg0, fix16_t inArg1) { return...
function fix16_t (line 199) | static inline fix16_t fix16_rad_to_deg(fix16_t radians)
function fix16_t (line 203) | static inline fix16_t fix16_deg_to_rad(fix16_t degrees)
function fix16_t (line 208) | static inline fix16_t fix16_deg2rad(fix16_t fAngleDegrees) {
function fix16_t (line 214) | static inline fix16_t fix16_rad2deg(fix16_t fAngleRads) {
function fix16_t (line 224) | static inline fix16_t fix16_sq(fix16_t x)
FILE: include/fixmath/fract32.h
type fract32_t (line 11) | typedef uint32_t fract32_t;
FILE: include/fixmath/int64.h
function int64_const (line 10) | static inline int64_t int64_const(int32_t hi, uint32_t lo) { return (((...
function int64_from_int32 (line 11) | static inline int64_t int64_from_int32(int32_t x) { return (int64_t)x; }
function int64_hi (line 12) | static inline int32_t int64_hi(int64_t x) { return (x >> 32); }
function int64_lo (line 13) | static inline uint32_t int64_lo(int64_t x) { return (x & ((1ULL << 32) -...
function int64_add (line 15) | static inline int64_t int64_add(int64_t x, int64_t y) { return (x + y)...
function int64_neg (line 16) | static inline int64_t int64_neg(int64_t x) { return (-x); ...
function int64_sub (line 17) | static inline int64_t int64_sub(int64_t x, int64_t y) { return (x - y)...
function int64_shift (line 18) | static inline int64_t int64_shift(int64_t x, int8_t y) { return (y < 0 ...
function int64_mul_i32_i32 (line 20) | static inline int64_t int64_mul_i32_i32(int32_t x, int32_t y) { return (...
function int64_mul_i64_i32 (line 21) | static inline int64_t int64_mul_i64_i32(int64_t x, int32_t y) { return (...
function int64_div_i64_i32 (line 23) | static inline int64_t int64_div_i64_i32(int64_t x, int32_t y) { return (...
function int64_cmp_eq (line 25) | static inline int int64_cmp_eq(int64_t x, int64_t y) { return (x == y); }
function int64_cmp_ne (line 26) | static inline int int64_cmp_ne(int64_t x, int64_t y) { return (x != y); }
function int64_cmp_gt (line 27) | static inline int int64_cmp_gt(int64_t x, int64_t y) { return (x > y); }
function int64_cmp_ge (line 28) | static inline int int64_cmp_ge(int64_t x, int64_t y) { return (x >= y); }
function int64_cmp_lt (line 29) | static inline int int64_cmp_lt(int64_t x, int64_t y) { return (x < y); }
function int64_cmp_le (line 30) | static inline int int64_cmp_le(int64_t x, int64_t y) { return (x <= y); }
type __int64_t (line 33) | typedef struct {
function __int64_t (line 38) | static inline __int64_t int64_const(int32_t hi, uint32_t lo) { return (_...
function __int64_t (line 39) | static inline __int64_t int64_from_int32(int32_t x) { return (__int64_t)...
function int64_hi (line 40) | static inline int32_t int64_hi(__int64_t x) { return x.hi; }
function int64_lo (line 41) | static inline uint32_t int64_lo(__int64_t x) { return x.lo; }
function int64_cmp_eq (line 43) | static inline int int64_cmp_eq(__int64_t x, __int64_t y) { return ((x.hi...
function int64_cmp_ne (line 44) | static inline int int64_cmp_ne(__int64_t x, __int64_t y) { return ((x.hi...
function int64_cmp_gt (line 45) | static inline int int64_cmp_gt(__int64_t x, __int64_t y) { return ((x.hi...
function int64_cmp_ge (line 46) | static inline int int64_cmp_ge(__int64_t x, __int64_t y) { return ((x.hi...
function int64_cmp_lt (line 47) | static inline int int64_cmp_lt(__int64_t x, __int64_t y) { return ((x.hi...
function int64_cmp_le (line 48) | static inline int int64_cmp_le(__int64_t x, __int64_t y) { return ((x.hi...
function __int64_t (line 50) | static inline __int64_t int64_add(__int64_t x, __int64_t y) {
function __int64_t (line 59) | static inline __int64_t int64_neg(__int64_t x) {
function __int64_t (line 68) | static inline __int64_t int64_sub(__int64_t x, __int64_t y) {
function __int64_t (line 72) | static inline __int64_t int64_shift(__int64_t x, int8_t y) {
function __int64_t (line 89) | static inline __int64_t int64_mul_i32_i32(int32_t x, int32_t y) {
function __int64_t (line 103) | static inline __int64_t int64_mul_i64_i32(__int64_t x, int32_t y) {
function __int64_t (line 125) | static inline __int64_t int64_div_i64_i32(__int64_t x, int32_t y) {
FILE: include/mini_std/sort_r.h
function _SORT_R_INLINE (line 56) | static _SORT_R_INLINE void sort_r_swap(char *__restrict a, char *__restr...
function _SORT_R_INLINE (line 66) | static _SORT_R_INLINE int sort_r_cmpswap(char *__restrict a,
function _SORT_R_INLINE (line 89) | static _SORT_R_INLINE void sort_r_swap_blocks(char *ptr, size_t na, size...
function _SORT_R_INLINE (line 99) | static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w,
function _SORT_R_INLINE (line 224) | static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width,
type sort_r_data (line 255) | struct sort_r_data
function _SORT_R_INLINE (line 261) | static _SORT_R_INLINE int sort_r_arg_swap(void *s,
function _SORT_R_INLINE (line 281) | static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width,
FILE: include/mini_std/stdio.h
type FILE (line 15) | typedef int FILE;
function vsprintf (line 40) | static inline int vsprintf(char *restrict buffer, const char *restrict f...
FILE: showcase/src/game.c
function genericCreate (line 37) | void genericCreate(void) {
function genericProcess (line 45) | void genericProcess(void) {
function genericDestroy (line 52) | void genericDestroy(void) {
function createGameStates (line 59) | void createGameStates(void) {
function destroyGameStates (line 63) | void destroyGameStates(void) {
FILE: showcase/src/game.h
type tTestState (line 14) | typedef enum tTestState {
FILE: showcase/src/menu/menu.c
function gsMenuCreate (line 27) | void gsMenuCreate(void) {
function gsMenuLoop (line 68) | void gsMenuLoop(void) {
function gsMenuDestroy (line 119) | void gsMenuDestroy(void) {
function menuDrawBg (line 131) | void menuDrawBg(void) {
function menuShowMain (line 158) | void menuShowMain(void) {
function menuSelectMain (line 182) | void menuSelectMain(void) {
function menuShowTests (line 198) | void menuShowTests(void) {
function menuSelectTests (line 228) | void menuSelectTests(void) {
function menuShowExamples (line 239) | void menuShowExamples(void) {
function menuSelectExamples (line 260) | void menuSelectExamples(void) {
FILE: showcase/src/menu/menulist.c
function tMenuList (line 9) | tMenuList *menuListCreate(
function menuListDestroy (line 46) | void menuListDestroy(tMenuList *pList) {
function menuListSetEntry (line 54) | void menuListSetEntry(tMenuList *pList, UBYTE ubIdx, UBYTE ubDisplay, ch...
function menuListDrawPos (line 65) | void menuListDrawPos(tMenuList *pList, UBYTE ubIdx) {
function menuListDraw (line 95) | void menuListDraw(tMenuList *pList) {
function menuListMove (line 103) | void menuListMove(tMenuList *pList, BYTE bMoveDir) {
function menuListResetCount (line 124) | void menuListResetCount(tMenuList *pList, UBYTE ubCount) {
FILE: showcase/src/menu/menulist.h
type tMenuEntry (line 22) | typedef struct _tMenuEntry {
type tMenuList (line 28) | typedef struct _tMenuList {
type _tMenuList (line 44) | struct _tMenuList
FILE: showcase/src/test/blit.c
function gsTestBlitCreate (line 23) | void gsTestBlitCreate(void) {
function gsTestBlitLoop (line 53) | void gsTestBlitLoop(void) {
function gsTestBlitDestroy (line 164) | void gsTestBlitDestroy(void) {
FILE: showcase/src/test/blitsmalldest.c
function prepareRefBitmap (line 24) | void prepareRefBitmap(void) {
function gsTestBlitSmallDestCreate (line 42) | void gsTestBlitSmallDestCreate(void) {
function gsTestBlitSmallDestLoop (line 66) | void gsTestBlitSmallDestLoop(void) {
function gsTestBlitSmallDestDestroy (line 95) | void gsTestBlitSmallDestDestroy(void) {
FILE: showcase/src/test/buffer_scroll.c
type tMode (line 16) | typedef enum tMode {
function drawModeInfo (line 38) | static void drawModeInfo(tBitMap *pBfr, UWORD uwX, UWORD uwY) {
function fillBfr (line 49) | static void fillBfr(tBitMap *pBfr, UWORD uwWidth, UWORD uwHeight) {
function initSimpleBuffer (line 87) | static void initSimpleBuffer(UBYTE isHires, UWORD uwWidth, UWORD uwHeigh...
function initScrollBuffer (line 115) | static void initScrollBuffer(UBYTE isHires) {
function changeMode (line 165) | static void changeMode(tMode eMode) {
function gsTestBufferScrollCreate (line 185) | void gsTestBufferScrollCreate(void) {
function gsTestBufferScrollLoop (line 199) | void gsTestBufferScrollLoop(void) {
function gsTestBufferScrollDestroy (line 238) | void gsTestBufferScrollDestroy(void) {
FILE: showcase/src/test/copper.c
function UWORD (line 31) | static UWORD colorHSV(UBYTE ubH, UBYTE ubS, UBYTE ubV) {
function gsTestCopperCreate (line 66) | void gsTestCopperCreate(void) {
function gsTestCopperLoop (line 193) | void gsTestCopperLoop(void) {
function gsTestCopperDestroy (line 275) | void gsTestCopperDestroy(void) {
FILE: showcase/src/test/font.c
function gsTestFontCreate (line 25) | void gsTestFontCreate(void) {
function gsTestFontTableLoop (line 60) | void gsTestFontTableLoop(void) {
function gsTestFontSentenceLoop (line 93) | void gsTestFontSentenceLoop(void) {
function gsTestFontDestroy (line 134) | void gsTestFontDestroy(void) {
function testFontDrawTable (line 145) | void testFontDrawTable(void) {
function testFontDrawSentence (line 195) | void testFontDrawSentence(void) {
FILE: showcase/src/test/input.c
type tJoyInputState (line 30) | typedef enum tJoyInputState {
type tButtonDef (line 36) | typedef struct tButtonDef {
function drawButtonAt (line 86) | static void drawButtonAt(const tButtonDef *pDef, UBYTE ubColor) {
function updateJoyState (line 96) | static void updateJoyState(UBYTE ubJoyIndex) {
function showParallelStatus (line 117) | static void showParallelStatus(void) {
function gsTestInputCreate (line 124) | void gsTestInputCreate(void) {
function gsTestInputLoop (line 179) | void gsTestInputLoop(void) {
function gsTestInputDestroy (line 203) | void gsTestInputDestroy(void) {
FILE: showcase/src/test/interleaved.c
function gsTestInterleavedCreate (line 27) | void gsTestInterleavedCreate(void) {
function gsTestInterleavedLoop (line 63) | void gsTestInterleavedLoop(void) {
function gsTestInterleavedDestroy (line 104) | void gsTestInterleavedDestroy(void) {
FILE: showcase/src/test/lines.c
function gsTestLinesCreate (line 27) | void gsTestLinesCreate(void) {
function gsTestLinesLoop (line 78) | void gsTestLinesLoop(void) {
function gsTestLinesDestroy (line 153) | void gsTestLinesDestroy(void) {
FILE: showcase/src/test/twister.c
function testGrid (line 37) | static void testGrid(UBYTE ubSize) {
function gsTestTwisterCreate (line 49) | void gsTestTwisterCreate(void) {
function gsTestTwisterLoop (line 82) | void gsTestTwisterLoop(void) {
function gsTestTwisterDestroy (line 213) | void gsTestTwisterDestroy(void) {
FILE: src/ace/managers/advancedsprite.c
function tAdvancedSprite (line 15) | tAdvancedSprite *advancedSpriteAdd(UBYTE ubChannelIndex, UWORD uwSpriteH...
function advancedSpriteRemove (line 186) | void advancedSpriteRemove(tAdvancedSprite *pAdvancedSprite) {
function advancedSpriteSetEnabled (line 198) | void advancedSpriteSetEnabled(tAdvancedSprite *pAdvancedSprite, UBYTE is...
function advancedSpriteSetPos (line 204) | void advancedSpriteSetPos(tAdvancedSprite *pAdvancedSprite,WORD wX, WORD...
function advancedSpriteSetPosX (line 210) | void advancedSpriteSetPosX(tAdvancedSprite *pAdvancedSprite,WORD wX) {
function advancedSpriteSetPosY (line 215) | void advancedSpriteSetPosY(tAdvancedSprite *pAdvancedSprite, WORD wY) {
function advancedSpriteSetFrame (line 220) | void advancedSpriteSetFrame(tAdvancedSprite *pAdvancedSprite, UWORD anim...
function advancedSpriteProcessChannel (line 233) | void advancedSpriteProcessChannel(tAdvancedSprite *pAdvancedSprite) {
function UWORD (line 240) | UWORD addAttachedX(tAdvancedSprite *pAdvancedSprite, UBYTE spriteindex) {
function advancedSpriteProcess (line 248) | void advancedSpriteProcess(tAdvancedSprite *pAdvancedSprite) {
FILE: src/ace/managers/blit.c
function blitManagerCreate (line 8) | void blitManagerCreate(void) {
function blitManagerDestroy (line 14) | void blitManagerDestroy(void) {
function UBYTE (line 21) | UBYTE _blitCheck(
function blitWait (line 103) | void blitWait(void) {
function UBYTE (line 110) | UBYTE blitIsIdle(void) {
function UBYTE (line 120) | UBYTE blitUnsafeCopy(
function UBYTE (line 244) | UBYTE blitSafeCopy(
function UBYTE (line 261) | UBYTE blitUnsafeCopyAligned(
function UBYTE (line 322) | UBYTE blitSafeCopyAligned(
function UBYTE (line 354) | UBYTE blitUnsafeCopyMask(
function UBYTE (line 483) | UBYTE blitSafeCopyMask(
function UBYTE (line 494) | UBYTE blitUnsafeRect(
function UBYTE (line 548) | UBYTE blitSafeRect(
function blitUnsafeFillAligned (line 559) | void blitUnsafeFillAligned(
function UBYTE (line 592) | UBYTE blitSafeFillAligned(
function blitLine (line 608) | void blitLine(
function blitLinePlane (line 680) | void blitLinePlane(
FILE: src/ace/managers/bob.c
type tBobQueue (line 23) | typedef struct tBobQueue {
function bobCheckGood (line 55) | static void bobCheckGood(const tBitMap *pBack) {
function bobDeallocBuffers (line 70) | static void bobDeallocBuffers(void) {
function ULONG (line 95) | static ULONG bobCalculateBitplaneOffset(const tBob *pBob, tBitMap *pDest...
function bobManagerReset (line 110) | void bobManagerReset(void) {
function bobReallocateBuffers (line 169) | void bobReallocateBuffers(void) {
function bobManagerDestroy (line 194) | void bobManagerDestroy(void) {
function bobPush (line 198) | void bobPush(tBob *pBob) {
function bobInit (line 207) | void bobInit(
function bobSetFrame (line 248) | void bobSetFrame(tBob *pBob, UBYTE *pFrameData, UBYTE *pMaskData) {
function bobSetWidth (line 253) | void bobSetWidth(tBob *pBob, UWORD uwWidth)
function bobSetHeight (line 269) | void bobSetHeight(tBob *pBob, UWORD uwHeight)
function UBYTE (line 285) | UBYTE *bobCalcFrameAddress(tBitMap *pBitmap, UWORD uwOffsetY) {
function UBYTE (line 292) | UBYTE bobProcessNext(void) {
function bobBegin (line 429) | void bobBegin(tBitMap *pBuffer) {
function bobPushingDone (line 545) | void bobPushingDone(void) {
function bobProcessAll (line 549) | void bobProcessAll(void) {
function UBYTE (line 553) | UBYTE bobGetCurrentBufferIndex(void) {
function bobEnd (line 557) | void bobEnd(void) {
function bobDiscardUndraw (line 564) | void bobDiscardUndraw(void) {
function bobSetCurrentBuffer (line 569) | void bobSetCurrentBuffer(tBitMap *pCurrent) {
FILE: src/ace/managers/copper.c
function copCreate (line 14) | void copCreate(void) {
function copDestroy (line 33) | void copDestroy(void) {
function copSwapBuffers (line 48) | void copSwapBuffers(void) {
function copDumpCmd (line 59) | void copDumpCmd(tCopCmd *pCmd) {
function copDumpBlocks (line 133) | void copDumpBlocks(void) {
function copDumpBfr (line 173) | void copDumpBfr(tCopBfr *pBfr) {
function tCopList (line 187) | tCopList *copListCreate(void *pTagList, ...) {
function copListDestroy (line 244) | void copListDestroy(tCopList *pCopList) {
function tCopBlock (line 270) | tCopBlock *copBlockCreate(tCopList *pCopList, UWORD uwMaxCmds, UWORD uwW...
function copBlockDestroy (line 305) | void copBlockDestroy(tCopList *pCopList, tCopBlock *pBlock) {
function copBlockEnable (line 338) | void copBlockEnable(tCopList *pCopList, tCopBlock *pBlock) {
function copBlockDisable (line 345) | void copBlockDisable(tCopList *pCopList, tCopBlock *pBlock) {
function UBYTE (line 351) | UBYTE copBfrRealloc(void) {
function copReorderBlocks (line 388) | void copReorderBlocks(void) {
function UBYTE (line 417) | UBYTE copUpdateFromBlocks(void) {
function copProcessBlocks (line 535) | void copProcessBlocks(void) {
function copBlockWait (line 561) | void copBlockWait(tCopList *pCopList, tCopBlock *pBlock, UWORD uwX, UWOR...
function copMove (line 569) | void copMove(tCopList *pCopList, tCopBlock *pBlock, volatile void *pAddr...
function copSetWait (line 578) | void copSetWait(tCopWaitCmd *pWaitCmd, UBYTE ubX, UBYTE ubY) {
function copSetMove (line 588) | void copSetMove(tCopMoveCmd *pMoveCmd, volatile void *pAddr, UWORD uwVal...
FILE: src/ace/managers/game.c
function gameExit (line 11) | void gameExit(void) {
function UBYTE (line 15) | UBYTE gameIsRunning(void) {
FILE: src/ace/managers/joy.c
type Library (line 21) | struct Library
function joyOpen (line 35) | void joyOpen(void) {
function joyClose (line 44) | void joyClose(void) {
function joySetState (line 54) | void joySetState(UBYTE ubJoyCode, UBYTE ubJoyState) {
function UBYTE (line 58) | UBYTE joyCheck(UBYTE ubJoyCode) {
function UBYTE (line 62) | UBYTE joyUse(UBYTE ubJoyCode) {
function joyProcess (line 70) | void joyProcess(void) {
function UBYTE (line 129) | UBYTE joyEnableParallel(void) {
function joyDisableParallel (line 178) | void joyDisableParallel(void) {
function UBYTE (line 197) | UBYTE joyIsParallelEnabled(void) {
FILE: src/ace/managers/key.c
function keyIntSetState (line 18) | static inline void keyIntSetState(
function UBYTE (line 27) | static inline UBYTE keyIntCheck(const tKeyManager *pManager, UBYTE ubKey...
function UBYTE (line 31) | UBYTE keyCheck(UBYTE ubKeyCode) {
function keySetState (line 35) | void keySetState(UBYTE ubKeyCode, UBYTE ubKeyState) {
function onRawKeyInput (line 39) | void onRawKeyInput(UBYTE ubRawKey) {
function INTERRUPT (line 51) | INTERRUPT onKeyInterrupt(
function keyCreate (line 101) | void keyCreate(void) {
function keyDestroy (line 114) | void keyDestroy(void) {
function keyProcess (line 127) | void keyProcess(void) {
FILE: src/ace/managers/log.c
function uaeWrite (line 22) | static inline void uaeWrite(const char *szMsg) {
function uaeWrite (line 28) | static inline void uaeWrite(const char *szMsg) {
function UBYTE (line 40) | static UBYTE isWritingToFileAllowed(void) {
function _logOpen (line 48) | void _logOpen(const char *szFilePath) {
function _logPushIndent (line 57) | void _logPushIndent(void) {
function _logPopIndent (line 61) | void _logPopIndent(void) {
function _logWrite (line 65) | void _logWrite(char *szFormat, ...) {
function _logWriteVa (line 72) | void _logWriteVa(char *szFormat, va_list vaArgs) {
function _logClose (line 106) | void _logClose(void) {
function _logBlockBegin (line 119) | void _logBlockBegin(char *szBlockName, ...) {
function _logBlockEnd (line 144) | void _logBlockEnd(char *szBlockName) {
function tAvg (line 180) | tAvg *_logAvgCreate(char *szName, UWORD uwAllocCount) {
function _logAvgDestroy (line 192) | void _logAvgDestroy(tAvg *pAvg) {
function _logAvgBegin (line 198) | void _logAvgBegin(tAvg *pAvg) {
function _logAvgEnd (line 202) | void _logAvgEnd(tAvg *pAvg) {
function _logAvgWrite (line 220) | void _logAvgWrite(tAvg *pAvg) {
function _logPushInt (line 243) | void _logPushInt(void) {
function _logPopInt (line 247) | void _logPopInt(void) {
FILE: src/ace/managers/memory.c
type tMemEntry (line 17) | typedef struct _tMemEntry {
function _memEntryAdd (line 32) | static void _memEntryAdd(
function ULONG (line 74) | static ULONG _memEntryDelete(
function memEntryCheckTrash (line 125) | static void memEntryCheckTrash(
function _memCheckIntegrity (line 146) | void _memCheckIntegrity(UWORD uwLine, const char *szFile) {
function _memCreate (line 156) | void _memCreate(void) {
function _memDestroy (line 165) | void _memDestroy(void) {
function _memFreeDbg (line 212) | void _memFreeDbg(
function _memFreeRls (line 241) | void _memFreeRls(void *pMem, ULONG ulSize) {
function _memCheckTrashAtAddr (line 251) | void _memCheckTrashAtAddr(void *pMem, UWORD uwLine, const char *szFile) {
function _memLogPeak (line 267) | void _memLogPeak(void) {
function UBYTE (line 274) | UBYTE memType(const void *pMem) {
function ULONG (line 286) | ULONG memGetFreeChipSize(void) {
function ULONG (line 290) | ULONG memGetFreeSize(void) {
FILE: src/ace/managers/mouse.c
function mouseCreate (line 14) | void mouseCreate(UBYTE ubPortFlags) {
function mouseDestroy (line 45) | void mouseDestroy(void) {
function mouseProcessPort (line 53) | static void mouseProcessPort(
function mouseProcess (line 97) | void mouseProcess(void) {
FILE: src/ace/managers/ptplayer.c
type tChannelRegs (line 84) | typedef struct AudChannel tChannelRegs;
type tModVoice (line 89) | typedef struct _tModVoice {
type tChannelStatus (line 105) | typedef struct _tChannelStatus {
type tChannelDone (line 229) | typedef union _tChannelDone {
function clearAudioDone (line 1005) | static void clearAudioDone(void) {
function setAudioDone (line 1021) | static void setAudioDone(UNUSED_ARG tChannelStatus *pChannelData) {
function UBYTE (line 1027) | static UBYTE isChannelDone(tChannelStatus *pChannelData) {
function printVoices (line 1047) | static void printVoices(UNUSED_ARG const tModVoice *pVoices) {
function UBYTE (line 1116) | static inline UBYTE findPeriod(const UWORD *pPeriods, UWORD uwNote) {
function ptSongStep (line 1127) | static void ptSongStep(void) {
function startSfx (line 1150) | static void startSfx(
function moreBlockedFx (line 1190) | void moreBlockedFx(
function mt_updatefunk (line 1204) | static void mt_updatefunk(tChannelStatus *pChannelData) {
function checkmorefx (line 1220) | static void checkmorefx(
function mt_playvoice (line 1235) | static void mt_playvoice(
function mt_checkfx (line 1347) | static void mt_checkfx(
function intPlay (line 1399) | static void intPlay() {
function mt_TimerAInt (line 1412) | static void mt_TimerAInt(
function ptplayerEnableMainHandler (line 1423) | static inline void ptplayerEnableMainHandler(UBYTE isEnabled) {
function setChannelRepeat (line 1441) | static inline void setChannelRepeat(
function intSetRep (line 1466) | static void intSetRep(volatile tCustom *pCustom) {
function intDmaOn (line 1489) | static void intDmaOn() {
function mt_TimerBInt (line 1497) | static void mt_TimerBInt(
function chan_sfx_only (line 1521) | static void chan_sfx_only(
function mt_sfxonly (line 1537) | void mt_sfxonly(void) {
function mt_music (line 1555) | static void mt_music(void) {
function resetChannel (line 1645) | static void resetChannel(tChannelStatus *pChannel) {
function ptplayerStop (line 1656) | void ptplayerStop(void) {
function setTempo (line 1674) | static inline void setTempo(UWORD uwTempo) {
function mt_reset (line 1680) | static void mt_reset(void) {
function onAudio (line 1732) | static void INTERRUPT onAudio(
function ptplayerDestroy (line 1749) | void ptplayerDestroy(void) {
function ptplayerCreate (line 1763) | void ptplayerCreate(UBYTE isPal) {
function ptplayerSetPal (line 1799) | void ptplayerSetPal(UBYTE isPal) {
function ptplayerLoadMod (line 1815) | void ptplayerLoadMod(
function ptplayerSetMusicChannelMask (line 1873) | void ptplayerSetMusicChannelMask(UBYTE ChannelMask) {
function setAllVolumes (line 1883) | static void setAllVolumes(void) {
function ptplayerSetMasterVolume (line 1899) | void ptplayerSetMasterVolume(UBYTE ubMasterVolume) {
function ptplayerSetChannelsForPlayer (line 1911) | void ptplayerSetChannelsForPlayer(UBYTE ubChannelMask) {
function mt_toneporta_nc (line 1923) | static void mt_toneporta_nc(
function mt_vibrato_nc (line 1957) | static void mt_vibrato_nc(
function mt_nop (line 1987) | static void mt_nop(
function mt_arpeggio (line 1994) | static void mt_arpeggio(
function ptDoPortaUp (line 2027) | static void ptDoPortaUp(
function mt_portaup (line 2036) | static void mt_portaup(
function ptDoPortaDn (line 2044) | static void ptDoPortaDn(
function mt_portadown (line 2053) | static void mt_portadown(
function mt_toneporta (line 2061) | static void mt_toneporta(
function mt_vibrato (line 2073) | static void mt_vibrato(
function ptVolSlide (line 2095) | static void ptVolSlide(
function mt_volumeslide (line 2105) | static void mt_volumeslide(
function mt_tonevolslide (line 2124) | static void mt_tonevolslide(
function mt_vibrvolslide (line 2135) | static void mt_vibrvolslide(
function mt_tremolo (line 2151) | static void mt_tremolo(
function mt_e_cmds (line 2200) | static void mt_e_cmds(
function mt_posjump (line 2239) | static void mt_posjump(
function mt_patternbrk (line 2249) | static void mt_patternbrk(
function blocked_e_cmds (line 2272) | static void blocked_e_cmds(
function mt_setspeed (line 2287) | static void mt_setspeed(
function mt_pernop (line 2304) | static void mt_pernop(
function mt_volchange (line 2312) | static void mt_volchange(
function mt_sampleoffset (line 2323) | static void mt_sampleoffset(
function mt_filter (line 2369) | static void mt_filter(
function mt_fineportaup (line 2382) | static void mt_fineportaup(
function mt_fineportadn (line 2392) | static void mt_fineportadn(
function mt_glissctrl (line 2402) | static void mt_glissctrl(
function mt_vibratoctrl (line 2410) | static void mt_vibratoctrl(
function mt_finetune (line 2418) | static void mt_finetune(
function mt_jumploop (line 2427) | static void mt_jumploop(
function mt_tremoctrl (line 2456) | static void mt_tremoctrl(
function mt_e8 (line 2464) | static void mt_e8(
function ptDoRetrigger (line 2475) | static void ptDoRetrigger(
function mt_retrignote (line 2486) | static void mt_retrignote(
function mt_volfineup (line 2515) | static void mt_volfineup(
function mt_volfinedn (line 2524) | static void mt_volfinedn(
function mt_notecut (line 2533) | static void mt_notecut(
function mt_notedelay (line 2543) | static void mt_notedelay(
function mt_patterndelay (line 2556) | static void mt_patterndelay(
function mt_funk (line 2567) | static void mt_funk(
function set_period (line 2611) | static void set_period(
function set_finetune (line 2649) | static void set_finetune(
function set_sampleoffset (line 2660) | static void set_sampleoffset(
function set_toneporta (line 2671) | static void set_toneporta(
function ULONG (line 2723) | static inline ULONG getClockConstant(void) {
function ptplayerSfxDecompress (line 2727) | static void ptplayerSfxDecompress(
function ptplayerProcess (line 2780) | void ptplayerProcess(void) {
function tModVoice (line 2797) | const tModVoice *ptplayerGetCurrentVoices(void) {
function ptplayerGetVoiceProgress (line 2806) | void ptplayerGetVoiceProgress(UWORD *pCurr, UWORD *pMax) {
function ptplayerEnableMusic (line 2811) | void ptplayerEnableMusic(UBYTE isEnabled) {
function UBYTE (line 2816) | UBYTE ptplayerGetE8(void) {
function ptplayerReserveChannelsForMusic (line 2820) | void ptplayerReserveChannelsForMusic(UBYTE ubChannelCount) {
function ptplayerSetSampleVolume (line 2824) | void ptplayerSetSampleVolume(UBYTE ubSampleIndex, UBYTE ubVolume) {
function tPtplayerMod (line 2828) | tPtplayerMod *ptplayerModCreateFromPath(const char *szPath) {
function tPtplayerMod (line 2832) | tPtplayerMod *ptplayerModCreateFromFd(tFile *pFileMod) {
function ptplayerModDestroy (line 2917) | void ptplayerModDestroy(tPtplayerMod *pMod) {
function tPtplayerSfx (line 2935) | tPtplayerSfx *ptplayerSfxCreateFromPath(const char *szPath, UBYTE isFast) {
function tPtplayerSfx (line 2939) | tPtplayerSfx *ptplayerSfxCreateFromFd(tFile *pFileSfx, UBYTE isFast)
function ptplayerSfxDestroy (line 3012) | void ptplayerSfxDestroy(tPtplayerSfx *pSfx) {
function channelSetSfx (line 3047) | static void channelSetSfx(
function ptplayerSfxStopOnChannel (line 3058) | void ptplayerSfxStopOnChannel(UBYTE ubChannel) {
function ptplayerSfxPlayLooped (line 3076) | void ptplayerSfxPlayLooped(
function ptplayerSfxPlay (line 3088) | void ptplayerSfxPlay(
function ptplayerWaitForSfx (line 3255) | void ptplayerWaitForSfx(void) {
function ptplayerConfigureSongRepeat (line 3272) | void ptplayerConfigureSongRepeat(UBYTE isRepeat, tPtplayerCbSongEnd cbSo...
function UBYTE (line 3277) | UBYTE ptplayerSfxLengthInFrames(const tPtplayerSfx *pSfx) {
function tPtplayerSamplePack (line 3285) | tPtplayerSamplePack *ptplayerSampleDataCreateFromPath(const char *szPath) {
function tPtplayerSamplePack (line 3289) | tPtplayerSamplePack *ptplayerSampleDataCreateFromFd(tFile *pFileSamples)
function ptplayerSamplePackDestroy (line 3359) | void ptplayerSamplePackDestroy(tPtplayerSamplePack *pSamplePack) {
function ptplayerSetE8Callback (line 3369) | void ptplayerSetE8Callback(tPtplayerCbE8 cbOnE8) {
FILE: src/ace/managers/rand.c
function tRandManager (line 24) | tRandManager *randCreate(UWORD uwSeed1, UWORD uwSeed2) {
function randDestroy (line 30) | void randDestroy(tRandManager *pRand) {
function randInit (line 34) | void randInit(tRandManager *pRand, UWORD uwSeed1, UWORD uwSeed2) {
function UWORD (line 49) | UWORD randUw(tRandManager *pRand) {
function UWORD (line 56) | UWORD randUwMax(tRandManager *pRand, UWORD uwMax) {
function UWORD (line 60) | UWORD randUwMinMax(tRandManager *pRand, UWORD uwMin, UWORD uwMax) {
function ULONG (line 64) | ULONG randUl(tRandManager *pRand) {
function ULONG (line 70) | ULONG randUlMax(tRandManager *pRand, ULONG ulMax) {
function ULONG (line 74) | ULONG randUlMinMax(tRandManager *pRand, ULONG ulMin, ULONG ulMax) {
FILE: src/ace/managers/sprite.c
type tSpriteChannel (line 17) | typedef struct tSpriteChannel {
function spriteChannelRequestCopperUpdate (line 30) | static void spriteChannelRequestCopperUpdate(tSpriteChannel *pChannel) {
function spriteManagerCreate (line 34) | void spriteManagerCreate(const tView *pView, UWORD uwRawCopPos, ULONG pB...
function spriteManagerDestroy (line 78) | void spriteManagerDestroy(void) {
function tSprite (line 95) | tSprite *spriteAdd(UBYTE ubChannelIndex, tBitMap *pBitmap) {
function spriteRemove (line 129) | void spriteRemove(tSprite *pSprite) {
function spriteSetEnabled (line 151) | void spriteSetEnabled(tSprite *pSprite, UBYTE isEnabled) {
function spriteSetAttached (line 157) | void spriteSetAttached(tSprite *pSprite, UBYTE isAttached) {
function spriteRequestMetadataUpdate (line 171) | void spriteRequestMetadataUpdate(tSprite *pSprite) {
function spriteSetBitmap (line 175) | void spriteSetBitmap(tSprite *pSprite, tBitMap *pBitmap) {
function spriteProcessChannel (line 204) | void spriteProcessChannel(UBYTE ubChannelIndex) {
function spriteProcess (line 243) | void spriteProcess(tSprite *pSprite) {
function spriteSetHeight (line 275) | void spriteSetHeight(tSprite *pSprite, UWORD uwHeight) {
FILE: src/ace/managers/state.c
function _checkNull (line 13) | static void _checkNull(
function tStateManager (line 28) | tStateManager *stateManagerCreate(void) {
function stateManagerDestroy (line 38) | void stateManagerDestroy(tStateManager *pStateManager) {
function tState (line 50) | tState *stateCreate(
function stateDestroy (line 73) | void stateDestroy(tState *pState) {
function statePush (line 83) | void statePush(tStateManager *pStateManager, tState *pState) {
function statePop (line 109) | void statePop(tStateManager *pStateManager) {
function statePopAll (line 128) | void statePopAll(tStateManager *pStateManager) {
function stateChange (line 144) | void stateChange(tStateManager *pStateManager, tState *pState) {
function stateProcess (line 176) | void stateProcess(tStateManager *pStateManager) {
FILE: src/ace/managers/system.c
type tAceInterrupt (line 53) | typedef struct _tAceInterrupt {
type tCpuCacheFlags (line 128) | typedef struct tCpuCacheFlags {
type GfxBase (line 136) | struct GfxBase
type View (line 137) | struct View
type IOAudio (line 139) | struct IOAudio
type IOStdReq (line 140) | struct IOStdReq
type Library (line 141) | struct Library
type Process (line 142) | struct Process
type MsgPort (line 143) | struct MsgPort
type IOStdReq (line 144) | struct IOStdReq
type Interrupt (line 145) | struct Interrupt
type Interrupt (line 146) | struct Interrupt
type Interrupt (line 147) | struct Interrupt
type Interrupt (line 148) | struct Interrupt
type DosLibrary (line 155) | struct DosLibrary
type ExecBase (line 156) | struct ExecBase
type Message (line 157) | struct Message
type WBStartup (line 159) | struct WBStartup
function HWINTERRUPT (line 171) | HWINTERRUPT int1Handler(void) {
function HWINTERRUPT (line 178) | HWINTERRUPT int2Handler(void) {
function HWINTERRUPT (line 220) | HWINTERRUPT int3Handler(void) {
function HWINTERRUPT (line 262) | HWINTERRUPT int4Handler(void) {
function HWINTERRUPT (line 304) | HWINTERRUPT int5Handler(void) {
function HWINTERRUPT (line 311) | HWINTERRUPT int6Handler(void) {
function HWINTERRUPT (line 357) | HWINTERRUPT int7Handler(void) {
function ULONG (line 365) | static ULONG aceInputHandler(void) {
function ULONG (line 386) | ULONG ciaIcrHandler(void) {
function osIntVector (line 398) | void osIntVector(void) {
function ULONG (line 413) | ULONG osIntServer(void) {
type MsgPort (line 441) | struct MsgPort
type MsgPort (line 443) | struct MsgPort
type MsgPort (line 449) | struct MsgPort
type Task (line 459) | struct Task
type Node (line 462) | struct Node
type Node (line 464) | struct Node
function msgPortDelete (line 469) | static void msgPortDelete(struct MsgPort *mp) {
function ioRequestInitialize (line 477) | static void ioRequestInitialize(struct IORequest *pIoReq, struct MsgPort...
type IORequest (line 483) | struct IORequest
type MsgPort (line 483) | struct MsgPort
type IORequest (line 484) | struct IORequest
type IORequest (line 484) | struct IORequest
function ioRequestDestroy (line 492) | static void ioRequestDestroy(struct IORequest *pIoReq) {
function UBYTE (line 496) | static UBYTE audioChannelAlloc(void) {
function audioChannelFree (line 539) | static void audioChannelFree(void) {
function cdtvCdCommand (line 556) | static void cdtvCdCommand(UWORD cmd) {
function cdtvPortAlloc (line 566) | static void cdtvPortAlloc(void) {
function cdtvPortFree (line 588) | static void cdtvPortFree(void) {
function UBYTE (line 597) | static UBYTE inputHandlerAdd(void) {
function inputHandlerRemove (line 642) | static void inputHandlerRemove(void) {
function interruptHandlerAdd (line 662) | static void interruptHandlerAdd(UBYTE ubIntBit) {
function interruptHandlerRemove (line 685) | static void interruptHandlerRemove(UBYTE ubIntBit) {
function systemOsDisable (line 702) | static void systemOsDisable(void) {
function ciaIcrHandlerAdd (line 774) | void ciaIcrHandlerAdd(UBYTE ubCia, UBYTE ubIcrBit) {
function ciaIcrHandlerRemove (line 798) | void ciaIcrHandlerRemove(UBYTE ubCia, UBYTE ubIcrBit) {
function systemFlushIo (line 809) | static void systemFlushIo(void) {
function systemKill (line 847) | void systemKill(const char *szMsg) {
function systemCreate (line 864) | void systemCreate(void) {
function systemDestroy (line 1001) | void systemDestroy(void) {
function systemUnuse (line 1072) | void systemUnuse(void) {
function systemUse (line 1105) | void systemUse(void) {
function UBYTE (line 1163) | UBYTE systemIsUsed(void) {
function systemGetBlitterFromOs (line 1167) | void systemGetBlitterFromOs(void) {
function systemReleaseBlitterToOs (line 1186) | void systemReleaseBlitterToOs(void) {
function UBYTE (line 1194) | UBYTE systemBlitterIsReleasedToOs(void) {
function systemSetKeyInputHandler (line 1198) | void systemSetKeyInputHandler(tKeyInputHandler cbKeyInputHandler) {
function systemSetInt (line 1202) | void systemSetInt(
function systemSetCiaInt (line 1221) | void systemSetCiaInt(
function systemSetCiaCr (line 1232) | void systemSetCiaCr(UBYTE ubCia, UBYTE isCrB, UBYTE ubCrValue) {
function systemSetDmaBit (line 1245) | void systemSetDmaBit(UBYTE ubDmaBit, UBYTE isEnabled) {
function systemSetDmaMask (line 1250) | void systemSetDmaMask(UWORD uwDmaMask, UBYTE isEnabled) {
function systemSetTimer (line 1271) | void systemSetTimer(UBYTE ubCia, UBYTE ubTimer, UWORD uwTicks) {
function systemDump (line 1285) | void systemDump(void) {
function systemIdleBegin (line 1312) | void systemIdleBegin(void) {
function systemIdleEnd (line 1318) | void systemIdleEnd(void) {
function UBYTE (line 1324) | UBYTE systemGetVerticalBlankFrequency(void){
function UBYTE (line 1328) | UBYTE systemIsPal(void) {
function systemCheckStack (line 1338) | void systemCheckStack(void) {
function UWORD (line 1353) | UWORD systemGetVersion(void) {
function UBYTE (line 1357) | UBYTE systemIsStartVolumeWritable(void) {
function systemDisableCpuCaches (line 1373) | void systemDisableCpuCaches() {
function systemRestoreCpuCaches (line 1398) | void systemRestoreCpuCaches() {
FILE: src/ace/managers/timer.c
function timerCreate (line 14) | void timerCreate(void) {
function timerDestroy (line 18) | void timerDestroy(void) {
function ULONG (line 22) | ULONG timerGet(void) {
function timerOnInterrupt (line 26) | void timerOnInterrupt(void) {
function ULONG (line 30) | ULONG timerGetPrec(void) {
function ULONG (line 53) | ULONG timerGetDelta(ULONG ulStart, ULONG ulStop) {
function UBYTE (line 60) | UBYTE timerPeek(ULONG *pTimer, ULONG ulTimerDelay) {
function UBYTE (line 64) | UBYTE timerCheck(ULONG *pTimer, ULONG ulTimerDelay) {
function timerProcess (line 72) | void timerProcess(void) {
function timerFormatPrec (line 87) | void timerFormatPrec(char *szBfr, ULONG ulPrecTime) {
function timerWaitUs (line 114) | void timerWaitUs(UWORD uwUsCnt) {
FILE: src/ace/managers/viewport/camera.c
function tCameraManager (line 8) | tCameraManager *cameraCreate(
function cameraDestroy (line 34) | void cameraDestroy(tCameraManager *pManager) {
function cameraProcess (line 40) | void cameraProcess(tCameraManager *pManager) {
function cameraReset (line 47) | void cameraReset(
function cameraSetCoord (line 73) | void cameraSetCoord(tCameraManager *pManager, UWORD uwX, UWORD uwY) {
function cameraMoveBy (line 79) | void cameraMoveBy(tCameraManager *pManager, WORD wDx, WORD wDy) {
function cameraCenterAt (line 84) | void cameraCenterAt(tCameraManager *pManager, UWORD uwAvgX, UWORD uwAvgY) {
function UBYTE (line 92) | UBYTE cameraIsMoved(const tCameraManager *pManager) {
function UWORD (line 96) | UWORD cameraGetXDiff(const tCameraManager *pManager) {
function UWORD (line 100) | UWORD cameraGetYDiff(const tCameraManager *pManager) {
function WORD (line 104) | WORD cameraGetDeltaX(const tCameraManager *pManager) {
function WORD (line 108) | WORD cameraGetDeltaY(const tCameraManager *pManager) {
FILE: src/ace/managers/viewport/scrollbuffer.c
function UWORD (line 10) | static UWORD nearestPowerOf2(UWORD uwVal) {
function UWORD (line 23) | static UWORD scrollBufferGetDDfStep(const tScrollBufferManager *pManager) {
function tScrollBufferManager (line 39) | tScrollBufferManager *scrollBufferCreate(void *pTags, ...) {
function scrollBufferDestroy (line 169) | void scrollBufferDestroy(tScrollBufferManager *pManager) {
function UBYTE (line 190) | UBYTE scrollBufferGetRawCopperlistInstructionCountStart(UBYTE ubBpp) {
function UBYTE (line 198) | UBYTE scrollBufferGetRawCopperlistInstructionCountBreak(UBYTE ubBpp) {
function resetStartCopperlist (line 205) | static void resetStartCopperlist(tCopCmd *pCmds, tScrollBufferManager *p...
function updateStartCopperlist (line 226) | static void updateStartCopperlist(tCopCmd *pCmds, const tBitMap *pBitmap...
function resetBreakCopperlist (line 236) | static void resetBreakCopperlist(tCopCmd *pCmds, const UWORD uwOffsY, co...
function updateBreakCopperlist (line 255) | static void updateBreakCopperlist(tCopCmd *pCmds, const tBitMap *pBitmap...
function disableBreakCopperlist (line 267) | static void disableBreakCopperlist(tCopCmd *pCmds) {
function FN_HOTSPOT (line 273) | FN_HOTSPOT
function scrollBufferReset (line 367) | void scrollBufferReset(
function scrollBufferBlitMask (line 494) | void scrollBufferBlitMask(
FILE: src/ace/managers/viewport/simplebuffer.c
function setBitplanePtrs (line 17) | static void setBitplanePtrs(tCopCmd *pCmds, const tBitMap *pBitmap, LONG...
function updateBitplanePtrs (line 25) | static void updateBitplanePtrs(
function UWORD (line 36) | static UWORD simpleBufferGetDDfStep(const tSimpleBufferManager *pManager) {
function simpleBufferInitializeCopperList (line 52) | static void simpleBufferInitializeCopperList(
function simpleBufferSetBack (line 166) | static void simpleBufferSetBack(tSimpleBufferManager *pManager, tBitMap ...
function UWORD (line 176) | static UWORD simpleBufferCalcBplOffsAndShift(tSimpleBufferManager *pMana...
function simpleBufferSetFront (line 198) | void simpleBufferSetFront(tSimpleBufferManager *pManager, tBitMap *pFron...
function tSimpleBufferManager (line 213) | tSimpleBufferManager *simpleBufferCreate(void *pTags, ...) {
function simpleBufferDestroy (line 335) | void simpleBufferDestroy(tSimpleBufferManager *pManager) {
function simpleBufferProcess (line 350) | void simpleBufferProcess(tSimpleBufferManager *pManager) {
function UBYTE (line 394) | UBYTE simpleBufferIsRectVisible(
function UBYTE (line 406) | UBYTE simpleBufferGetRawCopperlistInstructionCount(UBYTE ubBpp) {
FILE: src/ace/managers/viewport/tilebuffer.c
function UBYTE (line 23) | static UBYTE shiftFromPowerOfTwo(UWORD uwPot) {
function tileBufferResetRedrawState (line 34) | static void tileBufferResetRedrawState(
function tileBufferQueueAdd (line 64) | static void tileBufferQueueAdd(
function tileBufferQueueProcess (line 94) | void tileBufferQueueProcess(tTileBufferManager *pManager) {
function tTileBufferManager (line 104) | tTileBufferManager *tileBufferCreate(void *pTags, ...) {
function tileBufferDestroy (line 210) | void tileBufferDestroy(tTileBufferManager *pManager) {
function tileBufferReset (line 238) | void tileBufferReset(
function UWORD (line 333) | static UWORD tileBufferSetupTileDraw(const tTileBufferManager *pManager) {
function ALWAYS_INLINE (line 383) | ALWAYS_INLINE
function FN_HOTSPOT (line 433) | FN_HOTSPOT
function ALWAYS_INLINE (line 654) | ALWAYS_INLINE
function tileBufferRedrawAll (line 763) | void tileBufferRedrawAll(tTileBufferManager *pManager) {
function tileBufferRedrawBack (line 810) | void tileBufferRedrawBack(tTileBufferManager *pManager) {
function tileBufferDrawTile (line 829) | void tileBufferDrawTile(
function tileBufferDrawTileQuick (line 842) | void tileBufferDrawTileQuick(
function tileBufferInvalidateRect (line 863) | void tileBufferInvalidateRect(
function tileBufferInvalidateTile (line 880) | void tileBufferInvalidateTile(
function UBYTE (line 911) | UBYTE tileBufferIsTileOnBuffer(
function UBYTE (line 927) | UBYTE tileBufferIsRectFullyOnBuffer(
function tileBufferSetTile (line 947) | void tileBufferSetTile(
FILE: src/ace/utils/bitmap.c
function PLANEPTR (line 16) | static PLANEPTR bitmapAllocChipAligned(ULONG ulSize) {
function bitmapFreeChipAligned (line 27) | static void bitmapFreeChipAligned(void *pMem, ULONG ulSize) {
function PLANEPTR (line 31) | static PLANEPTR bitmapAllocChipAligned(ULONG ulSize) {
function bitmapFreeChipAligned (line 35) | static void bitmapFreeChipAligned(void *pMem, ULONG ulSize) {
function tBitMap (line 44) | tBitMap *bitmapCreate(
function bitmapLoadFromPath (line 160) | void bitmapLoadFromPath(tBitMap *pBitMap, const char *szPath, UWORD uwSt...
function bitmapLoadFromFd (line 164) | void bitmapLoadFromFd(
function tBitMap (line 291) | tBitMap *bitmapCreateFromPath(const char *szPath, UBYTE isFast) {
function tBitMap (line 295) | tBitMap *bitmapCreateFromFd(tFile *pFile, UBYTE isFast) {
function bitmapDestroy (line 354) | void bitmapDestroy(tBitMap *pBitMap) {
function UBYTE (line 395) | UBYTE bitmapIsInterleaved(const tBitMap *pBitMap) {
function UBYTE (line 401) | UBYTE bitmapIsChip(const tBitMap *pBitMap) {
function bitmapDump (line 405) | void bitmapDump(const tBitMap *pBitMap) {
function bitmapSave (line 423) | void bitmapSave(const tBitMap *pBitMap, const char *szPath) {
function bitmapSaveBmp (line 465) | void bitmapSaveBmp(
function UWORD (line 570) | UWORD bitmapGetByteWidth(const tBitMap *pBitMap) {
FILE: src/ace/utils/bmframe.c
type _tBorderTile (line 7) | typedef enum _tBorderTile {
function bmFrameDraw (line 19) | void bmFrameDraw(
FILE: src/ace/utils/chunky.c
function chunkyFromPlanar16 (line 11) | void chunkyFromPlanar16(
function UBYTE (line 29) | UBYTE chunkyFromPlanar(const tBitMap *pBitMap, UWORD uwX, UWORD uwY) {
function chunkyToPlanar16 (line 35) | void chunkyToPlanar16(const UBYTE *pIn, UWORD uwX, UWORD uwY, tBitMap *p...
function chunkyToPlanar (line 50) | void chunkyToPlanar(UBYTE ubColor, UWORD uwX, UWORD uwY, tBitMap *pOut) {
function chunkyRotate (line 65) | void chunkyRotate(
function chunkyFromBitmap (line 98) | void chunkyFromBitmap(
function chunkyToBitmap (line 111) | void chunkyToBitmap(
FILE: src/ace/utils/custom.c
function UWORD (line 29) | UWORD ciaGetTimerA(tCia REGPTR pCia) {
function ciaSetTimerA (line 38) | void ciaSetTimerA(tCia REGPTR pCia, UWORD uwTicks) {
function UWORD (line 47) | UWORD ciaGetTimerB(tCia REGPTR pCia) {
function ciaSetTimerB (line 56) | void ciaSetTimerB(tCia REGPTR pCia, UWORD uwTicks) {
function tRayPos (line 65) | tRayPos getRayPos(void) {
FILE: src/ace/utils/dir.c
function tDir (line 13) | tDir *dirOpen(const char *szPath) {
function UBYTE (line 30) | UBYTE dirRead(tDir *pDir, char *szFileName, UWORD uwFileNameMax) {
function dirClose (line 44) | void dirClose(tDir *pDir) {
function UBYTE (line 51) | UBYTE dirExists(const char *szPath) {
function UBYTE (line 61) | UBYTE dirCreate(const char *szName) {
function UBYTE (line 69) | UBYTE dirCreatePath(const char *szPath) {
FILE: src/ace/utils/disk_file.c
type tDiskFileData (line 13) | typedef struct tDiskFileData {
function fileAccessEnable (line 39) | static void fileAccessEnable(void) {
function fileAccessDisable (line 53) | static void fileAccessDisable(void) {
function DISKFILE_PRIVATE (line 61) | DISKFILE_PRIVATE void diskFileClose(void *pData) {
function DISKFILE_PRIVATE (line 82) | DISKFILE_PRIVATE ULONG diskFileRead(void *pData, void *pDest, ULONG ulSi...
function DISKFILE_PRIVATE (line 151) | DISKFILE_PRIVATE ULONG diskFileWrite(void *pData, const void *pSrc, ULON...
function DISKFILE_PRIVATE (line 195) | DISKFILE_PRIVATE ULONG diskFileSeek(void *pData, LONG lPos, WORD wMode) {
function DISKFILE_PRIVATE (line 241) | DISKFILE_PRIVATE ULONG diskFileGetPos(void *pData) {
function DISKFILE_PRIVATE (line 258) | DISKFILE_PRIVATE ULONG diskFileGetSize(void *pData) {
function DISKFILE_PRIVATE (line 282) | DISKFILE_PRIVATE UBYTE diskFileIsEof(void *pData) {
function DISKFILE_PRIVATE (line 301) | DISKFILE_PRIVATE void diskFileFlush(void *pData) {
function tFile (line 317) | tFile *diskFileOpen(const char *szPath, tDiskFileMode eMode, UBYTE isUni...
function UBYTE (line 354) | UBYTE diskFileExists(const char *szPath) {
function UBYTE (line 367) | UBYTE diskFileDelete(const char *szFilePath) {
function UBYTE (line 374) | UBYTE diskFileMove(const char *szSource, const char *szDest) {
FILE: src/ace/utils/extview.c
function tView (line 13) | tView *viewCreate(void *pTags, ...) {
function viewDestroy (line 132) | void viewDestroy(tView *pView) {
function vPortProcessManagers (line 152) | void vPortProcessManagers(tVPort *pVPort) {
function viewProcessManagers (line 160) | void viewProcessManagers(tView *pView) {
function viewUpdateGlobalPalette (line 168) | void viewUpdateGlobalPalette(const tView *pView) {
function viewLoad (line 205) | void viewLoad(tView *pView) {
function tVPort (line 310) | tVPort *vPortCreate(void *pTagList, ...) {
function vPortDestroy (line 446) | void vPortDestroy(tVPort *pVPort) {
function vPortUpdatePalette (line 499) | void vPortUpdatePalette(tVPort *pVPort) {
function vPortWaitForPos (line 522) | void vPortWaitForPos(const tVPort *pVPort, UWORD uwPosY, UBYTE isExact) {
function vPortWaitUntilEnd (line 544) | void vPortWaitUntilEnd(const tVPort *pVPort) {
function vPortWaitForEnd (line 548) | void vPortWaitForEnd(const tVPort *pVPort) {
function vPortAddManager (line 552) | void vPortAddManager(tVPort *pVPort, tVpManager *pVpManager) {
function vPortRmManager (line 586) | void vPortRmManager(tVPort *pVPort, tVpManager *pVpManager) {
function tVpManager (line 609) | tVpManager *vPortGetManager(tVPort *pVPort, UBYTE ubId) {
FILE: src/ace/utils/file.c
function fileWriteStr (line 10) | void fileWriteStr(tFile *pFile, const char *szLine) {
function fileClose (line 20) | void fileClose(tFile *pFile) {
function ULONG (line 24) | ULONG fileRead(tFile *pFile, void *pDest, ULONG ulSize) {
function ULONG (line 28) | ULONG fileWrite(tFile *pFile, const void *pSrc, ULONG ulSize) {
function ULONG (line 32) | ULONG fileSeek(tFile *pFile, LONG lPos, WORD wMode) {
function ULONG (line 36) | ULONG fileGetPos(tFile *pFile) {
function ULONG (line 40) | ULONG fileGetSize(tFile *pFile) {
function UBYTE (line 44) | UBYTE fileIsEof(tFile *pFile) {
function fileFlush (line 48) | void fileFlush(tFile *pFile) {
function fileClose (line 53) | void fileClose(tFile *pFile) {
function ULONG (line 63) | ULONG fileRead(tFile *pFile, void *pDest, ULONG ulSize) {
function ULONG (line 73) | ULONG fileWrite(tFile *pFile, const void *pSrc, ULONG ulSize) {
function ULONG (line 80) | ULONG fileSeek(tFile *pFile, LONG lPos, WORD wMode) {
function ULONG (line 87) | ULONG fileGetPos(tFile *pFile) {
function LONG (line 94) | LONG fileGetSize(tFile *pFile) {
function UBYTE (line 101) | UBYTE fileIsEof(tFile *pFile) {
function fileFlush (line 108) | void fileFlush(tFile *pFile) {
FILE: src/ace/utils/font.c
function UBYTE (line 17) | UBYTE fontGlyphWidth(const tFont *pFont, char c) {
function tFont (line 22) | tFont *fontCreateFromPath(const char *szPath) {
function tFont (line 26) | tFont *fontCreateFromFd(tFile *pFontFile) {
function fontDestroy (line 72) | void fontDestroy(tFont *pFont) {
function tTextBitMap (line 84) | tTextBitMap *fontCreateTextBitMap(UWORD uwWidth, UWORD uwHeight) {
function UBYTE (line 119) | UBYTE fontTextFitsInTextBitmap(
function tUwCoordYX (line 132) | tUwCoordYX fontMeasureText(const tFont *pFont, const char *szText) {
function tTextBitMap (line 158) | tTextBitMap *fontCreateTextBitMapFromStr(const tFont *pFont, const char ...
function tUwCoordYX (line 173) | tUwCoordYX fontDrawStr1bpp(
function fontFillTextBitMap (line 208) | void fontFillTextBitMap(
function fontDestroyTextBitMap (line 238) | void fontDestroyTextBitMap(tTextBitMap *pTextBitMap) {
function fontDrawTextBitMap (line 245) | void fontDrawTextBitMap(
function fontDrawStr (line 318) | void fontDrawStr(
FILE: src/ace/utils/pak_file.c
type UBYTE (line 14) | typedef UBYTE (*tCbCompressReadByte)(UBYTE *pOut, void *pData);
type tCompressUnpackStateKind (line 16) | typedef enum tCompressUnpackStateKind {
type tCompressUnpacker (line 30) | typedef struct tCompressUnpacker {
type tPakFileSubfileData (line 45) | typedef struct tPakFileSubfileData {
type tPakFileCompressedData (line 51) | typedef struct tPakFileCompressedData {
function compressUnpackerInit (line 98) | void compressUnpackerInit(
function rleTableWrite (line 113) | static void rleTableWrite(UBYTE *pTable, UWORD *pPos, UBYTE ubData) {
function UBYTE (line 119) | static UBYTE rleTableRead(const UBYTE *pTable, UWORD *pPos) {
function WORD (line 129) | static WORD compressUnpackerReadNext(tCompressUnpacker *pUnpacker, UBYTE...
function ULONG (line 196) | static ULONG adler32Buffer(const UBYTE *pData, ULONG ulDataSize) {
function pakSubfileClose (line 211) | static void pakSubfileClose(void *pData) {
function ULONG (line 217) | static ULONG pakSubfileRead(void *pData, void *pDest, ULONG ulSize) {
function ULONG (line 245) | static ULONG pakSubfileWrite(
function ULONG (line 252) | static ULONG pakSubfileSeek(void *pData, LONG lPos, WORD wMode) {
function ULONG (line 277) | static ULONG pakSubfileGetPos(void *pData) {
function ULONG (line 283) | static ULONG pakSubfileGetSize(void *pData) {
function UBYTE (line 289) | static UBYTE pakSubfileIsEof(void *pData) {
function pakSubfileFlush (line 295) | static void pakSubfileFlush(UNUSED_ARG void *pData) {
function pakCompressedClose (line 299) | static void pakCompressedClose(void *pData) {
function ULONG (line 305) | static ULONG pakCompressedRead(void *pData, void *pDest, ULONG ulSize) {
function ULONG (line 322) | static ULONG pakCompressedWrite(
function ULONG (line 329) | static ULONG pakCompressedSeek(void *pData, LONG lPos, WORD wMode) {
function ULONG (line 378) | static ULONG pakCompressedGetPos(void *pData) {
function ULONG (line 383) | static ULONG pakCompressedGetSize(void *pData) {
function UBYTE (line 388) | static UBYTE pakCompressedIsEof(void *pData) {
function pakCompressedFlush (line 393) | static void pakCompressedFlush(UNUSED_ARG void *pData) {
function UWORD (line 397) | static UWORD pakFileGetFileIndex(const tPakFile *pPakFile, const char *s...
function tPakFile (line 409) | tPakFile *pakFileOpen(const char *szPath, UBYTE isUninterrupted) {
function pakFileClose (line 434) | void pakFileClose(tPakFile *pPakFile) {
function tFile (line 442) | tFile *pakFileGetFile(tPakFile *pPakFile, const char *szInternalPath) {
FILE: src/ace/utils/palette.c
function paletteLoadFromPath (line 17) | void paletteLoadFromPath(const char *szPath, UWORD *pPalette, UWORD uwMa...
function paletteLoadFromFd (line 21) | void paletteLoadFromFd(tFile *pFile, UWORD *pPalette, UWORD uwMaxLength) {
function paletteSaveOcs (line 75) | void paletteSaveOcs(const UWORD *pPalette, UWORD uwColorCnt, char *szPat...
function paletteSaveAga (line 102) | void paletteSaveAga(const ULONG *pPalette, UWORD uwColorCnt, char *szPat...
function paletteDimOcs (line 142) | void paletteDimOcs(
function paletteDimAga (line 151) | void paletteDimAga(ULONG *pSource, volatile ULONG *pDest, UWORD uwColorC...
function UWORD (line 158) | UWORD paletteColorDimOcs(UWORD uwFullColor, UBYTE ubLevel) {
function ULONG (line 175) | ULONG paletteColorDimAga(ULONG ulFullColor, UBYTE ubLevel) {
function UWORD (line 192) | UWORD paletteColorMixOcs(
function ULONG (line 215) | ULONG paletteColorMixAga(ULONG ulColorPrimary, ULONG ulColorSecondary, U...
function paletteDumpAga (line 233) | void paletteDumpAga(ULONG *pPalette, UWORD uwColorCnt, char *szPath) {
function paletteDumpOcs (line 271) | void paletteDumpOcs(UWORD *pPalette, UWORD uwColorCnt, char *szPath) {
FILE: src/ace/utils/sprite.c
function tCopBlock (line 8) | tCopBlock *spriteDisableInCopBlockMode(tCopList *pList, tSpriteMask eSpr...
function UBYTE (line 35) | UBYTE spriteDisableInCopRawMode(
function spriteSetOddColorPaletteBank (line 66) | void spriteSetOddColorPaletteBank(UBYTE ubIndex) {
function spriteSetEvenColorPaletteBank (line 73) | void spriteSetEvenColorPaletteBank(UBYTE ubIndex) {
FILE: src/ace/utils/string.c
function charToUpper (line 37) | char charToUpper(char c) {
function strToUpper (line 44) | void strToUpper(const char *szSrc, char *szDst) {
function UBYTE (line 53) | UBYTE stringIsEmpty(const char *szStr) {
FILE: src/ace/utils/tag.c
function ULONG (line 8) | ULONG tagGet(void *pTagListPtr, va_list vaSrcList, tTag ulTagToFind, ULO...
FILE: src/fixmath/fix16.c
function fix16_t (line 8) | fix16_t fix16_add(fix16_t a, fix16_t b)
function fix16_t (line 23) | fix16_t fix16_sub(fix16_t a, fix16_t b)
function fix16_t (line 37) | fix16_t fix16_sadd(fix16_t a, fix16_t b)
function fix16_t (line 47) | fix16_t fix16_ssub(fix16_t a, fix16_t b)
function fix16_t (line 67) | fix16_t fix16_mul(fix16_t inArg0, fix16_t inArg1)
function fix16_t (line 112) | fix16_t fix16_mul(fix16_t inArg0, fix16_t inArg1)
function fix16_t (line 173) | fix16_t fix16_mul(fix16_t inArg0, fix16_t inArg1)
function fix16_t (line 254) | fix16_t fix16_smul(fix16_t inArg0, fix16_t inArg1)
function clz (line 279) | static uint8_t clz(uint32_t x)
function fix16_t (line 289) | fix16_t fix16_div(fix16_t a, fix16_t b)
function fix16_t (line 367) | fix16_t fix16_div(fix16_t a, fix16_t b)
function fix16_t (line 447) | fix16_t fix16_sdiv(fix16_t inArg0, fix16_t inArg1)
function fix16_t (line 463) | fix16_t fix16_mod(fix16_t x, fix16_t y)
function fix16_t (line 485) | fix16_t fix16_lerp8(fix16_t inArg0, fix16_t inArg1, uint8_t inFract)
function fix16_t (line 493) | fix16_t fix16_lerp16(fix16_t inArg0, fix16_t inArg1, uint16_t inFract)
function fix16_t (line 501) | fix16_t fix16_lerp32(fix16_t inArg0, fix16_t inArg1, uint32_t inFract)
FILE: src/fixmath/fix16_exp.c
function fix16_t (line 11) | fix16_t fix16_exp(fix16_t inValue) {
function fix16_t (line 61) | fix16_t fix16_log(fix16_t inValue)
function fix16_t (line 106) | static inline fix16_t fix16_rs(fix16_t x)
function fix16_t (line 122) | static fix16_t fix16__log2_inner(fix16_t x)
function fix16_t (line 165) | fix16_t fix16_log2(fix16_t x)
function fix16_t (line 191) | fix16_t fix16_slog2(fix16_t x)
FILE: src/fixmath/fix16_sqrt.c
function fix16_t (line 12) | fix16_t fix16_sqrt(fix16_t inValue)
FILE: src/fixmath/fix16_str.c
function fix16_to_str (line 28) | void fix16_to_str(fix16_t value, char *buf, int decimals)
function fix16_t (line 60) | fix16_t fix16_from_str(const char *buf)
FILE: src/fixmath/fix16_trig.c
function fix16_t (line 17) | fix16_t fix16_sin_parabola(fix16_t inAngle)
function fix16_t (line 47) | fix16_t fix16_sin(fix16_t inAngle)
function fix16_t (line 109) | fix16_t fix16_cos(fix16_t inAngle)
function fix16_t (line 114) | fix16_t fix16_tan(fix16_t inAngle)
function fix16_t (line 119) | fix16_t fix16_asin(fix16_t x)
function fix16_t (line 132) | fix16_t fix16_acos(fix16_t x)
function fix16_t (line 137) | fix16_t fix16_atan2(fix16_t inY , fix16_t inX)
function fix16_t (line 179) | fix16_t fix16_atan(fix16_t x)
FILE: src/fixmath/fract32.c
function fract32_t (line 5) | fract32_t fract32_create(uint32_t inNumerator, uint32_t inDenominator) {
function fract32_t (line 13) | fract32_t fract32_invert(fract32_t inFract) {
function fract32_usmul (line 18) | uint32_t fract32_usmul(uint32_t inVal, fract32_t inFract) {
function fract32_smul (line 22) | int32_t fract32_smul(int32_t inVal, fract32_t inFract) {
FILE: src/fixmath/uint32.c
function uint32_log2 (line 3) | uint32_t uint32_log2(uint32_t inVal) {
FILE: src/mini_std/ctype.c
function __tolower (line 34) | unsigned char __tolower(unsigned char c) {
function __toupper (line 42) | unsigned char __toupper(unsigned char c) {
FILE: src/mini_std/intrin.c
function __clzsi2 (line 3) | __attribute__ ((used))
type DIunion (line 76) | typedef union {
function DItype (line 81) | __attribute__ ((used))
FILE: src/mini_std/printf.c
type out_fct_wrap_type (line 126) | typedef struct {
function _out_buffer (line 133) | static inline void _out_buffer(char character, void* buffer, size_t idx,...
function _out_null (line 142) | static inline void _out_null(char character, void* buffer, size_t idx, s...
function _out_char (line 149) | static inline void _out_char(char character, void* buffer, size_t idx, s...
function _out_fct (line 159) | static inline void _out_fct(char character, void* buffer, size_t idx, si...
function _strnlen_s (line 171) | static inline unsigned int _strnlen_s(const char* str, size_t maxsize)
function _is_digit (line 181) | static inline bool _is_digit(char ch)
function _atoi (line 188) | static unsigned int _atoi(const char** str)
function _out_rev (line 199) | static size_t _out_rev(out_fct_type out, char* buffer, size_t idx, size_...
function _ntoa_format (line 227) | static size_t _ntoa_format(out_fct_type out, char* buffer, size_t idx, s...
function _ntoa_long (line 281) | static size_t _ntoa_long(out_fct_type out, char* buffer, size_t idx, siz...
function _ntoa_long_long (line 306) | static size_t _ntoa_long_long(out_fct_type out, char* buffer, size_t idx...
function _ftoa (line 339) | static size_t _ftoa(out_fct_type out, char* buffer, size_t idx, size_t m...
function _etoa (line 467) | static size_t _etoa(out_fct_type out, char* buffer, size_t idx, size_t m...
function _vsnprintf (line 577) | static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxle...
FILE: src/mini_std/stdio_file.c
function FILE (line 8) | FILE *fopen(const char *restrict szFileName, const char *restrict szMode) {
function fread (line 37) | size_t fread(void *restrict pBuffer, size_t Size, size_t Count, FILE *re...
function fwrite (line 49) | size_t fwrite(const void *restrict pBuffer, size_t Size, size_t Count, F...
function fclose (line 60) | int fclose(FILE *pStream) {
function fseek (line 68) | int fseek(FILE *pStream, long Offset, int Origin) {
function fflush (line 82) | int fflush(UNUSED_ARG FILE *pStream) {
function ftell (line 88) | long ftell(FILE *pStream) {
function feof (line 93) | int feof(FILE *pStream) {
function rename (line 101) | int rename(const char *szSource, const char *szDestination) {
function remove (line 105) | int remove(const char *szFilePath) {
FILE: src/mini_std/stdio_putchar.c
function _putchar (line 4) | void _putchar(char character) {
FILE: src/mini_std/stdlib.c
function exit (line 6) | void exit(int exit_code) {
function qsortEmu (line 15) | int qsortEmu(const void *_a, const void *_b, __attribute__((unused)) voi...
function qsort (line 19) | void qsort(
FILE: src/mini_std/string.c
function memcmp (line 3) | int memcmp(const void *pLhs, const void *pRhs, size_t count) {
function strcmp (line 54) | int strcmp(const char *szA, const char *szB) {
FILE: src/mini_std/strtoul.c
function strtoul (line 7) | unsigned long strtoul(const char *nptr, char **endptr, int base)
FILE: tools/src/audio_conv.cpp
function printUsage (line 12) | void printUsage(const std::string &szAppName) {
function main (line 32) | int main(int lArgCount, const char *pArgs[]) {
FILE: tools/src/bitmap_conv.cpp
function printUsage (line 10) | void printUsage(const std::string &szAppName)
function main (line 30) | int main(int lArgCount, const char *pArgs[])
FILE: tools/src/bitmap_transform.cpp
class tOp (line 10) | class tOp {
class tOpExtract (line 16) | class tOpExtract: public tOp {
class tOpRotate (line 25) | class tOpRotate: public tOp {
class tOpMirror (line 40) | class tOpMirror: public tOp {
type tAxis (line 42) | enum class tAxis {
function printUsage (line 53) | void printUsage(const std::string &szAppName)
function main (line 64) | int main(int lArgCount, char *pArgs[])
function tChunkyBitmap (line 177) | tChunkyBitmap tOpExtract::execute(const tChunkyBitmap &Source)
function tChunkyBitmap (line 206) | tChunkyBitmap tOpMirror::execute(const tChunkyBitmap &Source)
function tChunkyBitmap (line 242) | tChunkyBitmap tOpRotate::execute(const tChunkyBitmap &Source) {
FILE: tools/src/common/bitmap.cpp
type tBmFlags (line 13) | enum class tBmFlags: std::uint8_t {
function tChunkyBitmap (line 71) | tChunkyBitmap tChunkyBitmap::fromPng(const std::string &szPath)
function tPlanarBitmap (line 231) | tPlanarBitmap tPlanarBitmap::fromBm(const std::string &szPath)
function tRgb (line 294) | tRgb &tChunkyBitmap::pixelAt(std::uint16_t uwX, std::uint16_t uwY)
function tRgb (line 300) | const tRgb &tChunkyBitmap::pixelAt(std::uint16_t uwX, std::uint16_t uwY)...
function tChunkyBitmap (line 364) | tChunkyBitmap tChunkyBitmap::filterColors(
FILE: tools/src/common/bitmap.h
function class (line 16) | class tChunkyBitmap {
function class (line 52) | class tPlanarBitmap {
FILE: tools/src/common/compress.cpp
function rleTableRead (line 9) | static uint8_t rleTableRead(const uint8_t *table, std::uint16_t *index)
function rleTableFind (line 20) | static bool rleTableFind(
function rleTableWrite (line 63) | static void rleTableWrite(uint8_t *table, std::uint16_t *index, uint8_t ...
function compressUnpackerInit (line 70) | void compressUnpackerInit(
function tCompressUnpackResult (line 86) | tCompressUnpackResult compressUnpackerProcess(
function compressPack (line 169) | std::uint32_t compressPack(
FILE: tools/src/common/compress.hpp
type tCompressUnpackStateKind (line 7) | enum tCompressUnpackStateKind {
type tCompressUnpackResult (line 15) | enum tCompressUnpackResult {
type tCompressUnpacker (line 21) | struct tCompressUnpacker {
FILE: tools/src/common/endian.h
function namespace (line 11) | namespace nEndian {
FILE: tools/src/common/exception.cpp
function exceptionHandle (line 3) | void exceptionHandle(
FILE: tools/src/common/flags/allow_flags.hpp
type flags (line 8) | namespace flags {
type is_flags (line 11) | struct is_flags
FILE: tools/src/common/flags/flags.hpp
type flags (line 14) | namespace flags {
type empty_t (line 17) | struct empty_t {
method empty_t (line 18) | constexpr empty_t() noexcept = default;
class flags (line 22) | class flags {
method bit_size (line 43) | constexpr static std::size_t bit_size() { return sizeof(impl_type) *...
method flags (line 53) | flags() noexcept = default;
method flags (line 54) | flags(const flags &fl) noexcept = default;
method flags (line 55) | flags &operator=(const flags &fl) noexcept = default;
method flags (line 56) | flags(flags &&fl) noexcept = default;
method flags (line 57) | flags &operator=(flags &&fl) noexcept= default;
method flags (line 60) | explicit constexpr flags(empty_t) noexcept : val_(0) {}
method flags (line 64) | explicit
method flags (line 69) | flags &operator=(enum_type e) noexcept {
method flags (line 75) | flags(std::initializer_list<enum_type> il) noexcept : val_(0) { inse...
method flags (line 77) | flags &operator=(std::initializer_list<enum_type> il) noexcept {
method flags (line 84) | flags(enum_type e, Args ... args) noexcept : flags{e, args...} {}
method flags (line 88) | flags(FwIter b, FwIter e,
method flags (line 109) | constexpr flags operator~() const noexcept { return flags(~val_); }
method flags (line 111) | flags &operator|=(const flags &fl) noexcept {
method flags (line 116) | flags &operator&=(const flags &fl) noexcept {
method flags (line 121) | flags &operator^=(const flags &fl) noexcept {
method flags (line 127) | flags &operator|=(enum_type e) noexcept {
method flags (line 132) | flags &operator&=(enum_type e) noexcept {
method flags (line 137) | flags &operator^=(enum_type e) noexcept {
method flags (line 142) | constexpr flags operator|(flags f1, flags f2) noexcept {
method flags (line 146) | constexpr flags operator&(flags f1, flags f2) noexcept {
method flags (line 150) | constexpr flags operator^(flags f1, flags f2) noexcept {
method swap (line 155) | void swap(flags &fl) noexcept { std::swap(val_, fl.val_); }
method underlying_type (line 158) | constexpr underlying_type underlying_value() const noexcept {
method set_underlying_value (line 162) | void set_underlying_value(underlying_type newval) noexcept {
method to_bitset (line 171) | constexpr std::bitset<flags<E>::bit_size()> to_bitset() const noexce...
method empty (line 176) | constexpr bool empty() const noexcept { return !val_; }
method size_type (line 178) | size_type size() const noexcept {
method size_type (line 182) | constexpr size_type max_size() const noexcept { return bit_size(); }
method iterator (line 185) | iterator begin() const noexcept { return cbegin(); }
method iterator (line 186) | iterator cbegin() const noexcept { return iterator{val_}; }
method iterator (line 188) | constexpr iterator end() const noexcept { return cend(); }
method iterator (line 189) | constexpr iterator cend() const noexcept { return {}; }
method iterator (line 192) | constexpr iterator find(enum_type e) const noexcept { return {val_, ...
method size_type (line 194) | constexpr size_type count(enum_type e) const noexcept {
method equal_range (line 199) | std::pair<iterator, iterator> equal_range(enum_type e) const noexcept {
method emplace (line 207) | std::pair<iterator, bool> emplace(Args && ... args) noexcept {
method iterator (line 212) | iterator emplace_hint(iterator, Args && ... args) noexcept {
method insert (line 217) | std::pair<iterator, bool> insert(enum_type e) noexcept {
method insert (line 228) | std::pair<iterator, bool> insert(iterator, enum_type e) noexcept {
method insert (line 233) | auto insert(FwIter i1, FwIter i2)
method iterator (line 248) | iterator erase(iterator i) noexcept {
method size_type (line 254) | size_type erase(enum_type e) noexcept {
method iterator (line 260) | iterator erase(iterator i1, iterator i2) noexcept {
method clear (line 267) | void clear() noexcept { val_ = 0; }
method flags (line 270) | constexpr explicit flags(impl_type val) noexcept : val_(val) {}
method update_uvalue (line 272) | void update_uvalue(iterator &it) const noexcept { it.uvalue_ = val_; }
function swap (line 279) | void swap(flags<E> &fl1, flags<E> &fl2) noexcept { fl1.swap(fl2); }
FILE: tools/src/common/flags/flagsfwd.hpp
type flags (line 5) | namespace flags { template <class E> class flags; }
class flags (line 5) | class flags
FILE: tools/src/common/flags/iterator.hpp
type flags (line 10) | namespace flags {
class FlagsIterator (line 14) | class FlagsIterator {
method FlagsIterator (line 24) | constexpr FlagsIterator() noexcept : uvalue_(0), mask_(0) {}
method FlagsIterator (line 26) | constexpr FlagsIterator(const FlagsIterator &other) noexcept
method FlagsIterator (line 30) | FlagsIterator &operator++() noexcept {
method FlagsIterator (line 34) | FlagsIterator operator++(int) noexcept {
method reference (line 41) | constexpr reference operator*() const noexcept {
method FlagsIterator (line 63) | explicit FlagsIterator(impl_type uv) noexcept : uvalue_(uv), mask_(1) {
method FlagsIterator (line 67) | constexpr FlagsIterator(impl_type uv, E e) noexcept
method nextMask (line 73) | void nextMask() noexcept {
FILE: tools/src/common/fs.cpp
type nFs (line 21) | namespace nFs {
function dirCreate (line 23) | bool dirCreate(const std::string &szPath)
function isDir (line 34) | bool isDir(const std::string &szPath)
function getExt (line 47) | std::string getExt(const std::string &szPath)
function removeExt (line 56) | std::string removeExt(const std::string &szPath)
function getBaseName (line 65) | std::string getBaseName(const std::string &szPath)
function iterateDirectory (line 78) | void iterateDirectory(const std::string &szPath, std::function<void(co...
FILE: tools/src/common/fs.h
function namespace (line 13) | namespace nFs {
FILE: tools/src/common/glyph_set.cpp
function tGlyphSet (line 17) | tGlyphSet tGlyphSet::fromPmng(const std::string &szPngPath, std::uint8_t...
function tGlyphSet (line 57) | tGlyphSet tGlyphSet::fromAceFont(const std::string &szFntPath)
function tGlyphSet (line 121) | tGlyphSet tGlyphSet::fromTtf(
function tGlyphSet (line 208) | tGlyphSet tGlyphSet::fromDir(const std::string &szDirPath)
function tChunkyBitmap (line 257) | tChunkyBitmap tGlyphSet::toPackedBitmap(bool isPmng)
FILE: tools/src/common/glyph_set.h
function class (line 13) | class tGlyphSet {
FILE: tools/src/common/jsmn.c
function jsmntok_t (line 6) | static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
function jsmn_fill_token (line 24) | static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
function jsmn_parse_primitive (line 35) | static int jsmn_parse_primitive(jsmn_parser *parser, const char *js,
function jsmn_parse_string (line 84) | static int jsmn_parse_string(jsmn_parser *parser, const char *js,
function jsmn_parse (line 151) | int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
function jsmn_init (line 309) | void jsmn_init(jsmn_parser *parser) {
FILE: tools/src/common/jsmn.h
type jsmntype_t (line 17) | typedef enum {
type jsmnerr (line 25) | enum jsmnerr {
type jsmntok_t (line 40) | typedef struct {
type jsmn_parser (line 54) | typedef struct {
FILE: tools/src/common/json.c
function tJson (line 7) | tJson *jsonCreate(const char *szFilePath) {
function jsonDestroy (line 48) | void jsonDestroy(tJson *pJson) {
function jsonGetElementInArray (line 54) | uint16_t jsonGetElementInArray(
function jsonGetElementInStruct (line 82) | uint16_t jsonGetElementInStruct(
function jsonGetDom (line 110) | uint16_t jsonGetDom(const tJson *pJson, const char *szPattern) {
function jsonTokToUlong (line 150) | uint32_t jsonTokToUlong(const tJson *pJson, uint16_t uwTok) {
function jsonStrLen (line 154) | uint16_t jsonStrLen(const tJson *pJson, uint16_t uwTok) {
function jsonTokStrCpy (line 167) | uint16_t jsonTokStrCpy(
FILE: tools/src/common/json.h
type tJson (line 15) | typedef struct _tJson {
FILE: tools/src/common/lodepng.cpp
function lodepng_free (line 73) | static void lodepng_free(void* ptr)
type uivector (line 137) | struct uivector
function uivector_cleanup (line 144) | static void uivector_cleanup(void* p)
function uivector_reserve (line 152) | static unsigned uivector_reserve(uivector* p, size_t allocsize)
function uivector_resize (line 169) | static unsigned uivector_resize(uivector* p, size_t size)
function uivector_resizev (line 177) | static unsigned uivector_resizev(uivector* p, size_t size, unsigned value)
function uivector_init (line 185) | static void uivector_init(uivector* p)
function uivector_push_back (line 193) | static unsigned uivector_push_back(uivector* p, unsigned c)
type ucvector (line 205) | struct ucvector
function ucvector_reserve (line 213) | static unsigned ucvector_reserve(ucvector* p, size_t allocsize)
function ucvector_resize (line 230) | static unsigned ucvector_resize(ucvector* p, size_t size)
function ucvector_cleanup (line 239) | static void ucvector_cleanup(void* p)
function ucvector_init (line 246) | static void ucvector_init(ucvector* p)
function ucvector_init_buffer (line 256) | static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, siz...
function ucvector_push_back (line 265) | static unsigned ucvector_push_back(ucvector* p, unsigned char c)
function string_resize (line 279) | static unsigned string_resize(char** out, size_t size)
function string_init (line 291) | static void string_init(char** out)
function string_cleanup (line 298) | static void string_cleanup(char** out)
function string_set (line 304) | static void string_set(char** out, const char* in)
function lodepng_read32bitInt (line 320) | unsigned lodepng_read32bitInt(const unsigned char* buffer)
function lodepng_set32bitInt (line 327) | static void lodepng_set32bitInt(unsigned char* buffer, unsigned value)
function lodepng_add32bitInt (line 337) | static void lodepng_add32bitInt(ucvector* buffer, unsigned value)
function lodepng_filesize (line 351) | static long lodepng_filesize(const char* filename)
function lodepng_buffer_file (line 373) | static unsigned lodepng_buffer_file(unsigned char* out, size_t size, con...
function lodepng_load_file (line 387) | unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const c...
function lodepng_save_file (line 400) | unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersiz...
function addBitsToStream (line 430) | static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, uns...
function addBitsToStreamReversed (line 436) | static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstr...
function readBitFromStream (line 447) | static unsigned char readBitFromStream(size_t* bitpointer, const unsigne...
function readBitsFromStream (line 454) | static unsigned readBitsFromStream(size_t* bitpointer, const unsigned ch...
type HuffmanTree (line 509) | struct HuffmanTree
function HuffmanTree_init (line 531) | static void HuffmanTree_init(HuffmanTree* tree)
function HuffmanTree_cleanup (line 538) | static void HuffmanTree_cleanup(HuffmanTree* tree)
function HuffmanTree_make2DTree (line 546) | static unsigned HuffmanTree_make2DTree(HuffmanTree* tree)
function HuffmanTree_makeFromLengths2 (line 611) | static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)
function HuffmanTree_makeFromLengths (line 656) | static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const uns...
type BPMNode (line 674) | struct BPMNode
type BPMNode (line 678) | struct BPMNode
type BPMLists (line 683) | struct BPMLists
function BPMNode (line 698) | static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned ind...
type BPMNode (line 678) | struct BPMNode
function bpmnode_sort (line 731) | static void bpmnode_sort(BPMNode* leaves, size_t num)
function boundaryPM (line 758) | static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numprese...
function lodepng_huffman_code_lengths (line 789) | unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned*...
function HuffmanTree_makeFromFrequencies (line 879) | static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const...
function HuffmanTree_getCode (line 896) | static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned in...
function HuffmanTree_getLength (line 901) | static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned ...
function generateFixedLitLenTree (line 908) | static unsigned generateFixedLitLenTree(HuffmanTree* tree)
function generateFixedDistanceTree (line 927) | static unsigned generateFixedDistanceTree(HuffmanTree* tree)
function huffmanDecodeSymbol (line 947) | static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
function getTreeInflateFixed (line 975) | static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)
function getTreeInflateDynamic (line 983) | static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree*...
function inflateHuffmanBlock (line 1131) | static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* ...
function inflateNoCompression (line 1225) | static unsigned inflateNoCompression(ucvector* out, const unsigned char*...
function lodepng_inflatev (line 1253) | static unsigned lodepng_inflatev(ucvector* out,
function lodepng_inflate (line 1283) | unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
function inflate (line 1296) | static unsigned inflate(unsigned char** out, size_t* outsize,
function addHuffmanSymbol (line 1321) | static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned ...
function searchCodeIndex (line 1328) | static size_t searchCodeIndex(const unsigned* array, size_t array_size, ...
function addLengthDistance (line 1343) | static void addLengthDistance(uivector* values, size_t length, size_t di...
type Hash (line 1367) | struct Hash
function hash_init (line 1381) | static unsigned hash_init(Hash* hash, unsigned windowsize)
function hash_cleanup (line 1408) | static void hash_cleanup(Hash* hash)
function getHash (line 1421) | static unsigned getHash(const unsigned char* data, size_t size, size_t pos)
function countZeros (line 1442) | static unsigned countZeros(const unsigned char* data, size_t size, size_...
function updateHashChain (line 1454) | static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, u...
function encodeLZ77 (line 1474) | static unsigned encodeLZ77(uivector* out, Hash* hash,
function deflateNoCompression (line 1653) | static unsigned deflateNoCompression(ucvector* out, const unsigned char*...
function writeLZ77data (line 1695) | static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz7...
function deflateDynamic (line 1724) | static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
function deflateFixed (line 1969) | static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
function lodepng_deflatev (line 2017) | static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in,...
function lodepng_deflate (line 2058) | unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
function deflate (line 2071) | static unsigned deflate(unsigned char** out, size_t* outsize,
function update_adler32 (line 2091) | static unsigned update_adler32(unsigned adler, const unsigned char* data...
function adler32 (line 2115) | static unsigned adler32(const unsigned char* data, unsigned len)
function lodepng_zlib_decompress (line 2126) | unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, c...
function zlib_decompress (line 2171) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize, co...
function lodepng_zlib_compress (line 2188) | unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, con...
function zlib_compress (line 2230) | static unsigned zlib_compress(unsigned char** out, size_t* outsize, cons...
function zlib_decompress (line 2248) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize, co...
function zlib_compress (line 2256) | static unsigned zlib_compress(unsigned char** out, size_t* outsize, cons...
function lodepng_compress_settings_init (line 2273) | void lodepng_compress_settings_init(LodePNGCompressSettings* settings)
function lodepng_decompress_settings_init (line 2295) | void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)
function lodepng_crc32 (line 2359) | unsigned lodepng_crc32(const unsigned char* data, size_t length)
function readBitFromReversedStream (line 2377) | static unsigned char readBitFromReversedStream(size_t* bitpointer, const...
function readBitsFromReversedStream (line 2384) | static unsigned readBitsFromReversedStream(size_t* bitpointer, const uns...
function setBitOfReversedStream0 (line 2397) | static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* b...
function setBitOfReversedStream (line 2409) | static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bi...
function lodepng_chunk_length (line 2421) | unsigned lodepng_chunk_length(const unsigned char* chunk)
function lodepng_chunk_type (line 2426) | void lodepng_chunk_type(char type[5], const unsigned char* chunk)
function lodepng_chunk_type_equals (line 2433) | unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, cons...
function lodepng_chunk_ancillary (line 2439) | unsigned char lodepng_chunk_ancillary(const unsigned char* chunk)
function lodepng_chunk_private (line 2444) | unsigned char lodepng_chunk_private(const unsigned char* chunk)
function lodepng_chunk_safetocopy (line 2449) | unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)
function lodepng_chunk_check_crc (line 2464) | unsigned lodepng_chunk_check_crc(const unsigned char* chunk)
function lodepng_chunk_generate_crc (line 2474) | void lodepng_chunk_generate_crc(unsigned char* chunk)
function lodepng_chunk_append (line 2493) | unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, co...
function lodepng_chunk_create (line 2512) | unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, un...
function checkColorValidity (line 2548) | static unsigned checkColorValidity(LodePNGColorType colortype, unsigned ...
function getNumColorChannels (line 2562) | static unsigned getNumColorChannels(LodePNGColorType colortype)
function lodepng_get_bpp_lct (line 2575) | static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned...
function lodepng_color_mode_init (line 2583) | void lodepng_color_mode_init(LodePNGColorMode* info)
function lodepng_color_mode_cleanup (line 2593) | void lodepng_color_mode_cleanup(LodePNGColorMode* info)
function lodepng_color_mode_copy (line 2598) | unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGCo...
function lodepng_color_mode_equal (line 2612) | static int lodepng_color_mode_equal(const LodePNGColorMode* a, const Lod...
function lodepng_palette_clear (line 2637) | void lodepng_palette_clear(LodePNGColorMode* info)
function lodepng_palette_add (line 2644) | unsigned lodepng_palette_add(LodePNGColorMode* info,
function lodepng_get_bpp (line 2665) | unsigned lodepng_get_bpp(const LodePNGColorMode* info)
function lodepng_get_channels (line 2671) | unsigned lodepng_get_channels(const LodePNGColorMode* info)
function lodepng_is_greyscale_type (line 2676) | unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)
function lodepng_is_alpha_type (line 2681) | unsigned lodepng_is_alpha_type(const LodePNGColorMode* info)
function lodepng_is_palette_type (line 2686) | unsigned lodepng_is_palette_type(const LodePNGColorMode* info)
function lodepng_has_palette_alpha (line 2691) | unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)
function lodepng_can_have_alpha (line 2701) | unsigned lodepng_can_have_alpha(const LodePNGColorMode* info)
function lodepng_get_raw_size (line 2708) | size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMo...
function lodepng_get_raw_size_lct (line 2716) | size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType...
function lodepng_get_raw_size_idat (line 2728) | static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const Lo...
function LodePNGUnknownChunks_init (line 2740) | static void LodePNGUnknownChunks_init(LodePNGInfo* info)
function LodePNGUnknownChunks_cleanup (line 2747) | static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)
function LodePNGUnknownChunks_copy (line 2753) | static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodeP...
function LodePNGText_init (line 2776) | static void LodePNGText_init(LodePNGInfo* info)
function LodePNGText_cleanup (line 2783) | static void LodePNGText_cleanup(LodePNGInfo* info)
function LodePNGText_copy (line 2795) | static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* s...
function lodepng_clear_text (line 2808) | void lodepng_clear_text(LodePNGInfo* info)
function lodepng_add_text (line 2813) | unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char...
function LodePNGIText_init (line 2839) | static void LodePNGIText_init(LodePNGInfo* info)
function LodePNGIText_cleanup (line 2848) | static void LodePNGIText_cleanup(LodePNGInfo* info)
function LodePNGIText_copy (line 2864) | static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* ...
function lodepng_clear_itext (line 2880) | void lodepng_clear_itext(LodePNGInfo* info)
function lodepng_add_itext (line 2885) | unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const cha...
function lodepng_info_init (line 2923) | void lodepng_info_init(LodePNGInfo* info)
function lodepng_info_cleanup (line 2943) | void lodepng_info_cleanup(LodePNGInfo* info)
function lodepng_info_copy (line 2954) | unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)
function lodepng_info_swap (line 2971) | void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b)
function addColorBits (line 2981) | static void addColorBits(unsigned char* out, size_t index, unsigned bits...
type ColorTree (line 2992) | struct ColorTree
type ColorTree (line 3000) | struct ColorTree
function color_tree_init (line 3006) | static void color_tree_init(ColorTree* tree)
function color_tree_cleanup (line 3013) | static void color_tree_cleanup(ColorTree* tree)
function color_tree_get (line 3027) | static int color_tree_get(ColorTree* tree, unsigned char r, unsigned cha...
function color_tree_has (line 3040) | static int color_tree_has(ColorTree* tree, unsigned char r, unsigned cha...
function color_tree_add (line 3048) | static void color_tree_add(ColorTree* tree,
function rgba8ToPixel (line 3066) | static unsigned rgba8ToPixel(unsigned char* out, size_t i,
function rgba16ToPixel (line 3140) | static void rgba16ToPixel(unsigned char* out, size_t i,
function getPixelColorRGBA8 (line 3181) | static void getPixelColorRGBA8(unsigned char* r, unsigned char* g,
function getPixelColorsRGBA8 (line 3291) | static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,
function getPixelColorRGBA16 (line 3425) | static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, un...
function lodepng_convert (line 3459) | unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
function lodepng_color_profile_init (line 3533) | void lodepng_color_profile_init(LodePNGColorProfile* profile)
function getValueRequiredBits (line 3557) | static unsigned getValueRequiredBits(unsigned char value)
function lodepng_get_color_profile (line 3567) | unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
function lodepng_auto_choose_color (line 3757) | unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
function paethPredictor (line 3829) | static unsigned char paethPredictor(short a, short b, short c)
function Adam7_getpassvalues (line 3862) | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], si...
function lodepng_inspect (line 3897) | unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
function unfilterScanline (line 3963) | static unsigned unfilterScanline(unsigned char* recon, const unsigned ch...
function unfilter (line 4037) | static unsigned unfilter(unsigned char* out, const unsigned char* in, un...
function Adam7_deinterlace (line 4079) | static void Adam7_deinterlace(unsigned char* out, const unsigned char* i...
function removePaddingBits (line 4129) | static void removePaddingBits(unsigned char* out, const unsigned char* in,
function postProcessScanlines (line 4159) | static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
function readChunk_PLTE (line 4209) | static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned c...
function readChunk_tRNS (line 4233) | static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned c...
function readChunk_bKGD (line 4269) | static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* d...
function readChunk_tEXt (line 4302) | static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* d...
function readChunk_zTXt (line 4345) | static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompres...
function readChunk_iTXt (line 4394) | static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompres...
function readChunk_tIME (line 4487) | static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* d...
function readChunk_pHYs (line 4502) | static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* d...
function decodeGeneric (line 4516) | static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
function lodepng_decode (line 4717) | unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
function lodepng_decode_memory (line 4762) | unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigne...
function lodepng_decode32 (line 4775) | unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,...
function lodepng_decode24 (line 4780) | unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,...
function lodepng_decode_file (line 4786) | unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned*...
function lodepng_decode32_file (line 4798) | unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigne...
function lodepng_decode24_file (line 4803) | unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigne...
function lodepng_decoder_settings_init (line 4809) | void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)
function lodepng_state_init (line 4824) | void lodepng_state_init(LodePNGState* state)
function lodepng_state_cleanup (line 4837) | void lodepng_state_cleanup(LodePNGState* state)
function lodepng_state_copy (line 4843) | void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)
function addChunk (line 4862) | static unsigned addChunk(ucvector* out, const char* chunkName, const uns...
function writeSignature (line 4869) | static void writeSignature(ucvector* out)
function addChunk_IHDR (line 4882) | static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
function addChunk_PLTE (line 4903) | static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)
function addChunk_tRNS (line 4920) | static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)
function addChunk_IDAT (line 4965) | static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, ...
function addChunk_IEND (line 4980) | static unsigned addChunk_IEND(ucvector* out)
function addChunk_tEXt (line 4989) | static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const ...
function addChunk_zTXt (line 5005) | static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const ...
function addChunk_iTXt (line 5032) | static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const ...
function addChunk_bKGD (line 5073) | static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)
function addChunk_tIME (line 5103) | static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)
function addChunk_pHYs (line 5120) | static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)
function filterScanline (line 5138) | static void filterScanline(unsigned char* out, const unsigned char* scan...
function flog2 (line 5195) | static float flog2(float f)
function filter (line 5203) | static unsigned filter(unsigned char* out, const unsigned char* in, unsi...
function addPaddingBits (line 5423) | static void addPaddingBits(unsigned char* out, const unsigned char* in,
function Adam7_interlace (line 5456) | static void Adam7_interlace(unsigned char* out, const unsigned char* in,...
function preProcessScanlines (line 5507) | static unsigned preProcessScanlines(unsigned char** out, size_t* outsize...
function getPaletteTranslucency (line 5600) | static unsigned getPaletteTranslucency(const unsigned char* palette, siz...
function addUnknownChunks (line 5621) | static unsigned addUnknownChunks(ucvector* out, unsigned char* data, siz...
function lodepng_encode (line 5634) | unsigned lodepng_encode(unsigned char** out, size_t* outsize,
function lodepng_encode_memory (line 5827) | unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, con...
function lodepng_encode32 (line 5843) | unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const un...
function lodepng_encode24 (line 5848) | unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const un...
function lodepng_encode_file (line 5854) | unsigned lodepng_encode_file(const char* filename, const unsigned char* ...
function lodepng_encode32_file (line 5865) | unsigned lodepng_encode32_file(const char* filename, const unsigned char...
function lodepng_encode24_file (line 5870) | unsigned lodepng_encode24_file(const char* filename, const unsigned char...
function lodepng_encoder_settings_init (line 5876) | void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)
type lodepng (line 6007) | namespace lodepng
function load_file (line 6011) | unsigned load_file(std::vector<unsigned char>& buffer, const std::stri...
function save_file (line 6020) | unsigned save_file(const std::vector<unsigned char>& buffer, const std...
function decompress (line 6028) | unsigned decompress(std::vector<unsigned char>& out, const unsigned ch...
function decompress (line 6042) | unsigned decompress(std::vector<unsigned char>& out, const std::vector...
function compress (line 6050) | unsigned compress(std::vector<unsigned char>& out, const unsigned char...
function compress (line 6064) | unsigned compress(std::vector<unsigned char>& out, const std::vector<u...
function State (line 6091) | State& State::operator=(const State& other)
function decode (line 6099) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
function decode (line 6116) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
function decode (line 6122) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
function decode (line 6137) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
function decode (line 6145) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
function encode (line 6157) | unsigned encode(std::vector<unsigned char>& out, const unsigned char* ...
function encode (line 6171) | unsigned encode(std::vector<unsigned char>& out,
function encode (line 6179) | unsigned encode(std::vector<unsigned char>& out,
function encode (line 6194) | unsigned encode(std::vector<unsigned char>& out,
function encode (line 6203) | unsigned encode(const std::string& filename,
function encode (line 6213) | unsigned encode(const std::string& filename,
FILE: tools/src/common/lodepng.h
type LodePNGColorType (line 91) | typedef enum LodePNGColorType
function namespace (line 199) | namespace lodepng
type LodePNGDecompressSettings (line 255) | typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
type LodePNGDecompressSettings (line 256) | struct LodePNGDecompressSettings
type LodePNGCompressSettings (line 283) | typedef struct LodePNGCompressSettings LodePNGCompressSettings;
type LodePNGCompressSettings (line 284) | struct LodePNGCompressSettings /*deflate = compress*/
type LodePNGColorMode (line 318) | typedef struct LodePNGColorMode
type LodePNGTime (line 395) | typedef struct LodePNGTime
type LodePNGInfo (line 407) | typedef struct LodePNGInfo
type LodePNGDecoderSettings (line 519) | typedef struct LodePNGDecoderSettings
type LodePNGFilterStrategy (line 539) | typedef enum LodePNGFilterStrategy
type LodePNGColorProfile (line 559) | typedef struct LodePNGColorProfile
type LodePNGEncoderSettings (line 585) | typedef struct LodePNGEncoderSettings
type LodePNGState (line 622) | typedef struct LodePNGState
function namespace (line 817) | namespace lodepng
FILE: tools/src/common/logging.h
function namespace (line 10) | namespace nLog {
FILE: tools/src/common/mod.h
type tSample (line 13) | struct tSample {
type tNote (line 29) | struct tNote {
function class (line 36) | class tMod {
FILE: tools/src/common/palette.cpp
function beginsWith (line 21) | static bool beginsWith(
function tPalette (line 30) | tPalette tPalette::fromGpl(const std::string &szPath) {
function tPalette (line 73) | tPalette tPalette::fromPlt(const std::string &szPath) {
function tPalette (line 117) | tPalette tPalette::fromPromotionPal(const std::string &szPath) {
function tPalette (line 144) | tPalette tPalette::fromAct(const std::string &szPath) {
function tPalette (line 173) | tPalette tPalette::fromFile(const std::string &szPath) {
FILE: tools/src/common/palette.h
function class (line 12) | class tPalette {
FILE: tools/src/common/parse.h
function namespace (line 11) | namespace nParse {
function hexToRange (line 28) | bool hexToRange(const std::string &szVal, t_tValue Min, t_tValue Max, t_...
FILE: tools/src/common/rgb.cpp
function tRgb (line 35) | tRgb tRgb::to12Bit(void) const
function tRgb (line 44) | tRgb tRgb::toEhb(void) const
FILE: tools/src/common/rgb.h
type tRgb (line 11) | struct tRgb {
FILE: tools/src/common/sfx.cpp
function tSfx (line 157) | tSfx tSfx::splitAfter(std::uint32_t ulSamples) {
FILE: tools/src/common/sfx.h
function class (line 12) | class tSfx {
FILE: tools/src/common/stream.cpp
type nStream (line 7) | namespace nStream {
FILE: tools/src/common/stream.h
function namespace (line 10) | namespace nStream {
FILE: tools/src/common/utf8.h
function decode (line 30) | static inline uint32_t decode(uint32_t* state, uint32_t* codep, uint32_t...
FILE: tools/src/common/wav.cpp
type tAudioFormat (line 11) | enum class tAudioFormat: std::uint16_t {
function tryRead (line 15) | bool tryRead(std::ifstream &Stream, char *Buffer, std::uint32_t ulSize)
FILE: tools/src/common/wav.h
function class (line 12) | class tWav {
FILE: tools/src/font_conv.cpp
type tFontFormat (line 17) | enum class tFontFormat: std::uint8_t {
function printUsage (line 34) | void printUsage(const std::string &szAppName) {
function getCharCodeFromTok (line 62) | static std::uint32_t getCharCodeFromTok(const tJson *pJson, std::uint16_...
function main (line 88) | int main(int lArgCount, const char *pArgs[])
FILE: tools/src/mod_tool.cpp
function main (line 19) | int main(int lArgCount, const char *pArgs[])
FILE: tools/src/pak_tool.cpp
type tPakEntry (line 16) | struct tPakEntry {
function adler32Buffer (line 24) | static std::uint32_t adler32Buffer(const std::uint8_t *pData, std::uint3...
function printUsage (line 40) | static void printUsage(const std::string &szAppName) {
function main (line 51) | int main(int lArgCount, const char *pArgs[])
FILE: tools/src/palette_conv.cpp
function printUsage (line 14) | void printUsage(const std::string &szAppName) {
function main (line 32) | int main(int lArgCount, const char *pArgs[]) {
FILE: tools/src/tileset_conv.cpp
type tConfig (line 13) | struct tConfig {
function printUsage (line 100) | static void printUsage(const std::string &szAppName)
function readTiles (line 127) | static std::vector<tChunkyBitmap> readTiles(
function saveTiles (line 211) | static void saveTiles(
function main (line 308) | int main(int lArgCount, const char *pArgs[])
Condensed preview — 226 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,456K chars).
[
{
"path": ".codedocs",
"chars": 1157,
"preview": "# CodeDocs.xyz Configuration File\n#\n# Rename this example to '.codedocs' and put it in the root directory of your\n# repo"
},
{
"path": ".gitattributes",
"chars": 95,
"preview": "# Explicit list for language for file extension\n*.h linguist-language=C\n*.c linguist-language=C"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/minor.md",
"chars": 625,
"preview": "<!--- Use this only if you've made non-breaking improvements or bugfixes -->\n\n## Description\n<!--- Describe your changes"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/new_component.md",
"chars": 2802,
"preview": "<!--- Use this only if you've created new ACE component (manager, util, etc.). Please provide a name of your newly creat"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/significant_changes.md",
"chars": 1216,
"preview": "<!--- Use this only if you've made significant changes to ACE's inner workings. -->\n\n## Description\n<!--- Describe your "
},
{
"path": ".github/pull_request_template.md",
"chars": 277,
"preview": "Please go the the `Preview` tab and select the appropriate sub-template:\n\n* [New component](?expand=1&template=new_compo"
},
{
"path": ".gitignore",
"chars": 288,
"preview": ".idea/\r\n**/.vscode/*\r\nace\\.code-workspace\r\n\r\nbuild/\r\nlib/\r\nbin/\r\n\r\n# Showcase\r\nshowcase/showcase\r\nshowcase/*.bmp\r\nshowca"
},
{
"path": "CMakeLists.txt",
"chars": 4171,
"preview": "cmake_minimum_required(VERSION 3.14.0)\nproject(ACE\n\tLANGUAGES C\n\tDESCRIPTION \"Amiga C Engine\"\n\tHOMEPAGE_URL \"https://git"
},
{
"path": "Doxyfile",
"chars": 106227,
"preview": "# Doxyfile 1.8.11\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org)"
},
{
"path": "Jenkinsfile",
"chars": 3679,
"preview": "def notify(status){\n\temailext (\n\t\tbody: '$DEFAULT_CONTENT',\n\t\trecipientProviders: [\n\t\t\t[$class: 'CulpritsRecipientProvid"
},
{
"path": "LICENSE",
"chars": 16725,
"preview": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\""
},
{
"path": "README.md",
"chars": 4237,
"preview": "# ACE - Amiga C Engine\r\n\r\n[](https://codedocs.xyz/AmigaPorts/AC"
},
{
"path": "cmake/CPM.cmake",
"chars": 41017,
"preview": "# CPM.cmake - CMake's missing package manager\n# ===========================================\n# See https://github.com/cpm"
},
{
"path": "cmake/ace_config.cmake",
"chars": 2966,
"preview": "set(ACE_LIBRARY_KIND OBJECT CACHE STRING \"Build kind: static library or bunch of .o files. OBJECT allows for more link-t"
},
{
"path": "cmake/ace_functions.cmake",
"chars": 10608,
"preview": "function(toAbsolute PATH_IN)\n\tif(NOT IS_ABSOLUTE ${${PATH_IN}})\n\t\tset(${PATH_IN} \"${CMAKE_CURRENT_SOURCE_DIR}/${${PATH_I"
},
{
"path": "cmake/ace_install.cmake",
"chars": 596,
"preview": "install(TARGETS ${TARGET_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR})\ninstall(FILES ${HEADERS_ACE} DESTINATION ${CMAKE_INS"
},
{
"path": "docs/README.md",
"chars": 1849,
"preview": "# Documentation\n\nWelcome to the ACE docs! If you're interested in something and it's not covered\nhere, or you have a har"
},
{
"path": "docs/contributing/codestyle.md",
"chars": 3486,
"preview": "# Code style\n\n## Tabs, braces and indents\n\n``` c\nvoid someFn(void) {\n if(stuff) {\n\n }\n else {\n\n }\n\n // the only cas"
},
{
"path": "docs/installing/ace.md",
"chars": 2665,
"preview": "# Building ACE\n\nCurrently, only CMake is supported.\n\n## Building using CMake\n\nCurrently, CMake build supports only GCC ("
},
{
"path": "docs/installing/compiler.md",
"chars": 12363,
"preview": "# Compiler setup\n\nCurrently, only Bartman's and Bebbo's GCC are supported.\n\n## Bartman's toolchain\n\nBartman has created "
},
{
"path": "docs/installing/tools.md",
"chars": 1286,
"preview": "# Building ACE tools\n\nACE comes bundled with its own tools for converting file formats.\nSince those apps run on your dev"
},
{
"path": "docs/palette-plt-v2-changes.md",
"chars": 2437,
"preview": "# `.plt` v2, AGA alignment, and `palette_conv` defaults\n\nThis document summarises the palette / `.plt` work: what change"
},
{
"path": "docs/programming/ace_in_a_nutshell.md",
"chars": 12107,
"preview": "# ACE in a nutshell\n\n## Utils and managers\n\nACE is divided into managers and utils.\n\n### Utils\n\nUtils are for working wi"
},
{
"path": "docs/programming/advancedsprites.md",
"chars": 4257,
"preview": "# Using Advanced Aprites\n\n## About Advanced Sprites\n\nAdvanced Sprites Manager is an overlay to the sprite manager.\n\nIt a"
},
{
"path": "docs/programming/aga.md",
"chars": 1374,
"preview": "# AGA support\n\nACE is still OCS/ECS-first, but it includes AGA-specific functionality behind a build flag.\n\n## Enable AG"
},
{
"path": "docs/programming/audio.md",
"chars": 4503,
"preview": "# Working with Audio in ACE\n\nACE provides audio capabilities through integrated PTPlayer by Frank Wille rewritten to C f"
},
{
"path": "docs/programming/blit.md",
"chars": 6146,
"preview": "# Blitter\n\nWe still don't have anything except black screen - in this step we're going\nto use some colors. This tutorial"
},
{
"path": "docs/programming/blit_undraw.md",
"chars": 5760,
"preview": "# Handling blitted object undraw\n\nSo far, you've managed to load and display the background, but paddles are trashing it"
},
{
"path": "docs/programming/blits_with_mask.md",
"chars": 6279,
"preview": "# Blitting with mask\n\nSo far, you've blitted solid rectangles and maskless backgrounds, as well as used maskless blits t"
},
{
"path": "docs/programming/fixed_point.md",
"chars": 5116,
"preview": "# Fixed-point math\n\nThe stock Amiga 500 doesn't have hardware support for floating-point numbers and it's too slow to re"
},
{
"path": "docs/programming/fonts.md",
"chars": 3133,
"preview": "# Working with Fonts\n\nACE provides a font system that allows you to display text in your games with various formatting o"
},
{
"path": "docs/programming/hello_world.md",
"chars": 6988,
"preview": "# \"Hello world\" example\n\nFirst, create folder for your project. Then, create src folder for keeping your\n.c files. Let's"
},
{
"path": "docs/programming/loading_images.md",
"chars": 5197,
"preview": "# Loading images and displaying background\n\nSo far, only solid rectangles were used for graphics.\nIt's time to use image"
},
{
"path": "docs/programming/moving_blits.md",
"chars": 8823,
"preview": "# Moving blitted objects\n\nLast time, we've added static paddles and ball for pong-like game.\nNow it's time to make thing"
},
{
"path": "docs/programming/os.md",
"chars": 4024,
"preview": "# Working with and without OS\n\nTo squeeze as much performance as possible, ACE allows for disabling Amiga OS and re-enab"
},
{
"path": "docs/programming/palette.md",
"chars": 2298,
"preview": "# Using Palettes\n\nACE uses its custom `.plt` file format, to which you can convert your palettes from multiple common fo"
},
{
"path": "docs/programming/res/overworld.gpl",
"chars": 733,
"preview": "GIMP Palette\nName: Palette\nColumns: 4\n# Author: Anonymous\n# URL: https://lospec.com/palette-list\n# Profile: sRGB\n# Color"
},
{
"path": "docs/programming/sprites.md",
"chars": 6327,
"preview": "# Using sprites\n\n## Basic description of sprite hardware\n\nThere are eight sprite channels, meaning that Amiga can displa"
},
{
"path": "docs/programming/tilebuffer.md",
"chars": 8632,
"preview": "# Multi-directional large tilemaps scrolling with TileBuffer\n\n## Basic description\n\nThis tutorial will focus on multi-di"
},
{
"path": "docs/programming/using_bobs.md",
"chars": 7846,
"preview": "# Working with BOBs (Blitter OBjects)\n\nACE provides a powerful system for managing and animating 2D sprites using the Am"
},
{
"path": "docs/programming/view.md",
"chars": 6291,
"preview": "# Views and viewports\n\nIf you did any Amiga development using graphics.library, you'll discover that\nACE builds on same "
},
{
"path": "docs/tools/audio_conv.md",
"chars": 1353,
"preview": "# Converting Audio for ACE\n\nBefore using sound effects in your game, you'll need to convert your audio files using the `"
},
{
"path": "docs/tools/bitmap_conv.md",
"chars": 2455,
"preview": "# Bitmap conversion\n\nAfter you've got yourself a palette, you may want to use it to display some images. For this task t"
},
{
"path": "docs/tools/font_conv.md",
"chars": 1600,
"preview": "# Converting Fonts for ACE\n\nThe `font_conv` tool allows you to convert common font files to ACE's custom `.fnt` file for"
},
{
"path": "docs/tools/palette_conv.md",
"chars": 3887,
"preview": "# Palette Conversion Tool\n\nThe palette_conv tool allows you to convert between various palette formats for use with the "
},
{
"path": "include/ace/generic/main.h",
"chars": 3470,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/generic/screen.h",
"chars": 2096,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/macros.h",
"chars": 2942,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/advancedsprite.h",
"chars": 4147,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/blit.h",
"chars": 18486,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/bob.h",
"chars": 8269,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not"
},
{
"path": "include/ace/managers/copper.h",
"chars": 9497,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/game.h",
"chars": 477,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/joy.h",
"chars": 2355,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/key.h",
"chars": 4715,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/log.h",
"chars": 2815,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/memory.h",
"chars": 2700,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/mouse.h",
"chars": 6735,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/ptplayer.h",
"chars": 11734,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/rand.h",
"chars": 3165,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/sprite.h",
"chars": 5797,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/state.h",
"chars": 4307,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/system.h",
"chars": 3165,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/timer.h",
"chars": 2670,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/viewport/camera.h",
"chars": 1845,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/viewport/scrollbuffer.h",
"chars": 4295,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/viewport/simplebuffer.h",
"chars": 3238,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/managers/viewport/tilebuffer.h",
"chars": 9468,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/types.h",
"chars": 5353,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/bitmap.h",
"chars": 6945,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/bmframe.h",
"chars": 828,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/chunky.h",
"chars": 4282,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/custom.h",
"chars": 5553,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/dir.h",
"chars": 2522,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/disk_file.h",
"chars": 1741,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/disk_file_private.h",
"chars": 1019,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/endian.h",
"chars": 2367,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/extview.h",
"chars": 9970,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/file.h",
"chars": 1885,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/font.h",
"chars": 6608,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/mini_std.h",
"chars": 546,
"preview": "#ifndef _ACE_UTILS_MINI_STD_H_\n#define _ACE_UTILS_MINI_STD_H_\n\n// All the missing stuff that ACE needs and which Bartman"
},
{
"path": "include/ace/utils/pak_file.h",
"chars": 885,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/palette.h",
"chars": 4865,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/sprite.h",
"chars": 2139,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/string.h",
"chars": 2607,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/ace/utils/tag.h",
"chars": 1606,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "include/fixmath/fix16.h",
"chars": 11365,
"preview": "#ifndef __fixmath_fix16_h__\n#define __fixmath_fix16_h__\n\n#define FIXMATH_NO_ROUNDING // Faster but less accurate\n#d"
},
{
"path": "include/fixmath/fix16_trig_sin_lut.h",
"chars": 733514,
"preview": "#ifndef __fix16_trig_sin_lut_h__\n#define __fix16_trig_sin_lut_h__\n\nstatic const uint32_t _fix16_sin_lut_count = 102688;\n"
},
{
"path": "include/fixmath/fixmath.h",
"chars": 314,
"preview": "#ifndef __fixmath_fixmath_h__\n#define __fixmath_fixmath_h__\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif\n\n/*!\n\t\\file fixmath."
},
{
"path": "include/fixmath/fract32.h",
"chars": 1066,
"preview": "#ifndef __fixmath_fract32_h__\n#define __fixmath_fract32_h__\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif\n\n#include <stdint.h>"
},
{
"path": "include/fixmath/int64.h",
"chars": 5017,
"preview": "#ifndef __fixmath_int64_h__\n#define __fixmath_int64_h__\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif\n\n#ifndef FIXMATH_NO_64BI"
},
{
"path": "include/fixmath/uint32.h",
"chars": 298,
"preview": "#ifndef __fixmath_uint32_h__\n#define __fixmath_uint32_h__\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif\n\n#include <stdint.h>\n\n"
},
{
"path": "include/mini_std/ctype.h",
"chars": 1404,
"preview": "#ifndef _DEIDARA_CTYPE\n#define _DEIDARA_CTYPE\n\n#ifdef __cplusplus\n#if !defined(restrict)\n#define restrict\n#endif\nextern "
},
{
"path": "include/mini_std/errno.h",
"chars": 3278,
"preview": "/**\n * This file has no copyright assigned and is placed in the Public Domain.\n * This file is part of the mingw-w64 run"
},
{
"path": "include/mini_std/printf.h",
"chars": 5192,
"preview": "///////////////////////////////////////////////////////////////////////////////\n// \\author (c) Marco Paland (info@paland"
},
{
"path": "include/mini_std/sort_r.h",
"chars": 9742,
"preview": "/* Isaac Turner 29 April 2014 Public Domain */\n#ifndef SORT_R_H_\n#define SORT_R_H_\n\n#include <stdlib.h>\n#include <string"
},
{
"path": "include/mini_std/stdint.h",
"chars": 157,
"preview": "#define MINISTD_STDINT_PATH <../../__GNUC__.__GNUC_MINOR__.__GNUC_PATCHLEVEL__/include/stdint-gcc.h>\n#include MINISTD_ST"
},
{
"path": "include/mini_std/stdio.h",
"chars": 1100,
"preview": "#ifndef _MINI_STD_STDIO_H_\n#define _MINI_STD_STDIO_H_\n\n#include <stddef.h>\n#include <stdarg.h>\n#include \"printf.h\"\n\n#ifd"
},
{
"path": "include/mini_std/stdlib.h",
"chars": 409,
"preview": "#ifndef _MINI_STD_STDLIB_H_\n#define _MINI_STD_STDLIB_H_\n\n#include <stddef.h>\n\n#ifdef __cplusplus\n#if !defined(restrict)\n"
},
{
"path": "include/mini_std/string.h",
"chars": 888,
"preview": "#ifndef _MINI_STD_STRING_H_\n#define _MINI_STD_STRING_H_\n\n#include <stddef.h>\n#include <../sys-include/string.h>\n\n#ifdef "
},
{
"path": "showcase/CMakeLists.txt",
"chars": 2390,
"preview": "cmake_minimum_required(VERSION 3.14)\r\nproject(showcase)\r\n\r\n# Lowercase project name for binaries and packaging\r\nstring(T"
},
{
"path": "showcase/README.md",
"chars": 1028,
"preview": "# ACE Showcase\r\n\r\nUsed to test regressions and demonstrate features. If you're new to ACE,\r\nit's the best place to start"
},
{
"path": "showcase/res/amidb32.gpl",
"chars": 739,
"preview": "GIMP Palette\r\nName: \\amidb32\r\nColumns: 4\r\n#\r\n 0 0 0 Index 0\r\n170 187 187 Index 1\r\n 85 85 34 Index 2\r\n102 68 51 "
},
{
"path": "showcase/res/blitToSmall.gpl",
"chars": 281,
"preview": "GIMP Palette\r\nName: \\blitToSmall\r\nColumns: 4\r\n#\r\n 0 0 255 Index 0\r\n255 0 0 Index 1\r\n255 255 0 Index 2\r\n187 221 "
},
{
"path": "showcase/res/pong.gpl",
"chars": 279,
"preview": "GIMP Palette\nName: pong\nColumns: 4\n#\n 0 17 34\tIndex 0\n255 255 255\tIndex 1\n 68 0 34\tIndex 2\n136 0 34\tIndex 3\n 34"
},
{
"path": "showcase/src/game.c",
"chars": 2539,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/game.h",
"chars": 1389,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not"
},
{
"path": "showcase/src/menu/menu.c",
"chars": 7235,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/menu/menu.h",
"chars": 1259,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not"
},
{
"path": "showcase/src/menu/menulist.c",
"chars": 3320,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not"
},
{
"path": "showcase/src/menu/menulist.h",
"chars": 2465,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/blit.c",
"chars": 3463,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/blit.h",
"chars": 969,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/blitsmalldest.c",
"chars": 2950,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/blitsmalldest.h",
"chars": 935,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/buffer_scroll.c",
"chars": 6541,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/buffer_scroll.h",
"chars": 932,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/copper.c",
"chars": 8199,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/copper.h",
"chars": 893,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/font.c",
"chars": 4861,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/font.h",
"chars": 985,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/input.c",
"chars": 8260,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/input.h",
"chars": 887,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/interleaved.c",
"chars": 3011,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/interleaved.h",
"chars": 923,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/lines.c",
"chars": 4644,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/lines.h",
"chars": 884,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/twister.c",
"chars": 5912,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "showcase/src/test/twister.h",
"chars": 406,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/advancedsprite.c",
"chars": 10492,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/blit.c",
"chars": 22731,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/bob.c",
"chars": 17525,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\r\n * License, v. 2.0. If a copy of the MPL was not"
},
{
"path": "src/ace/managers/copper.c",
"chars": 17387,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/game.c",
"chars": 392,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/joy.c",
"chars": 5977,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/key.c",
"chars": 3811,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/log.c",
"chars": 5933,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/memory.c",
"chars": 7356,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/mouse.c",
"chars": 3398,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/ptplayer.c",
"chars": 102100,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/rand.c",
"chars": 2533,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/sprite.c",
"chars": 8660,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/state.c",
"chars": 4308,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/system.c",
"chars": 42661,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/timer.c",
"chars": 3004,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/viewport/camera.c",
"chars": 3652,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/viewport/scrollbuffer.c",
"chars": 18482,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/viewport/simplebuffer.c",
"chars": 14297,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/managers/viewport/tilebuffer.c",
"chars": 34806,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/bitmap.c",
"chars": 15040,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/bmframe.c",
"chars": 2289,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/chunky.c",
"chars": 3674,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/custom.c",
"chars": 2420,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/dir.c",
"chars": 2274,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/disk_file.c",
"chars": 10273,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/extview.c",
"chars": 18842,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/file.c",
"chars": 2604,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/font.c",
"chars": 9032,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/pak_file.c",
"chars": 15636,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/palette.c",
"chars": 7136,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/sprite.c",
"chars": 2339,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/string.c",
"chars": 2069,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/ace/utils/tag.c",
"chars": 1183,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "src/fixmath/fix16.c",
"chars": 12358,
"preview": "#include <fixmath/fix16.h>\n#include <fixmath/int64.h>\n\n/* Subtraction and addition with overflow detection.\n * The versi"
},
{
"path": "src/fixmath/fix16_exp.c",
"chars": 4788,
"preview": "#include <fixmath/fix16.h>\n#include <stdbool.h>\n\n#ifndef FIXMATH_NO_CACHE\nstatic fix16_t _fix16_exp_cache_index[4096] ="
},
{
"path": "src/fixmath/fix16_sqrt.c",
"chars": 2011,
"preview": "#include <fixmath/fix16.h>\n\n/* The square root algorithm is quite directly from\n * http://en.wikipedia.org/wiki/Methods_"
},
{
"path": "src/fixmath/fix16_str.c",
"chars": 2547,
"preview": "#include <fixmath/fix16.h>\n#include <stdbool.h>\n#include <ctype.h>\n\nstatic const uint32_t scales[8] = {\n /* 5 decimal"
},
{
"path": "src/fixmath/fix16_trig.c",
"chars": 4929,
"preview": "#include <limits.h>\n#include <fixmath/fix16.h>\n\n#if defined(FIXMATH_SIN_LUT)\n#include <fixmath/fix16_trig_sin_lut.h>\n#el"
},
{
"path": "src/fixmath/fract32.c",
"chars": 710,
"preview": "#include <fixmath/fract32.h>\n\n\n\nfract32_t fract32_create(uint32_t inNumerator, uint32_t inDenominator) {\n\tif(inDenominat"
},
{
"path": "src/fixmath/uint32.c",
"chars": 423,
"preview": "#include <fixmath/uint32.h>\n\nuint32_t uint32_log2(uint32_t inVal) {\n\tif(inVal == 0)\n\t\treturn 0;\n\tuint32_t tempOut = 0;\n\t"
},
{
"path": "src/mini_std/ctype.c",
"chars": 2198,
"preview": "#include \"ctype.h\"\n\nconst unsigned short _ctype[] = {\n _C, _C, _C, _C, _C, _C, _C, _C, "
},
{
"path": "src/mini_std/errno.c",
"chars": 31,
"preview": "#include <errno.h>\n\nint errno;\n"
},
{
"path": "src/mini_std/intrin.c",
"chars": 2866,
"preview": "#include <stdint.h>\n\n__attribute__ ((used))\nint __clzsi2 (unsigned x) {\n\t// https://en.wikipedia.org/wiki/Find_first_set"
},
{
"path": "src/mini_std/printf.c",
"chars": 27194,
"preview": "///////////////////////////////////////////////////////////////////////////////\n// \\author (c) Marco Paland (info@paland"
},
{
"path": "src/mini_std/stdio_file.c",
"chars": 3125,
"preview": "#include <stdio.h>\n#include <ace/types.h>\n#include <proto/dos.h>\n\n// Some things are implemented from scratch, some are "
},
{
"path": "src/mini_std/stdio_putchar.c",
"chars": 110,
"preview": "#include <stdio.h>\n#include <proto/dos.h>\n\nvoid _putchar(char character) {\n\tWrite(Output(), &character, 1);\n}\n"
},
{
"path": "src/mini_std/stdlib.c",
"chars": 720,
"preview": "#include <proto/dos.h>\n#include <sort_r.h>\n\nstatic int (*s_qsortComp)(const void *, const void *);\n\nvoid exit(int exit_c"
},
{
"path": "src/mini_std/string.c",
"chars": 2208,
"preview": "#include <string.h>\n\nint memcmp(const void *pLhs, const void *pRhs, size_t count) {\n\t// https://en.cppreference.com/w/c/"
},
{
"path": "src/mini_std/strtoul.c",
"chars": 1283,
"preview": "#include <ctype.h>\n#include <errno.h>\n#include <limits.h>\n#include <stdlib.h>\n#include \"stdio.h\"\n\nunsigned long strtoul("
},
{
"path": "tools/.gitignore",
"chars": 120,
"preview": "# C compiler intermediate files\n*.o\n\n# Input file types\n*.jpg\n*.png\n*.gpl\n\n# Output file types\n*.plt\n*.bm\n\n# Varia\n*.lnk"
},
{
"path": "tools/CMakeLists.txt",
"chars": 2189,
"preview": "cmake_minimum_required(VERSION 3.14.0)\n# Generator expression skips Debug/Release/... directories for MSVC\nset(CMAKE_RUN"
},
{
"path": "tools/src/audio_conv.cpp",
"chars": 6172,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/bitmap_conv.cpp",
"chars": 5600,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/bitmap_transform.cpp",
"chars": 7462,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/bitmap.cpp",
"chars": 10475,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/bitmap.h",
"chars": 1992,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/compress.cpp",
"chars": 7646,
"preview": "#include \"../common/compress.hpp\"\n#include <cmath>\n#include <fmt/format.h>\n#include <fmt/ranges.h>\n\nstatic constexpr aut"
},
{
"path": "tools/src/common/compress.hpp",
"chars": 1366,
"preview": "#ifndef _ACE_TOOLS_COMMON_COMPRESS_H_\n#define _ACE_TOOLS_COMMON_COMPRESS_H_\n\n#include <cstdint>\n#include <cstddef>\n\nenum"
},
{
"path": "tools/src/common/endian.h",
"chars": 1053,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/exception.cpp",
"chars": 298,
"preview": "#include \"exception.h\"\n\nvoid exceptionHandle(\n\tconst std::exception &Ex, const std::string &szOperation\n)\n{\n\t\tauto Messa"
},
{
"path": "tools/src/common/exception.h",
"chars": 471,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/flags/allow_flags.hpp",
"chars": 385,
"preview": "#ifndef ENUM_CLASS_ALLOW_FLAGS_HPP\n#define ENUM_CLASS_ALLOW_FLAGS_HPP\n\n\n#include <type_traits>\n\n\nnamespace flags {\n\n\ntem"
},
{
"path": "tools/src/common/flags/flags.hpp",
"chars": 7663,
"preview": "#ifndef ENUM_CLASS_FLAGS_HPP\n#define ENUM_CLASS_FLAGS_HPP\n\n\n#include \"allow_flags.hpp\"\n#include \"iterator.hpp\"\n\n#include"
},
{
"path": "tools/src/common/flags/flagsfwd.hpp",
"chars": 154,
"preview": "#ifndef ENUM_CLASS_FLAGSFWD_HPP\n#define ENUM_CLASS_FLAGSFWD_HPP\n\n\nnamespace flags { template <class E> class flags; }\n\n\n"
},
{
"path": "tools/src/common/flags/iterator.hpp",
"chars": 1797,
"preview": "#ifndef ENUM_CLASS_ITERATOR_HPP\n#define ENUM_CLASS_ITERATOR_HPP\n\n\n#include \"flagsfwd.hpp\"\n\n#include <iterator>\n\n\nnamespa"
},
{
"path": "tools/src/common/fs.cpp",
"chars": 2313,
"preview": "// C++17 deprecation for codecvt still doesn't have substitute\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING"
},
{
"path": "tools/src/common/fs.h",
"chars": 801,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/glyph_set.cpp",
"chars": 12333,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/glyph_set.h",
"chars": 1851,
"preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not "
},
{
"path": "tools/src/common/jsmn.c",
"chars": 7851,
"preview": "#include \"jsmn.h\"\n\n/**\n * Allocates a fresh unused token from the token pull.\n */\nstatic jsmntok_t *jsmn_alloc_token(jsm"
}
]
// ... and 26 more files (download for full content)
About this extraction
This page contains the full source code of the AmigaPorts/ACE GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 226 files (2.2 MB), approximately 592.8k tokens, and a symbol index with 1302 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.