Skip to content

Utilities for building retro projects relatively quickly

License

Notifications You must be signed in to change notification settings

indigoparadox/maug

Repository files navigation

maug

Augmented minimal standard library for C89 and legacy compilers.

The API is currently in flux and is not yet completely final!

Current maug-based projects may be found under The maug topic on GitHub!

Design Constraints

Maug has the following design goals and constraints:

  • Must work in C89 compilers. C99-like features like stdint or snprintf are available by internal implementation.
  • Memory allocation uses a flat model (calloc/free), with no handle management.
  • Standard library calls are allowed, so long as they are universally available even in very old C89 compilers.

Roadmap

  • Clearly enumerate which headers rely on which to create modular hierarchy.

  • Solidify API.

  • Setup Makefile to compile .solib/.dll/.ovl dynamic libs.

  • Square-tile-based isometric engine.

  • Reimplement retrotile with vectors for tiledefs.

  • Replace iffy semi-vectors in mhtml/mcss with vectors.

  • Replace obj vertice arrays with vectors in retroglu.

  • Implement lambdas in mlisp with separators for pruning sequentally added env args.

  • Implement resolution detection in Windows CE.

  • Implement timing/blit mode setting options on all platforms.

Modules

Makefiles

Inside of the make subdirectory are a number of Makefiles that can be included from a project's Makefile in order to more conveniently build assets.

retroflt

#include <retroflt.h>

RetroFlat is a rough, quick-and-dirty compatibility layer for making graphical programs that work on Win16 (32-bit via OpenWatcom's Win386), MS-DOS (32-bit via DOS/32a or DOS4GW via Allegro), and possibly other platforms in the future.

This documentation is also available at https://indigoparadox.github.io/maug/group__maug__retroflt.html.

mtypes

#include <mtypes.h>

Rough common approximation of types for interoperability between our projects.

Includes common types from stdint.h, guaranteed to be of the named size:

  • int8_t
  • uint8_t
  • int16_t
  • uint16_t
  • int32_t
  • uint32_t

When using this header, do not include stdint.h. This header will include it if the current platform supports it. Otherwise, it will improvise.

uprintf

#include <uprintf.h>

An augmented printf for tracing, debugging, and error reporting.

To use, include uprintf.h and call logging\_init() in program startup.

Be sure to call logging\_shutdown() on program cleanup.

Logging can then be performed by calling:

  • debug\_printf( lvl, format, ... ) - Prints debug message.
    • lvl - Immediacy level of debug message. See DEBUG_THRESHOLD below.
    • format - printf()-style format string.
    • ... - Variable arguments to format.
  • error\_printf( format, ... ) - Prints to stderr.
    • format - printf()-style format string.
    • ... - Variable arguments to format.

uprintf's behavior can be modified by defining the following before inclusion:

Define Description
platform_file Type to use instead of stdlib's FILE for log ptr.
platform_fopen Function to use instead of fopen() to create a log ptr.
platform_fclose Function to close log ptr.
platform_fflush Function to flush log ptr to buffer.
platform_fprintf Function to print to log ptr with a format string.
DEBUG_THRESHOLD debug_printf() w/ this or higher lvl will be displayed.
DEBUG_LOG If defined, debug will be output to LOG_FILE_NAME.
ANCIENT_C Use static functions where vararg macros unsupported.

Troubleshooting

size of segment x exceeds 64k by y bytes

RetroFlat can be quite bulky for 16-bit DOS. Please try adding RETROFLAT_DOS_MEM_LARGE=1 to your Makefile before Makefile.inc is included to enable a large code model.

Cache loading errors which retrogxc.h is never included

For 16-bit builds, GLOBAL\_DEFINES += -DRETROFLAT\_NO\_RETROGXC must be specified in the Makefile explicitly, or the cache will be enabled in the DOS stubs.

Releases

No releases published

Languages