This page describes some of the programs I have written for the RiscOS operating system. I've had RiscOS machines since 1988, but I've only recently started to learn Desktop programming - I knew I'd get around to it eventually! Most of these programs are small test programs that I used to better understand the API and how the RiscOS WIMP operates.
Software index:
- Snail - Desktop Silly, 2^5th Anniversary Edition
- Tabby - A Tabbed Container App
- Recieving Throwback Messages via the DDEUtils Module
- Efficient Window Redraw Demo
- Investigating GCOL and ColourTrans
- Moderately Minimal User Message Passing Example
- Collaborative WIMP Task Example
!snail - Desktop Silly (2^5th Anniversary Edition)
!snail is a desktop silly originally written for the Acorn Archimedes by my friend Steve Gilbert in 1990. I found the source code while I was restoring my RiscPC, which I have updated a bit for more modern versions of RiscOS, so this is the 2^5th Anniversary Edition. It was also a fun way of learning about sprite handling in Risc OS. For the new version, the code was updated to run acceptably in screen modes other than mode 15, to allow mode changes while running, multiple snails and better integration with the WIMP (so that it doesn't interfere with other windows).
Links and downloads:
- Tarfile containing the !snail applcation (snail_v2.1.0.tar)
- Github repository github.com/usr-bin-gcc/snail
!tabby - A Tabbed Container App
!tabby is a tabbed container app that allows you to manage a number of windows under a single tab bar. It was designed to alleviate my major annoyance when programming on RiscOS, which is having the desktop cluttered by lots and lots of !SrcEdit windows. To use it, load !tabby onto the tab bar, each time you click on the icon, a new tab bar will appear. To load a window onto the tab bar, click the green LED icon, the LED will turn redm indicating that it is waiting for a window to capture. Drag the window over the tab bar, when !tabby has identified the window, the LED will turn yellow, indicating that it is about to capture the window and give you time to stop dragging. One second later, the window will be captured and the LED will trun back to green again. The rest of the operation should be fairly intuitive. It still has some rough edges and some additional functionality I'd like to implement, such as being able to re-order the tabs, but hopefully it is at the stage where it may be vaguely useful.
Links and downloads:
- Tarfile containing the !tabby applcation (tabby_v1.1.1.tar)
- Github repository github.com/usr-bin-gcc/Tabby
Recieving Throwback Messages via the DDEUtils Module
!throwback is a test application that I wrote to try to understand how error messages from a compiler (or some other programming tool) can be picked up by the source code editor or IDE. It makes debugging much easier if you can click on the error message and the cursor will jump to the correct [sic] line. Before you run the program, make sure no other program (e.g. !srcedit) has already regsitered with the DDEUtils module. If you then compile a program, any error messages should appear in the text panel. The ``clear'' button can be used to clear the text panel at the start of each compilation session, for clarity. Any suggestions for improvements are most welcome.
Links and downloads:
- Tarfile containing the !throwback applcation (throwback.tar)
- Github repository github.com/usr-bin-gcc/throwback
Efficient Window Redraw Visualisation
I wrote !circles in order to be able to visualise the areas of a window that must be redrawn after it has been opened, occluded or revealed. This gave me a better idea of what needs to be done to redraw windows efficeintly. The monitor window shows the most recent redraw rectange for the main window, showing the whole of the work area. The main window contains a set of circles, and the program only redraws the circles that intersect with the redraw rectangle (the ones shown in red in the monitor window are the ones that don't need to be redrawn).
Links and downloads:
- Tarfile containing the !circles applcation (circles.tar)
- Github repository github.com/usr-bin-gcc/circles
Investigating GCOL and ColourTrans
!setGCOL is an application written to help me understand GCOLs and the
operation of the colourtrans module. I have to say I found the documentation
on these a bit opaque, but I suspect that is partly because of the long history
if RiscOS graohics hardware making it all rather a long story. Basically the
application allows you to experiment with the arguments to
colourtran_setgcol
and see the GCOL value that is returned in
different screen modes. It also shows an animation for no real purpose (it is
a bit flickery on a RiscPC, but fine on an emulator running on a modern laptop
- I'll see what I can do to improve that when I have time). Any suggestions
for improvements are most welcome.
Links and downloads:
- Tarfile containing the !SetGCOL applcation (setgcol.tar)
- Github repository github.com/usr-bin-gcc/SetGCOL
Moderately Minimal User Messaging Passing Example
This project consists of two applications (which are essentially the same program), !tweedledum and !tweedledee, that comminicate with eachother using wimp user-messages. Essentially you can type messages into one program and they will appear in the text pane of the other program. I wrote these to find out how message passing worked, so I would have a minimal demo to go back to when (rather than "if") I forget.
Links and downloads:
- Tarfile containing the !tweedledum and !tweedledee applcations (messaging.tar)
- Github repository github.com/usr-bin-gcc/messaging
Collaborative WIMP Task Example
This project contains two applications, !animation and !paneful. The !animation task implements a pane for the window provided by !paneful, containing an animation of baloons bouncing around. The animation can be paused and restarded using a button on the window. Obviously the pane needs to move whenever the parent window moves, but also if the pane is resized, using the adjust size icon, the parent window needs to be re-ized as well. This provides a cheap-and-cheerful alternative to full Object Linking and Embedding (OLE), that would be way more complex than required for the program I am writing. It still has some rough edges (e.g. maximise button), but I need to get on with writing a program that is actually useful at some point!
Links and downloads:
- Tarfile containing the !animation and !paneful applcations (paneful.tar)
- Github repository github.com/usr-bin-gcc/paneful
Back to the top
Research Team: Gavin Cawley, Nicola Talbot.