These programming resources are intended for computers running RISC OS. The title and icon of each package are linked to the relevant Zip archive for download. On RISC OS computers Zip files may be opened using SparkPlug, SparkFS (commercial) or Infozip.
This C library is designed for use by programs that process 3D models in the simple object geometry format developed by Wavefront for their Advanced Visualizer software. It should have minimal dependencies on other libraries and must not include any platform-specific code.
Fixed a bug in the clipping algorithm: primitive_intersect must not ignore intersections between the given edge and a polygon which are coincident with the polygon's corners. Consequently vertex_array_edges_intersect now reports intersections at the start and end coordinates of both edges.
Moved overlapping-bounding-boxes checks from the clipping code to primitive_contains (which checks a stronger constraint) and primitive_clip.
Created internal variants of primitive_get_normal and primitive_get_bbox for use when the result doesn't need to be copied.
Simplified primitive_get_top_y to work around a bug in the Norcroft C compiler (which previously crashed when compiling this function).
Instead of all builds of the library depending on CBLib, now only the debug build has a dependency, and that is only on CBDebugLib.
This C library provides debugging facilities for RISC OS software development. It has a large number of external dependencies, including most of the libraries supplied with the Acorn C/C++ development suite.
Its most useful feature is the ability to usurp calls to Acorn's flex library functions and redirect them to Simon P. Bullen's fortified memory allocation shell. This allows debugging of out-of-bounds memory accesses and simulation of allocation failure.
Similarly, calls to many functions in the Toolbox and Wimp libraries can be intercepted in order to simulate them returning an error value. This allows stress-testing of application programs.
This is yet another C library for RISC OS. Actually, it is more like a personal collection of modules that happen to be common to many of my applications. It has a large number of external dependencies, including most of the libraries supplied with the Acorn C/C++ development suite.
I do not seriously expect many other programmers to use CBLibrary, but it has to be in the public domain in order that the programs that use it can meaningfully be released under the GNU General Public Licence.
Other useful functionality: a null event manager that can schedule functions to be called back at timed intervals, iterator objects for traversing a directory tree, and a list of user data with methods to enumerate unsaved data or find data by file name.
Deleted code that was only compiled when the OLD_SCL_STUBS macro had not been pre-defined. The associated 'stubsg_o' output directory has also been deleted. All build configurations are now expected to be compatible with RISCOS Ltd's generic C library stubs (which do not support C99).
Removed code and related tests for functionality that has been moved to new individual libraries: SF3KLib, StreamLib, GKeyLib, CBUtilLib, CBOSLib and CBDebugLib.
The "FOpPrivate.h" header file has been moved to an 'Internal' directory to discourage use by clients of the library.
Converted all remaining invocations of DEBUG to DEBUGF because it's easier to substitute a printf-like function when the developer doesn't want to depend on CBDebugLib.
Consolidated all of the #include commands for debugging facilities into one header file, "Internal/CBMisc.h". The dependency on CBDebugLib can be removed by not pre-defining a macro, USE_CBDEBUG.
This C library provides type-safe veneers to miscellaneous OS-specific functionality not provided by the Wimp and Toolbox libraries supplied with Acorn C/C++. It should have minimal dependencies on other libraries and must not include any code or interfaces that could usefully be used on other platforms.
This C library provides miscellaneous additional functionality not found in the standard C library such as linked lists, string buffers and case-insensitive string comparisons. It should have minimal dependencies on other libraries and must not include any platform-specific code.
A short introduction to using dynamic areas in BASIC programs, including two small example programs.
This is a sample application which attempts to demonstrate various aspects of using outline fonts in a WIMP application. It is assumed that the user is reasonably familiar with the basic principles of writing multi-tasking WIMP applications. Harriet has tried to hide away as much of the 'workings' as she can in the FONT_Lib library file.
This is a C library for compressing or decompressing data using the same algorithm used by old 4th Dimension and Fednet games such as 'Chocks Away', 'Stunt Racer 2000' and 'Star Fighter 3000'. It should have minimal dependencies on other libraries and must not include any platform-specific code.
It is used by many of my programs, including ChocToObj, SF3KtoObj and various Star Fighter 3000 editing utilities.
Some of the header files have been moved to an 'Internal' directory to discourage use by clients of the library. This includes the ring buffer interface. (It's hard to see how that could be useful for other purposes.)
It is difficult for games programmers to implement support for joysticks without access to actual hardware. This module has been written to help - specifically, to allow me to test the new joystick support in Star Fighter 3000.
The cost of an interface and a decent joystick to go with it is quite expensive. If, like me, you are too miserly to pay for the real thing, this module may provide the solution. It allows games to be tested against a 'virtual' (emulated) joystick, which is controlled using the numeric keypad. Not particularly useful for playing games, but for testing purposes certainly far better than nothing.
Various emulation modes are supported, including "switched" (emulates an Atari-type joystick), "analogue" (emulates a PC-type joystick) and "damped" (uses a gradual decay function to make keyboard control of an analogue stick easier).
In BBC BASIC, it is impossible to use text strings of greater than 255 characters in length. This can be frustrating if you want to allow for long file paths in your program, or you need to manipulate some data that originated in a less restricted environment.
My LongStr library is quite slow and was hastily written, but it does a fair job of bypassing this limit. Virtually all BASIC's string handling keywords (with the exception of INSTR) are replicated by equivalent library functions.
The library functions are described in some detail in the accompanying documentation, which also contains guidelines and advice for use. There is also an example program.
Prefixed all the global variables with 'ls_', to increase their uniqueness and make it easier to avoid name clashes.
Provided a 'special' file for use with StrongBS, in order to make it easier for closed-source software to comply with the terms of the L.G.P.L.
This C library provides functions to convert between RISC OS sprites and Star Fighter 3000 bitmap formats, as well as definitions relating to the game's file formats.
It depends on CBOSLib (by the same author) but only for definitions relating to a sprite area. Whether that dependency is necessary or desirable is debatable but all software that uses the functionality of SF3KLib currently depends on CBOSLib anyway. Sprite files are unlikely to be used on other platforms.
Removed reliance on snprintf (which is not in older versions of the shared C library) by generating the decimal part of sprite names separately.
The SlidingHeap module creates and manages a sliding heap of blocks of memory claimed from a program's Wimpslot as necessary, thus avoiding the fragmentation caused by repeatedly claiming and releasing memory from the RMA. The order of blocks in the heap may change and their location will vary as other blocks grow and shrink. It is rather like Acorn C's 'flex' library, but is suitable for use from BASIC/ARM code programs.
This new release of SlidingHeap has been reconstructed from a disassembly, in the absence of the original source code. Apart from being 32-bit compatible (for use on RISC OS 5) other improvements include a new SWI to increase the maximum number of blocks.
The module is distributed under the GNU Public Licence with full source code, demonstration programs and extensive documentation in both text and StrongHelp format.
SlidingHeap_ExtendBlock now rounds requested block sizes up to the nearest word, just as SlidingHeap_NewBlock always has.... Optimised this to use single BIC in place of AND NOT construction.
Removed a large chunk of dead code from SlidingHeap_ScrapBlock (as far as I know, never called during entire history of module) dealing with the possibility of non-word-aligned blocks.
The purpose of this C library is to provide a uniform interface to read from input streams of different types. Two implementations are provided: one for compressed and one for uncompressed source data. The interface is similar to that provided by the standard C library in order to ease porting of existing code. In future this library may be extended to handle output streams too.
Support for reading data compressed using the same algorithm used by old 4th Dimension and Fednet games such as 'Chocks Away', 'Stunt Racer 2000' and Star Fighter 3000 relies on another C library, GKeyLib, by the same author.