libansilove 1.4.2 (2025-03-24)

- Add links to the Homebrew and Guix packages in the README
- Add a link to Abydos in the list of projects using libansilove
- Bump cmake_minimum_required to 3.5, to allow building with CMake 4.0
- Bump cmake_minimum_required to 3.10 to be more future proof



libansilove 1.4.1 (2023-05-28)

- Sync embedded Spleen 8x16 version to Spleen 2.0.0 (this swap arrows at
  positions 1A and 1B)



libansilove 1.4.0 (2023-05-23)

- Add initial RPM spec file
- Add font data for Spleen 8x16, it now has full CP437 support



libansilove 1.3.1 (2022-04-26)

- Increment pcboard_buffer by more than one element at a time
- Fix XBin font memory leaks



libansilove 1.3.0 (2022-04-14)

- Properly handle 512 characters XBin fonts
- Add a link to the Gentoo package in the README
- Also build and install libansilove as a static library
- List projects using libansilove in the README



libansilove 1.2.9 (2022-02-10)

- Stop forcing FORTIFY_SOURCE=2, it should be package builders decision
- Bump CMake minimum required version to 3.1
- Add SPDX short license identifier in source files
- Use CMAKE_C_STANDARD instead of hardcoding compiler flags
- Add missing <stdint.h> include



libansilove 1.2.8 (2020-10-25)

- Add LibFuzzer-based fuzzers for each supported format
- Do not hardcode CMAKE_BUILD_TYPE to "Release" in CMakeLists.txt
- Only enable FORTIFY_SOURCE level 2 for release builds
- Add #ifdef __cplusplus extern "C" to allow calling library functions from C++
- Constify input and output arguments of ansilove_loadfile() and
  ansilove_savefile()



libansilove 1.2.7 (2020-10-21)

- Error out early with ANSILOVE_FORMAT_ERROR in case ctx->length is 0
- Enable FORTIFY_SOURCE level 2
- Set CMAKE_BUILD_TYPE to "Release" in CMakeLists.txt
- Move variables declaration to the top of each loader function
- Initialize ansi_buffer and pcboard_buffer to NULL
- Refactor the IceDraw loader to use a state machine
- Check strndup() return value and error out on failed allocations
- Add some file format integrity checks in the IceDraw loader
- Add range integrity checks for scale_factor values in the output() function
- Return error code directly if ctx->length is 0 in the ANSI and PCBoard loaders
- Add range integrity checks for columns value in relevant loaders
- Add range integrity checks for bits value in relevant loaders
- Add additional file format integrity check in the XBin loader



libansilove 1.2.6 (2020-09-30)

- Introduce canvas' width/height variables and refactor canvas creation
- Refactor calls to drawchar() in the ANSI loader
- Refactor the ANSI loader to use a state machine
- Remove systematic filtering of Form Feed characters in Amiga mode
- Correct values for TUNDRA_COLOR_FOREGROUND and TUNDRA_COLOR_BACKGROUND
- Switch to using reallocarray(3) in the ANSI and PCBoard loaders
- Add a compat layer for systems which do not have reallocarray(3)
- Refactor canvas allocation for retina output
- Introduce the ANSILOVE_RANGE_ERROR macro, for values out of allowed range
- Error gracefully if canvas' width or height is equal to zero
- Remove an useless comparison in drawchar()
- Add some file format integrity checks in the Tundra loader
- Refactor error handling in several loaders



libansilove 1.2.5 (2020-09-24)

- Add missing parentheses in an if statement in output()
- Define CR, LF, TAB, SUB, and ESC macros only once
- Refactor error handling in the PCBoard loader
- Stop parsing for PCBoard cursor position sequences
- Add bound checks for {back,fore}ground color values in the PCBoard loader
- Fix default background and foreground colors in the PCBoard loader
- Refactor the PCBoard loader to use a state machine
- Refactor the Binary loader to use a state machine
- Refactor the Artworx loader to use a state machine
- Add some file format integrity checks in the XBin loader



libansilove 1.2.4 (2020-06-21)

- Use size_t in for loops setting color palettes
- Remove unneeded gdImageFill() call when using Workbench mode
- Define _GNU_SOURCE in CMakeLists.txt to avoid cluttering source files
- Use size_t type for variables used to loop over arrays
- Separate RGB values for palettes, makes color allocation code more
  readable and efficient
- Move ADF color mapping array to config.h



libansilove 1.2.3 (2020-05-25)

- Call memset() to set all fontData struct fields to zero in all loaders
- Refactor error handling in ansilove_savefile()
- Add error handling for fwrite() in ansilove_savefile()
- Fix includes in various source files



libansilove 1.2.2 (2020-04-30)

- Refactor the output function, to allow combining DOS aspect ratio and Retina
- Remove the im_ prefix for all gdImagePtr variables
- Various README changes and improvements



libansilove 1.2.1 (2020-03-17)

- Call memset() to set all fontData struct fields to zero
- Use the ternary operator to simplify character attributes assignments



libansilove 1.2.0 (2020-02-17)

- Correct section number in manual page
- Add initial manual pages for all library functions and file formats renders
- Stop calculating columnMax in the PCBoard loader, it's unused
- Add support for user-specified columns in the PCBoard loader



libansilove 1.1.9 (2020-01-20)

- Remove unneeded gdImageColorAllocate calls in the ADF and IDF loaders
- Reset background24 to 0 when encountering blink attribute in an SGR sequence,
  fixing the remaining rendering bugs for 24-bit ANSI artworks



libansilove 1.1.8 (2020-01-18)

- Use OpenBSD style(9) for function prototypes and declarations
- Properly reset pcboard buffer when CLS is encountered
- Use memcmp() instead of testing each character one by one in the PCB loader
- Do not use background and foreground variables to handle 24-bit ANSI colors
- Various improvements in the IDF loader



libansilove 1.1.7 (2019-12-19)

- Rename the alSelectFont() function to select_font()
- Only export symbols which are part of the public API



libansilove 1.1.6 (2019-11-18)

- Use CMAKE_INSTALL_{LIB,INCLUDE}DIR instead of hardcoding directories
- Introduce a XBIN_PALETTE_LENGTH macro
- Use XBIN_HEADER_LENGTH and XBIN_PALETTE_LENGTH macros instead of magic
  numbers
- Add another format validation check (palette size) in the XBin loader



libansilove 1.1.5 (2019-10-14)

- Move background transparency operations in the output function
- Allow setting transparent background for retina images
- Add extern declaration for fonts data arrays
- Use type size_t for loop and structIndex variables



libansilove 1.1.4 (2019-09-13)

- Force xbin_fontsize to 16 when using default 80x25 font
- Return ANSILOVE_FORMAT_ERROR if xbin_fontsize > 32



libansilove 1.1.3 (2019-08-23)

- Omit implicit return in the example program
- Use a switch statement to set 24-bit background and foreground values
- Remove superfluous background color allocations in the Binary, PCBoard
  and XBin loaders
- Modify the PCBoard loader to use a cursor pointer to parse input
- Infer font height to 16 in the XBin loader, the default in absence of
  font data (Thanks Andrew Herbert)



libansilove 1.1.2 (2019-04-30)

- Use 'xbin_fontsize' for character height instead of an hardcoded value,
  fixes a rendering bug reported by Bart Dumon
- Rename the 'binary_palette' array to 'vga_palette'
- More format validation checks for the XBin loader



libansilove 1.1.1 (2019-02-11)

- Add install target for man page
- Use the correct idiom for realloc, to avoid leaking memory if allocation
  fails
- Fixed memory leak in the output() function, gdImageDestroy() must be
  called after gdImagePngPtr() (Thanks Andrew Michaelson)



libansilove 1.1.0 (2019-01-15)

- Only call gdFree() if the PNG buffer was allocated (Thanks Joris Vink)
- No need for buffer pointers to be const, they're passed to functions
  taking non consts (Thanks Joris Vink)
- Introduce a maplen variable to allow tracking mmap size, as we can't
  rely on the length variable because of SAUCE
- Unmap ctx->buffer on cleanup (Thanks Joris Vink)
- Check for the TUNDRA24 string in TND files header
- Split fonts data to have one include file per font
- Use macros instead of hardcoded values in the Tundra loader
- Use 'X' instead of integer value for the start of SGR sequences
- Always check that seqTok is not NULL before using it
- Move the include guards to the top of header files
- Add format validation checks for the XBin loader
- Increment ansi_buffer by more than one element at a time when using
  realloc
- Add initial man page, documenting the ansilove_ctx and ansilove_options
  structures



libansilove 1.0.0 (2018-11-16)

- Initial release
