Acorn Filter Manager v0.18:
|
Distribution: | General Release |
Title: | Acorn Filter Manager v0.18: Functional Specification |
Drawing Number: | 1215,102/FS |
Issue: | 1 |
Author(s): | Ben Avison |
Andrew Hodgkinson | |
Date: | 08/04/98 |
Change Number: | N/A |
Last Issue: | N/A |
1215,102/FS | (General release) | |
1 | 08/04/98 | HTML version built from 1309,218/FS for publishing on the Web as a companion document to the Nested Window Manager function specification. |
This document covers the differences between the RISC OS 3.60 to 3.71 Filter Manager (version 0.11) and the newest release version to date (version 0.18). The changes are required to support the old Window Manager "get rectangle" and "rectangle copy" filters (previously unsupported by the Filter Manager), and the new Window Manager "post-rectangle" and "post-icon" filters. There are also some minor bug fixes.
The reader should have an understanding of the use of the conventional Filter Manager and the Wimp window redraw procedure, and also have read the Wimp_RegisterFilter section of the PRMs and the Nested Window Manager Functional Specification.
*Filters Filters called on entry to Wimp_Poll: Filter Task Clip All tasks tbox_pre ResTest tbox_pre ToolboxProgram Filters called on exit from Wimp_Poll: Filter Task Mask Clip ARMovie Playing... FFFFFFFB tbox_post ResTest 00000000 tbox_post ToolboxProgram 00000000 Filters called on entry to Wimp_GetRectangle: Filter Task Clip All tasks Filters called on exit from Wimp_GetRectangle: Filter Task Filters called after plotting icons in Wimp_GetRectangle: Filter Task Filters called on entry to Wimp_BlockCopy: Filter Clip
Any task or filter names that are control-character-terminated (rather than null-terminated) will now be printed correctly.
The command line interface will now attempt to look up its Messages file using the system variable FilterManager$Path in preference to using 'Resources:$.Resources.FilterMgr.Messages'.
Service_FilterManagerInstalled (&87) |
An undocumented feature of the FilterManager present in RISC OS 3.1 upwards was that R0 held the version number of the Filter Manager module multiplied by 100.
This behaviour can now be relied upon.
Filter_RegisterPreFilter (&42640) |
This SWI is not re-entrant.
If the internal call to Wimp_RegisterFilter during this SWI returned an error for any reason, previous versions of the FilterManager would corrupt R0. This is fixed.
Filter_RegisterPostFilter (&42641) |
This SWI is not re-entrant.
If the internal call to Wimp_RegisterFilter during this SWI returned an error for any reason, previous versions of the FilterManager would corrupt R0. This is fixed.
As of WindowManager 3.96, post-filters are also called (with a null event) when Wimp_StartTask returns control back to the parent task; this allows filters to keep track of which is the current task. Any attempt to claim the event in this case is safely ignored. However, be warned that in older Wimps, such a filter call was generated on return to the parent task if and only if the task did not call Wimp_Poll. Claiming the event is not safe in these circumstances.
Filter_DeRegisterPreFilter (&42642) |
This SWI is not re-entrant.
Filter_DeRegisterPostFilter (&42643) |
This SWI is not re-entrant.
Filter_RegisterRectFilter (&42644) |
Add a Get Rectangle filter to the list of Get Rectangle filters |
The old Filter Manager makes assumptions about the internal workings of the Wimp (and in particular the state of the stack) in order to obtain the window handle for Get Rectangle filter calls, because the Wimp does not provide the information itself. Both the Wimp and the Filter Manager will now pass the window definition pointers (i.e. the window handle minus one) directly, like all the other rectangle filters do.
As of WindowManager 3.86, this filter is no longer called during caret updates (the Post-Rectangle and Post-Icon filters never have been).
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
R3 = task handle to which to apply filter (or 0 for all tasks) |
The entry and exit conditions of the filter routine are:
R0 | window handle |
R2 | task handle |
R6-R9 | rectangle about to be redrawn (min x, min y, max x, max y; screen coordinates) |
R12 | value of R2 on entry to Filter_RegisterRectFilter |
The routine should exit using the instruction:
MOVS PC,R14
Filter_DeRegisterRectFilter (&42645) |
Remove a Get Rectangle filter from the list of Get Rectangle filters |
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
R3 = task handle to which to apply filter (or 0 for all tasks) |
Filter_RegisterCopyFilter (&42646) |
Add a Rectangle Copy filter to the list of Rectangle Copy filters |
For the window handle passed to the registered routine to be valid requires a nested Wimp of version 3.90 or later. If a version 3.90 or later Wimp is ever present without nested window support, the window handle passed to the filter routine will be invalid.
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
The entry and exit conditions of the filter routine are:
R0 | window handle |
R2-R5 | destination rectangle (min x, min y, max x, max y; screen coordinates) |
R6-R9 | source rectangle (min x, min y, max x, max y; screen coordinates) |
R12 | value of R2 on entry to Filter_RegisterCopyFilter |
The routine should exit using the instruction:
MOVS PC,R14
Filter_DeRegisterCopyFilter (&42647) |
Remove a Rectangle Copy filter from the list of Rectangle Copy filters |
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
Filter_RegisterPostRectFilter (&42648) |
Add a Post-Rectangle filter to the list of Post-Rectangle filters |
This filter type requires WindowManager 3.86 or later for full support, but will work acceptably on versions 3.16 through 3.85 (even though those Wimps did not officially support post-rectangle filters) with minor inconsistencies - e.g. the colours will be be set differently.
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
R3 = task handle to which to apply filter (or 0 for all tasks) |
The entry and exit conditions of the filter routine are:
R0 | window handle |
R2 | task handle |
R6-R9 | rectangle being redrawn (min x, min y, max x, max y; screen coordinates) |
R12 | value of R2 on entry to Filter_RegisterPostRectFilter |
The routine should exit using the instruction:
MOVS PC,R14
Filter_DeRegisterPostRectFilter (&42649) |
Remove a Post-Rectangle filter from the list of Post-Rectangle filters |
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
R3 = task handle to which to apply filter (or 0 for all tasks) |
Filter_RegisterPostIconFilter (&4264a) |
Add a Post-Icon filter to the list of Post-Icon filters |
This filter type requires WindowManager 3.86 or later in order to function.
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
R3 = task handle to which to apply filter (or 0 for all tasks) |
The entry and exit conditions of the filter routine are:
R0 | window handle |
R2 | task handle |
R6-R9 | rectangle being redrawn (min x, min y, max x, max y; screen coordinates) |
R12 | value of R2 on entry to Filter_RegisterPostIconFilter |
The routine should exit using the instruction:
MOVS PC,R14
Filter_DeRegisterPostIconFilter (&4264b) |
Remove a Post-Icon filter from the list of Post-Icon filters |
Note that FilterManager 0.17 does not correctly deregister Post-Icon filters due to corruption of the task handle. This bug is fixed in FilterManager 0.18.
R0 = pointer to filter name (control terminated) |
R1 = pointer to filter routine |
R2 = value to be passed in R12 when filter is called |
R3 = task handle to which to apply filter (or 0 for all tasks) |
Last updated 12 November 1998
© Acorn Computers Limited, 1997 |