Home » Archimedes archive » Acorn User » AU 1998-13 (Christmas).adf » Regulars » StarInfo/Kennedy/ReadMe

StarInfo/Kennedy/ReadMe

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1998-13 (Christmas).adf » Regulars
Filename: StarInfo/Kennedy/ReadMe
Read OK:
File size: 1003 bytes
Load address: 0000
Exec address: 0000
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
File        : ReadMe
Date        : 07-Jun-97
Author      : � A.Thoukydides, 1997
Description : Information about Crazy Pointer.


INTRODUCTION

This program is inspired by MouseP written by Andrew Bolt and published in
the June 1997 *Info section of Acorn User; it consists of a relocatable
module that gives the hardware pointer a similar appearance to Andrew's
pointer.


LOADING THE MODULE

To try the new look pointer simply double-click on the module in a filer
window. The pointer should now turn to face the direction it is being moved
in, and wobble for a while when the pointer stops moving. The caret pointer
that is used when moving over some writable icons, and the popup menu
pointer, have also been modified in a similar manner.

The new pointer may be installed more permanently by copying the module into
either the !Boot.Choices.Boot.PreDesk or !Boot.Choices.Boot.Tasks
directories. The module will then be loaded automatically every time that the
computer is switched on or reset.


CONFIGURATION

A single *command is provided to configure the pointer wobble:

    *CrazyPointerWobble [-nowobble] [[-friction] <value>]
                        [[-spring] <value>] [[-force] <value>]

The possible arguments are:

    -nowobble           Disable the pointer wobble. This results in a pointer
                        that just rotates to follow movements.
    
    -friction <value>   The amount of friction. Increasing this value stops
                        any wobble quicker.
    
    -spring <value>     The strength of the spring restorative force.
                        Increasing this value makes the pointer wobble faster.
    
    -force <value>      The scaling between mouse movements and the effect on
                        the wobble. Increasing this value makes the wobble
                        more sensitive to slow motions of the mouse.

The three numeric values are specified on a logarithmic scale in the range
0 to 10, with a value of 5 being the default.


TECHNICAL DETAILS

The pointer shape is updated on every vertical sync event. This provides a
smooth animation (a different image for every frame refresh), that even works
outside the desktop and while applications are not multitasking. The
alternative of using a WIMP task that updates the pointer on null events was
considered, but not used because it would result in jerky movements and slow
the desktop down more.

The disadvantage to updating the pointer from an interrupt routine is that
the SWIs that can be used are limited; for example it isn't possible to 
redirect output to a sprite and use VDU operations to draw the pointer shape.
To overcome these problems a set of primitive graphics operations have been
implemented, including a subroutine that can plot a general polygon in
any colour (including dithered patterns) from a list of coordinates. The
complete pointer is plotted using just two operations - the first fills the
central dark blue area, and the second draws the cyan border using the same
list of coordinates.

The desktop uses several different pointers in addition to the standard
shape, such as the double-click pointer, a caret for writable icons, and a
menu for pop-up menu buttons. The pointer shape can be redefined using two
SWIs: OS_SpriteOp 36 sets the pointer shape from a sprite, and OS_Word 21,0
sets the shape from a raw bit pattern. Both of these SWIs are intercepted by
module, performed by claiming SpriteV and WordV. When OS_SpriteOp 36 is
called, the sprite name is checked against a list of known pointer names; a
match results in the standard pointer being replaced.

The final problem with implementing the wobbly pointer in assembler is the
lack of floating point support. To overcome this problem, all sections of the
code that require real numbers have been written using fixed point values,
with each 32 bit value split into half with 16 bits of integer and 16 bits of
fraction. However, high accuracy is not required for this application, so
some of the calculations have been implemented for speed and simplicitly
rather than for precision.
00000000  46 69 6c 65 20 20 20 20  20 20 20 20 3a 20 52 65  |File        : Re|
00000010  61 64 4d 65 0a 44 61 74  65 20 20 20 20 20 20 20  |adMe.Date       |
00000020  20 3a 20 30 37 2d 4a 75  6e 2d 39 37 0a 41 75 74  | : 07-Jun-97.Aut|
00000030  68 6f 72 20 20 20 20 20  20 3a 20 a9 20 41 2e 54  |hor      : . A.T|
00000040  68 6f 75 6b 79 64 69 64  65 73 2c 20 31 39 39 37  |houkydides, 1997|
00000050  0a 44 65 73 63 72 69 70  74 69 6f 6e 20 3a 20 49  |.Description : I|
00000060  6e 66 6f 72 6d 61 74 69  6f 6e 20 61 62 6f 75 74  |nformation about|
00000070  20 43 72 61 7a 79 20 50  6f 69 6e 74 65 72 2e 0a  | Crazy Pointer..|
00000080  0a 0a 49 4e 54 52 4f 44  55 43 54 49 4f 4e 0a 0a  |..INTRODUCTION..|
00000090  54 68 69 73 20 70 72 6f  67 72 61 6d 20 69 73 20  |This program is |
000000a0  69 6e 73 70 69 72 65 64  20 62 79 20 4d 6f 75 73  |inspired by Mous|
000000b0  65 50 20 77 72 69 74 74  65 6e 20 62 79 20 41 6e  |eP written by An|
000000c0  64 72 65 77 20 42 6f 6c  74 20 61 6e 64 20 70 75  |drew Bolt and pu|
000000d0  62 6c 69 73 68 65 64 20  69 6e 0a 74 68 65 20 4a  |blished in.the J|
000000e0  75 6e 65 20 31 39 39 37  20 2a 49 6e 66 6f 20 73  |une 1997 *Info s|
000000f0  65 63 74 69 6f 6e 20 6f  66 20 41 63 6f 72 6e 20  |ection of Acorn |
00000100  55 73 65 72 3b 20 69 74  20 63 6f 6e 73 69 73 74  |User; it consist|
00000110  73 20 6f 66 20 61 20 72  65 6c 6f 63 61 74 61 62  |s of a relocatab|
00000120  6c 65 0a 6d 6f 64 75 6c  65 20 74 68 61 74 20 67  |le.module that g|
00000130  69 76 65 73 20 74 68 65  20 68 61 72 64 77 61 72  |ives the hardwar|
00000140  65 20 70 6f 69 6e 74 65  72 20 61 20 73 69 6d 69  |e pointer a simi|
00000150  6c 61 72 20 61 70 70 65  61 72 61 6e 63 65 20 74  |lar appearance t|
00000160  6f 20 41 6e 64 72 65 77  27 73 0a 70 6f 69 6e 74  |o Andrew's.point|
00000170  65 72 2e 0a 0a 0a 4c 4f  41 44 49 4e 47 20 54 48  |er....LOADING TH|
00000180  45 20 4d 4f 44 55 4c 45  0a 0a 54 6f 20 74 72 79  |E MODULE..To try|
00000190  20 74 68 65 20 6e 65 77  20 6c 6f 6f 6b 20 70 6f  | the new look po|
000001a0  69 6e 74 65 72 20 73 69  6d 70 6c 79 20 64 6f 75  |inter simply dou|
000001b0  62 6c 65 2d 63 6c 69 63  6b 20 6f 6e 20 74 68 65  |ble-click on the|
000001c0  20 6d 6f 64 75 6c 65 20  69 6e 20 61 20 66 69 6c  | module in a fil|
000001d0  65 72 0a 77 69 6e 64 6f  77 2e 20 54 68 65 20 70  |er.window. The p|
000001e0  6f 69 6e 74 65 72 20 73  68 6f 75 6c 64 20 6e 6f  |ointer should no|
000001f0  77 20 74 75 72 6e 20 74  6f 20 66 61 63 65 20 74  |w turn to face t|
00000200  68 65 20 64 69 72 65 63  74 69 6f 6e 20 69 74 20  |he direction it |
00000210  69 73 20 62 65 69 6e 67  20 6d 6f 76 65 64 0a 69  |is being moved.i|
00000220  6e 2c 20 61 6e 64 20 77  6f 62 62 6c 65 20 66 6f  |n, and wobble fo|
00000230  72 20 61 20 77 68 69 6c  65 20 77 68 65 6e 20 74  |r a while when t|
00000240  68 65 20 70 6f 69 6e 74  65 72 20 73 74 6f 70 73  |he pointer stops|
00000250  20 6d 6f 76 69 6e 67 2e  20 54 68 65 20 63 61 72  | moving. The car|
00000260  65 74 20 70 6f 69 6e 74  65 72 0a 74 68 61 74 20  |et pointer.that |
00000270  69 73 20 75 73 65 64 20  77 68 65 6e 20 6d 6f 76  |is used when mov|
00000280  69 6e 67 20 6f 76 65 72  20 73 6f 6d 65 20 77 72  |ing over some wr|
00000290  69 74 61 62 6c 65 20 69  63 6f 6e 73 2c 20 61 6e  |itable icons, an|
000002a0  64 20 74 68 65 20 70 6f  70 75 70 20 6d 65 6e 75  |d the popup menu|
000002b0  0a 70 6f 69 6e 74 65 72  2c 20 68 61 76 65 20 61  |.pointer, have a|
000002c0  6c 73 6f 20 62 65 65 6e  20 6d 6f 64 69 66 69 65  |lso been modifie|
000002d0  64 20 69 6e 20 61 20 73  69 6d 69 6c 61 72 20 6d  |d in a similar m|
000002e0  61 6e 6e 65 72 2e 0a 0a  54 68 65 20 6e 65 77 20  |anner...The new |
000002f0  70 6f 69 6e 74 65 72 20  6d 61 79 20 62 65 20 69  |pointer may be i|
00000300  6e 73 74 61 6c 6c 65 64  20 6d 6f 72 65 20 70 65  |nstalled more pe|
00000310  72 6d 61 6e 65 6e 74 6c  79 20 62 79 20 63 6f 70  |rmanently by cop|
00000320  79 69 6e 67 20 74 68 65  20 6d 6f 64 75 6c 65 20  |ying the module |
00000330  69 6e 74 6f 0a 65 69 74  68 65 72 20 74 68 65 20  |into.either the |
00000340  21 42 6f 6f 74 2e 43 68  6f 69 63 65 73 2e 42 6f  |!Boot.Choices.Bo|
00000350  6f 74 2e 50 72 65 44 65  73 6b 20 6f 72 20 21 42  |ot.PreDesk or !B|
00000360  6f 6f 74 2e 43 68 6f 69  63 65 73 2e 42 6f 6f 74  |oot.Choices.Boot|
00000370  2e 54 61 73 6b 73 0a 64  69 72 65 63 74 6f 72 69  |.Tasks.directori|
00000380  65 73 2e 20 54 68 65 20  6d 6f 64 75 6c 65 20 77  |es. The module w|
00000390  69 6c 6c 20 74 68 65 6e  20 62 65 20 6c 6f 61 64  |ill then be load|
000003a0  65 64 20 61 75 74 6f 6d  61 74 69 63 61 6c 6c 79  |ed automatically|
000003b0  20 65 76 65 72 79 20 74  69 6d 65 20 74 68 61 74  | every time that|
000003c0  20 74 68 65 0a 63 6f 6d  70 75 74 65 72 20 69 73  | the.computer is|
000003d0  20 73 77 69 74 63 68 65  64 20 6f 6e 20 6f 72 20  | switched on or |
000003e0  72 65 73 65 74 2e 0a 0a  0a 43 4f 4e 46 49 47 55  |reset....CONFIGU|
000003f0  52 41 54 49 4f 4e 0a 0a  41 20 73 69 6e 67 6c 65  |RATION..A single|
00000400  20 2a 63 6f 6d 6d 61 6e  64 20 69 73 20 70 72 6f  | *command is pro|
00000410  76 69 64 65 64 20 74 6f  20 63 6f 6e 66 69 67 75  |vided to configu|
00000420  72 65 20 74 68 65 20 70  6f 69 6e 74 65 72 20 77  |re the pointer w|
00000430  6f 62 62 6c 65 3a 0a 0a  20 20 20 20 2a 43 72 61  |obble:..    *Cra|
00000440  7a 79 50 6f 69 6e 74 65  72 57 6f 62 62 6c 65 20  |zyPointerWobble |
00000450  5b 2d 6e 6f 77 6f 62 62  6c 65 5d 20 5b 5b 2d 66  |[-nowobble] [[-f|
00000460  72 69 63 74 69 6f 6e 5d  20 3c 76 61 6c 75 65 3e  |riction] <value>|
00000470  5d 0a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |].              |
00000480  20 20 20 20 20 20 20 20  20 20 5b 5b 2d 73 70 72  |          [[-spr|
00000490  69 6e 67 5d 20 3c 76 61  6c 75 65 3e 5d 20 5b 5b  |ing] <value>] [[|
000004a0  2d 66 6f 72 63 65 5d 20  3c 76 61 6c 75 65 3e 5d  |-force] <value>]|
000004b0  0a 0a 54 68 65 20 70 6f  73 73 69 62 6c 65 20 61  |..The possible a|
000004c0  72 67 75 6d 65 6e 74 73  20 61 72 65 3a 0a 0a 20  |rguments are:.. |
000004d0  20 20 20 2d 6e 6f 77 6f  62 62 6c 65 20 20 20 20  |   -nowobble    |
000004e0  20 20 20 20 20 20 20 44  69 73 61 62 6c 65 20 74  |       Disable t|
000004f0  68 65 20 70 6f 69 6e 74  65 72 20 77 6f 62 62 6c  |he pointer wobbl|
00000500  65 2e 20 54 68 69 73 20  72 65 73 75 6c 74 73 20  |e. This results |
00000510  69 6e 20 61 20 70 6f 69  6e 74 65 72 0a 20 20 20  |in a pointer.   |
00000520  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000530  20 20 20 20 20 74 68 61  74 20 6a 75 73 74 20 72  |     that just r|
00000540  6f 74 61 74 65 73 20 74  6f 20 66 6f 6c 6c 6f 77  |otates to follow|
00000550  20 6d 6f 76 65 6d 65 6e  74 73 2e 0a 20 20 20 20  | movements..    |
00000560  0a 20 20 20 20 2d 66 72  69 63 74 69 6f 6e 20 3c  |.    -friction <|
00000570  76 61 6c 75 65 3e 20 20  20 54 68 65 20 61 6d 6f  |value>   The amo|
00000580  75 6e 74 20 6f 66 20 66  72 69 63 74 69 6f 6e 2e  |unt of friction.|
00000590  20 49 6e 63 72 65 61 73  69 6e 67 20 74 68 69 73  | Increasing this|
000005a0  20 76 61 6c 75 65 20 73  74 6f 70 73 0a 20 20 20  | value stops.   |
000005b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000005c0  20 20 20 20 20 61 6e 79  20 77 6f 62 62 6c 65 20  |     any wobble |
000005d0  71 75 69 63 6b 65 72 2e  0a 20 20 20 20 0a 20 20  |quicker..    .  |
000005e0  20 20 2d 73 70 72 69 6e  67 20 3c 76 61 6c 75 65  |  -spring <value|
000005f0  3e 20 20 20 20 20 54 68  65 20 73 74 72 65 6e 67  |>     The streng|
00000600  74 68 20 6f 66 20 74 68  65 20 73 70 72 69 6e 67  |th of the spring|
00000610  20 72 65 73 74 6f 72 61  74 69 76 65 20 66 6f 72  | restorative for|
00000620  63 65 2e 0a 20 20 20 20  20 20 20 20 20 20 20 20  |ce..            |
00000630  20 20 20 20 20 20 20 20  20 20 20 20 49 6e 63 72  |            Incr|
00000640  65 61 73 69 6e 67 20 74  68 69 73 20 76 61 6c 75  |easing this valu|
00000650  65 20 6d 61 6b 65 73 20  74 68 65 20 70 6f 69 6e  |e makes the poin|
00000660  74 65 72 20 77 6f 62 62  6c 65 20 66 61 73 74 65  |ter wobble faste|
00000670  72 2e 0a 20 20 20 20 0a  20 20 20 20 2d 66 6f 72  |r..    .    -for|
00000680  63 65 20 3c 76 61 6c 75  65 3e 20 20 20 20 20 20  |ce <value>      |
00000690  54 68 65 20 73 63 61 6c  69 6e 67 20 62 65 74 77  |The scaling betw|
000006a0  65 65 6e 20 6d 6f 75 73  65 20 6d 6f 76 65 6d 65  |een mouse moveme|
000006b0  6e 74 73 20 61 6e 64 20  74 68 65 20 65 66 66 65  |nts and the effe|
000006c0  63 74 20 6f 6e 0a 20 20  20 20 20 20 20 20 20 20  |ct on.          |
000006d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 74 68  |              th|
000006e0  65 20 77 6f 62 62 6c 65  2e 20 49 6e 63 72 65 61  |e wobble. Increa|
000006f0  73 69 6e 67 20 74 68 69  73 20 76 61 6c 75 65 20  |sing this value |
00000700  6d 61 6b 65 73 20 74 68  65 20 77 6f 62 62 6c 65  |makes the wobble|
00000710  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000720  20 20 20 20 20 20 20 20  20 6d 6f 72 65 20 73 65  |         more se|
00000730  6e 73 69 74 69 76 65 20  74 6f 20 73 6c 6f 77 20  |nsitive to slow |
00000740  6d 6f 74 69 6f 6e 73 20  6f 66 20 74 68 65 20 6d  |motions of the m|
00000750  6f 75 73 65 2e 0a 0a 54  68 65 20 74 68 72 65 65  |ouse...The three|
00000760  20 6e 75 6d 65 72 69 63  20 76 61 6c 75 65 73 20  | numeric values |
00000770  61 72 65 20 73 70 65 63  69 66 69 65 64 20 6f 6e  |are specified on|
00000780  20 61 20 6c 6f 67 61 72  69 74 68 6d 69 63 20 73  | a logarithmic s|
00000790  63 61 6c 65 20 69 6e 20  74 68 65 20 72 61 6e 67  |cale in the rang|
000007a0  65 0a 30 20 74 6f 20 31  30 2c 20 77 69 74 68 20  |e.0 to 10, with |
000007b0  61 20 76 61 6c 75 65 20  6f 66 20 35 20 62 65 69  |a value of 5 bei|
000007c0  6e 67 20 74 68 65 20 64  65 66 61 75 6c 74 2e 0a  |ng the default..|
000007d0  0a 0a 54 45 43 48 4e 49  43 41 4c 20 44 45 54 41  |..TECHNICAL DETA|
000007e0  49 4c 53 0a 0a 54 68 65  20 70 6f 69 6e 74 65 72  |ILS..The pointer|
000007f0  20 73 68 61 70 65 20 69  73 20 75 70 64 61 74 65  | shape is update|
00000800  64 20 6f 6e 20 65 76 65  72 79 20 76 65 72 74 69  |d on every verti|
00000810  63 61 6c 20 73 79 6e 63  20 65 76 65 6e 74 2e 20  |cal sync event. |
00000820  54 68 69 73 20 70 72 6f  76 69 64 65 73 20 61 0a  |This provides a.|
00000830  73 6d 6f 6f 74 68 20 61  6e 69 6d 61 74 69 6f 6e  |smooth animation|
00000840  20 28 61 20 64 69 66 66  65 72 65 6e 74 20 69 6d  | (a different im|
00000850  61 67 65 20 66 6f 72 20  65 76 65 72 79 20 66 72  |age for every fr|
00000860  61 6d 65 20 72 65 66 72  65 73 68 29 2c 20 74 68  |ame refresh), th|
00000870  61 74 20 65 76 65 6e 20  77 6f 72 6b 73 0a 6f 75  |at even works.ou|
00000880  74 73 69 64 65 20 74 68  65 20 64 65 73 6b 74 6f  |tside the deskto|
00000890  70 20 61 6e 64 20 77 68  69 6c 65 20 61 70 70 6c  |p and while appl|
000008a0  69 63 61 74 69 6f 6e 73  20 61 72 65 20 6e 6f 74  |ications are not|
000008b0  20 6d 75 6c 74 69 74 61  73 6b 69 6e 67 2e 20 54  | multitasking. T|
000008c0  68 65 0a 61 6c 74 65 72  6e 61 74 69 76 65 20 6f  |he.alternative o|
000008d0  66 20 75 73 69 6e 67 20  61 20 57 49 4d 50 20 74  |f using a WIMP t|
000008e0  61 73 6b 20 74 68 61 74  20 75 70 64 61 74 65 73  |ask that updates|
000008f0  20 74 68 65 20 70 6f 69  6e 74 65 72 20 6f 6e 20  | the pointer on |
00000900  6e 75 6c 6c 20 65 76 65  6e 74 73 20 77 61 73 0a  |null events was.|
00000910  63 6f 6e 73 69 64 65 72  65 64 2c 20 62 75 74 20  |considered, but |
00000920  6e 6f 74 20 75 73 65 64  20 62 65 63 61 75 73 65  |not used because|
00000930  20 69 74 20 77 6f 75 6c  64 20 72 65 73 75 6c 74  | it would result|
00000940  20 69 6e 20 6a 65 72 6b  79 20 6d 6f 76 65 6d 65  | in jerky moveme|
00000950  6e 74 73 20 61 6e 64 20  73 6c 6f 77 0a 74 68 65  |nts and slow.the|
00000960  20 64 65 73 6b 74 6f 70  20 64 6f 77 6e 20 6d 6f  | desktop down mo|
00000970  72 65 2e 0a 0a 54 68 65  20 64 69 73 61 64 76 61  |re...The disadva|
00000980  6e 74 61 67 65 20 74 6f  20 75 70 64 61 74 69 6e  |ntage to updatin|
00000990  67 20 74 68 65 20 70 6f  69 6e 74 65 72 20 66 72  |g the pointer fr|
000009a0  6f 6d 20 61 6e 20 69 6e  74 65 72 72 75 70 74 20  |om an interrupt |
000009b0  72 6f 75 74 69 6e 65 20  69 73 20 74 68 61 74 0a  |routine is that.|
000009c0  74 68 65 20 53 57 49 73  20 74 68 61 74 20 63 61  |the SWIs that ca|
000009d0  6e 20 62 65 20 75 73 65  64 20 61 72 65 20 6c 69  |n be used are li|
000009e0  6d 69 74 65 64 3b 20 66  6f 72 20 65 78 61 6d 70  |mited; for examp|
000009f0  6c 65 20 69 74 20 69 73  6e 27 74 20 70 6f 73 73  |le it isn't poss|
00000a00  69 62 6c 65 20 74 6f 20  0a 72 65 64 69 72 65 63  |ible to .redirec|
00000a10  74 20 6f 75 74 70 75 74  20 74 6f 20 61 20 73 70  |t output to a sp|
00000a20  72 69 74 65 20 61 6e 64  20 75 73 65 20 56 44 55  |rite and use VDU|
00000a30  20 6f 70 65 72 61 74 69  6f 6e 73 20 74 6f 20 64  | operations to d|
00000a40  72 61 77 20 74 68 65 20  70 6f 69 6e 74 65 72 20  |raw the pointer |
00000a50  73 68 61 70 65 2e 0a 54  6f 20 6f 76 65 72 63 6f  |shape..To overco|
00000a60  6d 65 20 74 68 65 73 65  20 70 72 6f 62 6c 65 6d  |me these problem|
00000a70  73 20 61 20 73 65 74 20  6f 66 20 70 72 69 6d 69  |s a set of primi|
00000a80  74 69 76 65 20 67 72 61  70 68 69 63 73 20 6f 70  |tive graphics op|
00000a90  65 72 61 74 69 6f 6e 73  20 68 61 76 65 20 62 65  |erations have be|
00000aa0  65 6e 0a 69 6d 70 6c 65  6d 65 6e 74 65 64 2c 20  |en.implemented, |
00000ab0  69 6e 63 6c 75 64 69 6e  67 20 61 20 73 75 62 72  |including a subr|
00000ac0  6f 75 74 69 6e 65 20 74  68 61 74 20 63 61 6e 20  |outine that can |
00000ad0  70 6c 6f 74 20 61 20 67  65 6e 65 72 61 6c 20 70  |plot a general p|
00000ae0  6f 6c 79 67 6f 6e 20 69  6e 0a 61 6e 79 20 63 6f  |olygon in.any co|
00000af0  6c 6f 75 72 20 28 69 6e  63 6c 75 64 69 6e 67 20  |lour (including |
00000b00  64 69 74 68 65 72 65 64  20 70 61 74 74 65 72 6e  |dithered pattern|
00000b10  73 29 20 66 72 6f 6d 20  61 20 6c 69 73 74 20 6f  |s) from a list o|
00000b20  66 20 63 6f 6f 72 64 69  6e 61 74 65 73 2e 20 54  |f coordinates. T|
00000b30  68 65 0a 63 6f 6d 70 6c  65 74 65 20 70 6f 69 6e  |he.complete poin|
00000b40  74 65 72 20 69 73 20 70  6c 6f 74 74 65 64 20 75  |ter is plotted u|
00000b50  73 69 6e 67 20 6a 75 73  74 20 74 77 6f 20 6f 70  |sing just two op|
00000b60  65 72 61 74 69 6f 6e 73  20 2d 20 74 68 65 20 66  |erations - the f|
00000b70  69 72 73 74 20 66 69 6c  6c 73 20 74 68 65 0a 63  |irst fills the.c|
00000b80  65 6e 74 72 61 6c 20 64  61 72 6b 20 62 6c 75 65  |entral dark blue|
00000b90  20 61 72 65 61 2c 20 61  6e 64 20 74 68 65 20 73  | area, and the s|
00000ba0  65 63 6f 6e 64 20 64 72  61 77 73 20 74 68 65 20  |econd draws the |
00000bb0  63 79 61 6e 20 62 6f 72  64 65 72 20 75 73 69 6e  |cyan border usin|
00000bc0  67 20 74 68 65 20 73 61  6d 65 0a 6c 69 73 74 20  |g the same.list |
00000bd0  6f 66 20 63 6f 6f 72 64  69 6e 61 74 65 73 2e 0a  |of coordinates..|
00000be0  0a 54 68 65 20 64 65 73  6b 74 6f 70 20 75 73 65  |.The desktop use|
00000bf0  73 20 73 65 76 65 72 61  6c 20 64 69 66 66 65 72  |s several differ|
00000c00  65 6e 74 20 70 6f 69 6e  74 65 72 73 20 69 6e 20  |ent pointers in |
00000c10  61 64 64 69 74 69 6f 6e  20 74 6f 20 74 68 65 20  |addition to the |
00000c20  73 74 61 6e 64 61 72 64  0a 73 68 61 70 65 2c 20  |standard.shape, |
00000c30  73 75 63 68 20 61 73 20  74 68 65 20 64 6f 75 62  |such as the doub|
00000c40  6c 65 2d 63 6c 69 63 6b  20 70 6f 69 6e 74 65 72  |le-click pointer|
00000c50  2c 20 61 20 63 61 72 65  74 20 66 6f 72 20 77 72  |, a caret for wr|
00000c60  69 74 61 62 6c 65 20 69  63 6f 6e 73 2c 20 61 6e  |itable icons, an|
00000c70  64 20 61 0a 6d 65 6e 75  20 66 6f 72 20 70 6f 70  |d a.menu for pop|
00000c80  2d 75 70 20 6d 65 6e 75  20 62 75 74 74 6f 6e 73  |-up menu buttons|
00000c90  2e 20 54 68 65 20 70 6f  69 6e 74 65 72 20 73 68  |. The pointer sh|
00000ca0  61 70 65 20 63 61 6e 20  62 65 20 72 65 64 65 66  |ape can be redef|
00000cb0  69 6e 65 64 20 75 73 69  6e 67 20 74 77 6f 0a 53  |ined using two.S|
00000cc0  57 49 73 3a 20 4f 53 5f  53 70 72 69 74 65 4f 70  |WIs: OS_SpriteOp|
00000cd0  20 33 36 20 73 65 74 73  20 74 68 65 20 70 6f 69  | 36 sets the poi|
00000ce0  6e 74 65 72 20 73 68 61  70 65 20 66 72 6f 6d 20  |nter shape from |
00000cf0  61 20 73 70 72 69 74 65  2c 20 61 6e 64 20 4f 53  |a sprite, and OS|
00000d00  5f 57 6f 72 64 20 32 31  2c 30 0a 73 65 74 73 20  |_Word 21,0.sets |
00000d10  74 68 65 20 73 68 61 70  65 20 66 72 6f 6d 20 61  |the shape from a|
00000d20  20 72 61 77 20 62 69 74  20 70 61 74 74 65 72 6e  | raw bit pattern|
00000d30  2e 20 42 6f 74 68 20 6f  66 20 74 68 65 73 65 20  |. Both of these |
00000d40  53 57 49 73 20 61 72 65  20 69 6e 74 65 72 63 65  |SWIs are interce|
00000d50  70 74 65 64 20 62 79 0a  6d 6f 64 75 6c 65 2c 20  |pted by.module, |
00000d60  70 65 72 66 6f 72 6d 65  64 20 62 79 20 63 6c 61  |performed by cla|
00000d70  69 6d 69 6e 67 20 53 70  72 69 74 65 56 20 61 6e  |iming SpriteV an|
00000d80  64 20 57 6f 72 64 56 2e  20 57 68 65 6e 20 4f 53  |d WordV. When OS|
00000d90  5f 53 70 72 69 74 65 4f  70 20 33 36 20 69 73 0a  |_SpriteOp 36 is.|
00000da0  63 61 6c 6c 65 64 2c 20  74 68 65 20 73 70 72 69  |called, the spri|
00000db0  74 65 20 6e 61 6d 65 20  69 73 20 63 68 65 63 6b  |te name is check|
00000dc0  65 64 20 61 67 61 69 6e  73 74 20 61 20 6c 69 73  |ed against a lis|
00000dd0  74 20 6f 66 20 6b 6e 6f  77 6e 20 70 6f 69 6e 74  |t of known point|
00000de0  65 72 20 6e 61 6d 65 73  3b 20 61 0a 6d 61 74 63  |er names; a.matc|
00000df0  68 20 72 65 73 75 6c 74  73 20 69 6e 20 74 68 65  |h results in the|
00000e00  20 73 74 61 6e 64 61 72  64 20 70 6f 69 6e 74 65  | standard pointe|
00000e10  72 20 62 65 69 6e 67 20  72 65 70 6c 61 63 65 64  |r being replaced|
00000e20  2e 0a 0a 54 68 65 20 66  69 6e 61 6c 20 70 72 6f  |...The final pro|
00000e30  62 6c 65 6d 20 77 69 74  68 20 69 6d 70 6c 65 6d  |blem with implem|
00000e40  65 6e 74 69 6e 67 20 74  68 65 20 77 6f 62 62 6c  |enting the wobbl|
00000e50  79 20 70 6f 69 6e 74 65  72 20 69 6e 20 61 73 73  |y pointer in ass|
00000e60  65 6d 62 6c 65 72 20 69  73 20 74 68 65 0a 6c 61  |embler is the.la|
00000e70  63 6b 20 6f 66 20 66 6c  6f 61 74 69 6e 67 20 70  |ck of floating p|
00000e80  6f 69 6e 74 20 73 75 70  70 6f 72 74 2e 20 54 6f  |oint support. To|
00000e90  20 6f 76 65 72 63 6f 6d  65 20 74 68 69 73 20 70  | overcome this p|
00000ea0  72 6f 62 6c 65 6d 2c 20  61 6c 6c 20 73 65 63 74  |roblem, all sect|
00000eb0  69 6f 6e 73 20 6f 66 20  74 68 65 0a 63 6f 64 65  |ions of the.code|
00000ec0  20 74 68 61 74 20 72 65  71 75 69 72 65 20 72 65  | that require re|
00000ed0  61 6c 20 6e 75 6d 62 65  72 73 20 68 61 76 65 20  |al numbers have |
00000ee0  62 65 65 6e 20 77 72 69  74 74 65 6e 20 75 73 69  |been written usi|
00000ef0  6e 67 20 66 69 78 65 64  20 70 6f 69 6e 74 20 76  |ng fixed point v|
00000f00  61 6c 75 65 73 2c 0a 77  69 74 68 20 65 61 63 68  |alues,.with each|
00000f10  20 33 32 20 62 69 74 20  76 61 6c 75 65 20 73 70  | 32 bit value sp|
00000f20  6c 69 74 20 69 6e 74 6f  20 68 61 6c 66 20 77 69  |lit into half wi|
00000f30  74 68 20 31 36 20 62 69  74 73 20 6f 66 20 69 6e  |th 16 bits of in|
00000f40  74 65 67 65 72 20 61 6e  64 20 31 36 20 62 69 74  |teger and 16 bit|
00000f50  73 20 6f 66 0a 66 72 61  63 74 69 6f 6e 2e 20 48  |s of.fraction. H|
00000f60  6f 77 65 76 65 72 2c 20  68 69 67 68 20 61 63 63  |owever, high acc|
00000f70  75 72 61 63 79 20 69 73  20 6e 6f 74 20 72 65 71  |uracy is not req|
00000f80  75 69 72 65 64 20 66 6f  72 20 74 68 69 73 20 61  |uired for this a|
00000f90  70 70 6c 69 63 61 74 69  6f 6e 2c 20 73 6f 0a 73  |pplication, so.s|
00000fa0  6f 6d 65 20 6f 66 20 74  68 65 20 63 61 6c 63 75  |ome of the calcu|
00000fb0  6c 61 74 69 6f 6e 73 20  68 61 76 65 20 62 65 65  |lations have bee|
00000fc0  6e 20 69 6d 70 6c 65 6d  65 6e 74 65 64 20 66 6f  |n implemented fo|
00000fd0  72 20 73 70 65 65 64 20  61 6e 64 20 73 69 6d 70  |r speed and simp|
00000fe0  6c 69 63 69 74 6c 79 0a  72 61 74 68 65 72 20 74  |licitly.rather t|
00000ff0  68 61 6e 20 66 6f 72 20  70 72 65 63 69 73 69 6f  |han for precisio|
00001000  6e 2e 0a                                          |n..|
00001003