Home » Archimedes archive » Archimedes World » archimedes_world_volume_15_issue_1_scp.adf » !ProFiler_ProFiler » !ProFiler/Dox/External

!ProFiler/Dox/External

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 » Archimedes World » archimedes_world_volume_15_issue_1_scp.adf » !ProFiler_ProFiler
Filename: !ProFiler/Dox/External
Read OK:
File size: 2CAC bytes
Load address: 0000
Exec address: 0000
File contents
<html><head><title>ProFiler External utilities</title></head>

<body>
<h1><center><u>ProFiler External Utilities</u></center></h1>

<h2><i>Preliminary</i></h2>
<i>The external utilities exist, but the construction of them, and how they communicate with the Filer, has not been defined completely.
<p>It is possible, however, to give a loose explanation of how it works now, and the final documentation will most likely not differ much from this.</i>

<h2>Types of utilites</h2>
There are two main types of utilities. The first are Sprite Clients, the second are External Utilities.
<p><b>Sprite Clients</b> are usually just raw modules, that support the relevant service calls. Their purpose is to provide alternative sprites in the directory viewers, e.g. picture thumbnails.
<p><b>External Utilities</b> consist of a directory in Filer:Utilities. There is at least one program in this directory, which is the actual utility. There may also be an application to handle the choices for that utility. The program may be a module, in which case it can provide extention functions to the Filer menus. Or it might be a simple application, which relies on a (yet unwritten) Level1 module to execute it with the relevant parametres.

<p>You should support Service_FilerEnumerateClients if you are a module. Otherwise you will not even get an entry in the menu. What to return depends on the capabilities of the module. If you are a program in Utilities, you can't support the service calls of course. Instead, the directory contents reflect your capabilities. The following list summarises this:

<pre>
Form	Choices		[DB]	Dir contents
----------------------------------------------------------------------
Module	AutoLoad	0	No !ExtChoice, dir may not exist
Module	Custom		0	!ExtChoice
Module	SCM		CB	Anything, might not exist
Other	None		n/a	No !Choices file.
Other	Custom		n/a	!ExtChoice
Other	SCM		n/a	No !ExtChoice, SCM !Choices file
</pre>
<i>Notes:
<ul>
<li><b>Form:</b> Type of program.
<li><b>AutoLoad:</b> SC_Manager tries to provide this, if the module is in Filer:RM.
<li><b>SCM:</b> Standard choices managed by SC_Manager.
<li><b>[DB]:</b> Contents of first word in Description Block, see below. CB is an offset to an SCM list. 0 means that either there is a 0 in this word, or the actual pointer to it is 0.
</ul></i>

<p>Each client module may have a description block:
<br><i>All offsets are from the start of the description block.</i>
<pre>
+0	Offset to list of SCM choices, or 0 if custom choices.
+4	Offset to description of utility, or -1 if none
+8	-1 if you think the block ends here.
</pre>

<p>The SCM choices list is a list of choices of different types. Each choice is laid out like this. Here, all offsets are from the start of the choices list:

<pre>
+0	Choice type, or -1 to end the list
+4	Length of choice data, incl. the type and this word
+8	Choice identifier, max 11 chars, padded with 0's to 12 bytes
+20	The rest depends on the choice type:
	0	Option
		+20	Offset to title text
		+24	Offset to help text
		+28	Default value (0 or -1)

	1	Radio group
		+20	Number of entries in group
		+24	Default entry selected
		+28	Offset to title of entry 0
		+32	Offset to help text of entry 0
		+36	Offset to title of entry 1
		+40	Offset to help text of entry 1
		+44	etc.

	2	String
		+20	Offset to title text
		+24	Offset to help text
		+28	Offset to validation string
		+32	Offset to default value
		+36	Maximum length of value

	3	Number range
		+20	Offset to title text
		+24	Offset to help text
		+28	Lower bound
		+32	Upper bound
		+36	Step size
		+40	Default value
		+44	Precision

	4	String set
		+20	Offset to title text
		+24	Offset to help text
		+28	Index of default string selected
		+32	Offset to set of strings
</pre>

<p>The list of functions looks like this. The offsets are from the start of the module, given when registering:

<pre>
+0	Function handle, to be filled out by Filer
+4	Function identifier, max 11 chars, padded with 0's to 12 bytes
+16	Offset to validation code or 0 if none
+20	Offset to parameter code or 0 if none
+24	Object ID of parameter window. Must be 0 initially, and will
	later be filled in by the Filer.
+28	Offset to activating code or 0 if none
+32	Offset to unknown event code or 0 if none
+36	Menu number the function appears in, or 255 if none
+37	Function flags
	bit0	Has parameter window
	bit1-7	Reserved
+38	Reserved
+39	Reserved
+40	Suggested keycode
	&200 if none
	&204 if not allowed
+44	Offset to initialisation code or 0 if none
+48	Offset to list of addtional toolbox objects, or 0 if none
+52	Reserved
+56	Reserved
+60	Reserved
</pre>

<i>Notes:
<ul>
<li><b>Identifiers:</b> These are strings of up to 11 chars. They need to be unique within the utility in question. This includes any future versions of it, and that is the main reason for the IDs. If a choice/function keeps on having the same effect, you should keep using the same ID. This will ensure that the user's settings are still considered valid. If, however, a choice/function changes effect significantly, you should also use a new ID for it. The user's previous setting is then discarded for that choice/function, and the default value is used.
<li>The Full ID of a function is "UtilID_FuncID".
<li>The suggested key code is used as default value if it isn't used already for another function.
<li>The Messages file contains a description of what happens when the key shortcut is pressed. This should be short and to the point, e.g. "Open 'Copy'". The token <samp>K_&lt;util&gt;_&lt;function&gt;</samp> is searched for.
<li>There may also be an <samp>M_&lt;util&gt;_&lt;function&gt;</samp> text in the Messages file. This is used for the menu entry if it exists. If not, the function ID is used.
<li>The SCM !Choices file is equivalent to the SCM choices list described above. All the offsets are from the start of the file.
</ul></i>

<h3>Initialisation code</h3>
Called to initialise the function. If the function has a parameter window, it should be created, and its ID returned. The window will usually contain an OK button or similar, and this gadget should be set up to return the event given in R0.
Before this entry is called, the Filer will have loaded the 'Res' file in the utility directory if present.
<pre>On entry
R0	Activate event
R11	Base of service entries, see below
On exit
R1	ID of parameter window, or 0 if none
R12	Preserved
</pre>

<h3>Validation code</h3>
Called to validate the function. None of the other entries will be called, if this code returns 'invalid'. If no code exists, the other entries are considered valid.
<pre>On entry
R0	Number of objects selected
R1	0
R2	->Viewer
R11	Base of service entries, see below
On exit
R1	bit0	Invalid - shaded
	bit1	Ticked
	bit2-31	Reserved, must be 0
R12	Preserved
</pre>

<h3>Parameter code</h3>
Called just before the parameter window is opened, either because the submenu arrow is followed, or when the key shortcut for a function with parametres is pressed. The function can set up the icons in the window according to the current selection.
<pre>On entry
R0	Number of objects selected
R1	ID of parameter window as returned from init code
R2	->Viewer
R11	Base of service entries, see below
On exit
R12	Preserved
</pre>

<h3>Activate code</h3>
Called when the function is activated, in one of 3 ways:
<br>1. Selecting its menu entry if there is no parameter window.
<br>2. Making the parameter window generate the activate event (usually by clicking an OK button).
<br>3. Pressing the key shortcut if there is no parameter window.
<pre>On entry
R0	Number of objects selected
R1	ID of parameter window as returned from init code
R2	->Viewer
R11	Base of service entries, see below
On exit
R12	Preserved
</pre>

<h3>Unknown event code</h3>
Called when receiving an unknown toolbox event from the function's parameter window. Events from &FF00 to &FFFF are reserved for external utilities. You can make your window generate these events, and this entry will be called. If any other event above &FFFF (i.e. the toolbox events) are received, it will also be passed on to you if it comes from your window.
If you need to receive events from other windows you may have created, you can put the appropriate IDs into a list. The list should end with a 0 word.
<pre>On entry
R0	Number of objects selected
R1	Event related object ID
R2	->Viewer
R3	Event code
R5	->Event block
R6	Event related component ID
R11	Base of service entries, see below
On exit
R12	Preserved
</pre>

<h2>Service entries</h2>
Service entries are just useful routines in the Filer, that may be used by the function code. These routines could have been SWIs, but aren't for several reasons:
<ul>
<li>There is almost no overhead when calling the routines this way.
<li>There will be many of these, and it would require several SWI chunks.
<li>It is much easier to retain backwards compatibility if a routine is later withdrawn or replaced.
</ul>
When calling one of these routines, you should use FNcall in ExtLib. If you aren't using the Basic Assembler, simply do the equivalent of this:
<pre>ADR R14,return
ADD PC,R11,#SE*4
.return
</pre>
SE is the routine number, and they are defined as variables in ExtLib.
<br>The currently defined routines are:

<h3>SE_GetSelected</h3>
<pre>On entry:
R2	->Viewer
R3	Preserved from last call, or 0 to start
On exit:
R3	Next selected object (0 if none)
</pre>
This routine is used to find out what objects are selected. This routine, and SE_ScanSelection are the two main ways of deciding what objects to operate on.

<h3>SE_ScanSelection</h3>
<pre>On entry:
R2	->Viewer
R3	Recurse mode
	0	No recursion
	1	*Reserved*
	2	Recurse into directories
	3	Recurse into directories and image files
R4	Address of routine to call for each object
R5	Value of R12 when routine is called

Routine will be called with:
R1	->Full pathname of object
R12	R5 on entry
R14	Return address (no flags)
R0-R7,R12,R14 may be corrupted, V may be set if an error occurs
</pre>
For each selected object in the viewer, a call to the supplied routine will be made. This makes it very easy supporting any number of objects, while only writing a routine that supports one object. Escape will be checked during the scanning, and will abort with the error "Escape" if pressed.

<h3>SE_StartTask</h3>
<pre>On entry:
R0	->Command for starting task
</pre>
There is a bug in the Toolbox which prevents a toolbox task from starting another toolbox task just like that. This routine will do the necessary workarounds to provide a safe way to start any task. So don't use Wimp_StartTask or *WimpTask in the utilities, use this call instead.

<h3>SE_Message</h3>
<pre>On entry:
R0	->Message
</pre>
This call will open a message box on the screen, containing the message. In some cases this is preferable to using Wimp_ReportError.

<h3>SE_MakeViewerName</h3>
<pre>On entry:
R0	->Buffer for name
R2	->Viewer
</pre>
This call will put the viewer name (directory) into the buffer.

<h3>SE_MakeObjectName</h3>
<pre>On entry:
R0	->Buffer for name
R2	->Viewer
R3	->Object
</pre>
This call will put the full pathname of the object into the buffer.

<h3>SE_GetType</h3>
<pre>On entry:
R3	->Object
On exit:
R0	Object type
</pre>
This call will return the type of the object.

<h3>SE_GetLeaf</h3>
<pre>On entry:
R0	->Buffer
R2	->Viewer
R3	->Object
On exit:
R0	->Terminator of leafname
</pre>
This call will put the leafname of the object into the buffer.

</body></html>
00000000  3c 68 74 6d 6c 3e 3c 68  65 61 64 3e 3c 74 69 74  |<html><head><tit|
00000010  6c 65 3e 50 72 6f 46 69  6c 65 72 20 45 78 74 65  |le>ProFiler Exte|
00000020  72 6e 61 6c 20 75 74 69  6c 69 74 69 65 73 3c 2f  |rnal utilities</|
00000030  74 69 74 6c 65 3e 3c 2f  68 65 61 64 3e 0a 0a 3c  |title></head>..<|
00000040  62 6f 64 79 3e 0a 3c 68  31 3e 3c 63 65 6e 74 65  |body>.<h1><cente|
00000050  72 3e 3c 75 3e 50 72 6f  46 69 6c 65 72 20 45 78  |r><u>ProFiler Ex|
00000060  74 65 72 6e 61 6c 20 55  74 69 6c 69 74 69 65 73  |ternal Utilities|
00000070  3c 2f 75 3e 3c 2f 63 65  6e 74 65 72 3e 3c 2f 68  |</u></center></h|
00000080  31 3e 0a 0a 3c 68 32 3e  3c 69 3e 50 72 65 6c 69  |1>..<h2><i>Preli|
00000090  6d 69 6e 61 72 79 3c 2f  69 3e 3c 2f 68 32 3e 0a  |minary</i></h2>.|
000000a0  3c 69 3e 54 68 65 20 65  78 74 65 72 6e 61 6c 20  |<i>The external |
000000b0  75 74 69 6c 69 74 69 65  73 20 65 78 69 73 74 2c  |utilities exist,|
000000c0  20 62 75 74 20 74 68 65  20 63 6f 6e 73 74 72 75  | but the constru|
000000d0  63 74 69 6f 6e 20 6f 66  20 74 68 65 6d 2c 20 61  |ction of them, a|
000000e0  6e 64 20 68 6f 77 20 74  68 65 79 20 63 6f 6d 6d  |nd how they comm|
000000f0  75 6e 69 63 61 74 65 20  77 69 74 68 20 74 68 65  |unicate with the|
00000100  20 46 69 6c 65 72 2c 20  68 61 73 20 6e 6f 74 20  | Filer, has not |
00000110  62 65 65 6e 20 64 65 66  69 6e 65 64 20 63 6f 6d  |been defined com|
00000120  70 6c 65 74 65 6c 79 2e  0a 3c 70 3e 49 74 20 69  |pletely..<p>It i|
00000130  73 20 70 6f 73 73 69 62  6c 65 2c 20 68 6f 77 65  |s possible, howe|
00000140  76 65 72 2c 20 74 6f 20  67 69 76 65 20 61 20 6c  |ver, to give a l|
00000150  6f 6f 73 65 20 65 78 70  6c 61 6e 61 74 69 6f 6e  |oose explanation|
00000160  20 6f 66 20 68 6f 77 20  69 74 20 77 6f 72 6b 73  | of how it works|
00000170  20 6e 6f 77 2c 20 61 6e  64 20 74 68 65 20 66 69  | now, and the fi|
00000180  6e 61 6c 20 64 6f 63 75  6d 65 6e 74 61 74 69 6f  |nal documentatio|
00000190  6e 20 77 69 6c 6c 20 6d  6f 73 74 20 6c 69 6b 65  |n will most like|
000001a0  6c 79 20 6e 6f 74 20 64  69 66 66 65 72 20 6d 75  |ly not differ mu|
000001b0  63 68 20 66 72 6f 6d 20  74 68 69 73 2e 3c 2f 69  |ch from this.</i|
000001c0  3e 0a 0a 3c 68 32 3e 54  79 70 65 73 20 6f 66 20  |>..<h2>Types of |
000001d0  75 74 69 6c 69 74 65 73  3c 2f 68 32 3e 0a 54 68  |utilites</h2>.Th|
000001e0  65 72 65 20 61 72 65 20  74 77 6f 20 6d 61 69 6e  |ere are two main|
000001f0  20 74 79 70 65 73 20 6f  66 20 75 74 69 6c 69 74  | types of utilit|
00000200  69 65 73 2e 20 54 68 65  20 66 69 72 73 74 20 61  |ies. The first a|
00000210  72 65 20 53 70 72 69 74  65 20 43 6c 69 65 6e 74  |re Sprite Client|
00000220  73 2c 20 74 68 65 20 73  65 63 6f 6e 64 20 61 72  |s, the second ar|
00000230  65 20 45 78 74 65 72 6e  61 6c 20 55 74 69 6c 69  |e External Utili|
00000240  74 69 65 73 2e 0a 3c 70  3e 3c 62 3e 53 70 72 69  |ties..<p><b>Spri|
00000250  74 65 20 43 6c 69 65 6e  74 73 3c 2f 62 3e 20 61  |te Clients</b> a|
00000260  72 65 20 75 73 75 61 6c  6c 79 20 6a 75 73 74 20  |re usually just |
00000270  72 61 77 20 6d 6f 64 75  6c 65 73 2c 20 74 68 61  |raw modules, tha|
00000280  74 20 73 75 70 70 6f 72  74 20 74 68 65 20 72 65  |t support the re|
00000290  6c 65 76 61 6e 74 20 73  65 72 76 69 63 65 20 63  |levant service c|
000002a0  61 6c 6c 73 2e 20 54 68  65 69 72 20 70 75 72 70  |alls. Their purp|
000002b0  6f 73 65 20 69 73 20 74  6f 20 70 72 6f 76 69 64  |ose is to provid|
000002c0  65 20 61 6c 74 65 72 6e  61 74 69 76 65 20 73 70  |e alternative sp|
000002d0  72 69 74 65 73 20 69 6e  20 74 68 65 20 64 69 72  |rites in the dir|
000002e0  65 63 74 6f 72 79 20 76  69 65 77 65 72 73 2c 20  |ectory viewers, |
000002f0  65 2e 67 2e 20 70 69 63  74 75 72 65 20 74 68 75  |e.g. picture thu|
00000300  6d 62 6e 61 69 6c 73 2e  0a 3c 70 3e 3c 62 3e 45  |mbnails..<p><b>E|
00000310  78 74 65 72 6e 61 6c 20  55 74 69 6c 69 74 69 65  |xternal Utilitie|
00000320  73 3c 2f 62 3e 20 63 6f  6e 73 69 73 74 20 6f 66  |s</b> consist of|
00000330  20 61 20 64 69 72 65 63  74 6f 72 79 20 69 6e 20  | a directory in |
00000340  46 69 6c 65 72 3a 55 74  69 6c 69 74 69 65 73 2e  |Filer:Utilities.|
00000350  20 54 68 65 72 65 20 69  73 20 61 74 20 6c 65 61  | There is at lea|
00000360  73 74 20 6f 6e 65 20 70  72 6f 67 72 61 6d 20 69  |st one program i|
00000370  6e 20 74 68 69 73 20 64  69 72 65 63 74 6f 72 79  |n this directory|
00000380  2c 20 77 68 69 63 68 20  69 73 20 74 68 65 20 61  |, which is the a|
00000390  63 74 75 61 6c 20 75 74  69 6c 69 74 79 2e 20 54  |ctual utility. T|
000003a0  68 65 72 65 20 6d 61 79  20 61 6c 73 6f 20 62 65  |here may also be|
000003b0  20 61 6e 20 61 70 70 6c  69 63 61 74 69 6f 6e 20  | an application |
000003c0  74 6f 20 68 61 6e 64 6c  65 20 74 68 65 20 63 68  |to handle the ch|
000003d0  6f 69 63 65 73 20 66 6f  72 20 74 68 61 74 20 75  |oices for that u|
000003e0  74 69 6c 69 74 79 2e 20  54 68 65 20 70 72 6f 67  |tility. The prog|
000003f0  72 61 6d 20 6d 61 79 20  62 65 20 61 20 6d 6f 64  |ram may be a mod|
00000400  75 6c 65 2c 20 69 6e 20  77 68 69 63 68 20 63 61  |ule, in which ca|
00000410  73 65 20 69 74 20 63 61  6e 20 70 72 6f 76 69 64  |se it can provid|
00000420  65 20 65 78 74 65 6e 74  69 6f 6e 20 66 75 6e 63  |e extention func|
00000430  74 69 6f 6e 73 20 74 6f  20 74 68 65 20 46 69 6c  |tions to the Fil|
00000440  65 72 20 6d 65 6e 75 73  2e 20 4f 72 20 69 74 20  |er menus. Or it |
00000450  6d 69 67 68 74 20 62 65  20 61 20 73 69 6d 70 6c  |might be a simpl|
00000460  65 20 61 70 70 6c 69 63  61 74 69 6f 6e 2c 20 77  |e application, w|
00000470  68 69 63 68 20 72 65 6c  69 65 73 20 6f 6e 20 61  |hich relies on a|
00000480  20 28 79 65 74 20 75 6e  77 72 69 74 74 65 6e 29  | (yet unwritten)|
00000490  20 4c 65 76 65 6c 31 20  6d 6f 64 75 6c 65 20 74  | Level1 module t|
000004a0  6f 20 65 78 65 63 75 74  65 20 69 74 20 77 69 74  |o execute it wit|
000004b0  68 20 74 68 65 20 72 65  6c 65 76 61 6e 74 20 70  |h the relevant p|
000004c0  61 72 61 6d 65 74 72 65  73 2e 0a 0a 3c 70 3e 59  |arametres...<p>Y|
000004d0  6f 75 20 73 68 6f 75 6c  64 20 73 75 70 70 6f 72  |ou should suppor|
000004e0  74 20 53 65 72 76 69 63  65 5f 46 69 6c 65 72 45  |t Service_FilerE|
000004f0  6e 75 6d 65 72 61 74 65  43 6c 69 65 6e 74 73 20  |numerateClients |
00000500  69 66 20 79 6f 75 20 61  72 65 20 61 20 6d 6f 64  |if you are a mod|
00000510  75 6c 65 2e 20 4f 74 68  65 72 77 69 73 65 20 79  |ule. Otherwise y|
00000520  6f 75 20 77 69 6c 6c 20  6e 6f 74 20 65 76 65 6e  |ou will not even|
00000530  20 67 65 74 20 61 6e 20  65 6e 74 72 79 20 69 6e  | get an entry in|
00000540  20 74 68 65 20 6d 65 6e  75 2e 20 57 68 61 74 20  | the menu. What |
00000550  74 6f 20 72 65 74 75 72  6e 20 64 65 70 65 6e 64  |to return depend|
00000560  73 20 6f 6e 20 74 68 65  20 63 61 70 61 62 69 6c  |s on the capabil|
00000570  69 74 69 65 73 20 6f 66  20 74 68 65 20 6d 6f 64  |ities of the mod|
00000580  75 6c 65 2e 20 49 66 20  79 6f 75 20 61 72 65 20  |ule. If you are |
00000590  61 20 70 72 6f 67 72 61  6d 20 69 6e 20 55 74 69  |a program in Uti|
000005a0  6c 69 74 69 65 73 2c 20  79 6f 75 20 63 61 6e 27  |lities, you can'|
000005b0  74 20 73 75 70 70 6f 72  74 20 74 68 65 20 73 65  |t support the se|
000005c0  72 76 69 63 65 20 63 61  6c 6c 73 20 6f 66 20 63  |rvice calls of c|
000005d0  6f 75 72 73 65 2e 20 49  6e 73 74 65 61 64 2c 20  |ourse. Instead, |
000005e0  74 68 65 20 64 69 72 65  63 74 6f 72 79 20 63 6f  |the directory co|
000005f0  6e 74 65 6e 74 73 20 72  65 66 6c 65 63 74 20 79  |ntents reflect y|
00000600  6f 75 72 20 63 61 70 61  62 69 6c 69 74 69 65 73  |our capabilities|
00000610  2e 20 54 68 65 20 66 6f  6c 6c 6f 77 69 6e 67 20  |. The following |
00000620  6c 69 73 74 20 73 75 6d  6d 61 72 69 73 65 73 20  |list summarises |
00000630  74 68 69 73 3a 0a 0a 3c  70 72 65 3e 0a 46 6f 72  |this:..<pre>.For|
00000640  6d 09 43 68 6f 69 63 65  73 09 09 5b 44 42 5d 09  |m.Choices..[DB].|
00000650  44 69 72 20 63 6f 6e 74  65 6e 74 73 0a 2d 2d 2d  |Dir contents.---|
00000660  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000006a0  2d 2d 2d 0a 4d 6f 64 75  6c 65 09 41 75 74 6f 4c  |---.Module.AutoL|
000006b0  6f 61 64 09 30 09 4e 6f  20 21 45 78 74 43 68 6f  |oad.0.No !ExtCho|
000006c0  69 63 65 2c 20 64 69 72  20 6d 61 79 20 6e 6f 74  |ice, dir may not|
000006d0  20 65 78 69 73 74 0a 4d  6f 64 75 6c 65 09 43 75  | exist.Module.Cu|
000006e0  73 74 6f 6d 09 09 30 09  21 45 78 74 43 68 6f 69  |stom..0.!ExtChoi|
000006f0  63 65 0a 4d 6f 64 75 6c  65 09 53 43 4d 09 09 43  |ce.Module.SCM..C|
00000700  42 09 41 6e 79 74 68 69  6e 67 2c 20 6d 69 67 68  |B.Anything, migh|
00000710  74 20 6e 6f 74 20 65 78  69 73 74 0a 4f 74 68 65  |t not exist.Othe|
00000720  72 09 4e 6f 6e 65 09 09  6e 2f 61 09 4e 6f 20 21  |r.None..n/a.No !|
00000730  43 68 6f 69 63 65 73 20  66 69 6c 65 2e 0a 4f 74  |Choices file..Ot|
00000740  68 65 72 09 43 75 73 74  6f 6d 09 09 6e 2f 61 09  |her.Custom..n/a.|
00000750  21 45 78 74 43 68 6f 69  63 65 0a 4f 74 68 65 72  |!ExtChoice.Other|
00000760  09 53 43 4d 09 09 6e 2f  61 09 4e 6f 20 21 45 78  |.SCM..n/a.No !Ex|
00000770  74 43 68 6f 69 63 65 2c  20 53 43 4d 20 21 43 68  |tChoice, SCM !Ch|
00000780  6f 69 63 65 73 20 66 69  6c 65 0a 3c 2f 70 72 65  |oices file.</pre|
00000790  3e 0a 3c 69 3e 4e 6f 74  65 73 3a 0a 3c 75 6c 3e  |>.<i>Notes:.<ul>|
000007a0  0a 3c 6c 69 3e 3c 62 3e  46 6f 72 6d 3a 3c 2f 62  |.<li><b>Form:</b|
000007b0  3e 20 54 79 70 65 20 6f  66 20 70 72 6f 67 72 61  |> Type of progra|
000007c0  6d 2e 0a 3c 6c 69 3e 3c  62 3e 41 75 74 6f 4c 6f  |m..<li><b>AutoLo|
000007d0  61 64 3a 3c 2f 62 3e 20  53 43 5f 4d 61 6e 61 67  |ad:</b> SC_Manag|
000007e0  65 72 20 74 72 69 65 73  20 74 6f 20 70 72 6f 76  |er tries to prov|
000007f0  69 64 65 20 74 68 69 73  2c 20 69 66 20 74 68 65  |ide this, if the|
00000800  20 6d 6f 64 75 6c 65 20  69 73 20 69 6e 20 46 69  | module is in Fi|
00000810  6c 65 72 3a 52 4d 2e 0a  3c 6c 69 3e 3c 62 3e 53  |ler:RM..<li><b>S|
00000820  43 4d 3a 3c 2f 62 3e 20  53 74 61 6e 64 61 72 64  |CM:</b> Standard|
00000830  20 63 68 6f 69 63 65 73  20 6d 61 6e 61 67 65 64  | choices managed|
00000840  20 62 79 20 53 43 5f 4d  61 6e 61 67 65 72 2e 0a  | by SC_Manager..|
00000850  3c 6c 69 3e 3c 62 3e 5b  44 42 5d 3a 3c 2f 62 3e  |<li><b>[DB]:</b>|
00000860  20 43 6f 6e 74 65 6e 74  73 20 6f 66 20 66 69 72  | Contents of fir|
00000870  73 74 20 77 6f 72 64 20  69 6e 20 44 65 73 63 72  |st word in Descr|
00000880  69 70 74 69 6f 6e 20 42  6c 6f 63 6b 2c 20 73 65  |iption Block, se|
00000890  65 20 62 65 6c 6f 77 2e  20 43 42 20 69 73 20 61  |e below. CB is a|
000008a0  6e 20 6f 66 66 73 65 74  20 74 6f 20 61 6e 20 53  |n offset to an S|
000008b0  43 4d 20 6c 69 73 74 2e  20 30 20 6d 65 61 6e 73  |CM list. 0 means|
000008c0  20 74 68 61 74 20 65 69  74 68 65 72 20 74 68 65  | that either the|
000008d0  72 65 20 69 73 20 61 20  30 20 69 6e 20 74 68 69  |re is a 0 in thi|
000008e0  73 20 77 6f 72 64 2c 20  6f 72 20 74 68 65 20 61  |s word, or the a|
000008f0  63 74 75 61 6c 20 70 6f  69 6e 74 65 72 20 74 6f  |ctual pointer to|
00000900  20 69 74 20 69 73 20 30  2e 0a 3c 2f 75 6c 3e 3c  | it is 0..</ul><|
00000910  2f 69 3e 0a 0a 3c 70 3e  45 61 63 68 20 63 6c 69  |/i>..<p>Each cli|
00000920  65 6e 74 20 6d 6f 64 75  6c 65 20 6d 61 79 20 68  |ent module may h|
00000930  61 76 65 20 61 20 64 65  73 63 72 69 70 74 69 6f  |ave a descriptio|
00000940  6e 20 62 6c 6f 63 6b 3a  0a 3c 62 72 3e 3c 69 3e  |n block:.<br><i>|
00000950  41 6c 6c 20 6f 66 66 73  65 74 73 20 61 72 65 20  |All offsets are |
00000960  66 72 6f 6d 20 74 68 65  20 73 74 61 72 74 20 6f  |from the start o|
00000970  66 20 74 68 65 20 64 65  73 63 72 69 70 74 69 6f  |f the descriptio|
00000980  6e 20 62 6c 6f 63 6b 2e  3c 2f 69 3e 0a 3c 70 72  |n block.</i>.<pr|
00000990  65 3e 0a 2b 30 09 4f 66  66 73 65 74 20 74 6f 20  |e>.+0.Offset to |
000009a0  6c 69 73 74 20 6f 66 20  53 43 4d 20 63 68 6f 69  |list of SCM choi|
000009b0  63 65 73 2c 20 6f 72 20  30 20 69 66 20 63 75 73  |ces, or 0 if cus|
000009c0  74 6f 6d 20 63 68 6f 69  63 65 73 2e 0a 2b 34 09  |tom choices..+4.|
000009d0  4f 66 66 73 65 74 20 74  6f 20 64 65 73 63 72 69  |Offset to descri|
000009e0  70 74 69 6f 6e 20 6f 66  20 75 74 69 6c 69 74 79  |ption of utility|
000009f0  2c 20 6f 72 20 2d 31 20  69 66 20 6e 6f 6e 65 0a  |, or -1 if none.|
00000a00  2b 38 09 2d 31 20 69 66  20 79 6f 75 20 74 68 69  |+8.-1 if you thi|
00000a10  6e 6b 20 74 68 65 20 62  6c 6f 63 6b 20 65 6e 64  |nk the block end|
00000a20  73 20 68 65 72 65 2e 0a  3c 2f 70 72 65 3e 0a 0a  |s here..</pre>..|
00000a30  3c 70 3e 54 68 65 20 53  43 4d 20 63 68 6f 69 63  |<p>The SCM choic|
00000a40  65 73 20 6c 69 73 74 20  69 73 20 61 20 6c 69 73  |es list is a lis|
00000a50  74 20 6f 66 20 63 68 6f  69 63 65 73 20 6f 66 20  |t of choices of |
00000a60  64 69 66 66 65 72 65 6e  74 20 74 79 70 65 73 2e  |different types.|
00000a70  20 45 61 63 68 20 63 68  6f 69 63 65 20 69 73 20  | Each choice is |
00000a80  6c 61 69 64 20 6f 75 74  20 6c 69 6b 65 20 74 68  |laid out like th|
00000a90  69 73 2e 20 48 65 72 65  2c 20 61 6c 6c 20 6f 66  |is. Here, all of|
00000aa0  66 73 65 74 73 20 61 72  65 20 66 72 6f 6d 20 74  |fsets are from t|
00000ab0  68 65 20 73 74 61 72 74  20 6f 66 20 74 68 65 20  |he start of the |
00000ac0  63 68 6f 69 63 65 73 20  6c 69 73 74 3a 0a 0a 3c  |choices list:..<|
00000ad0  70 72 65 3e 0a 2b 30 09  43 68 6f 69 63 65 20 74  |pre>.+0.Choice t|
00000ae0  79 70 65 2c 20 6f 72 20  2d 31 20 74 6f 20 65 6e  |ype, or -1 to en|
00000af0  64 20 74 68 65 20 6c 69  73 74 0a 2b 34 09 4c 65  |d the list.+4.Le|
00000b00  6e 67 74 68 20 6f 66 20  63 68 6f 69 63 65 20 64  |ngth of choice d|
00000b10  61 74 61 2c 20 69 6e 63  6c 2e 20 74 68 65 20 74  |ata, incl. the t|
00000b20  79 70 65 20 61 6e 64 20  74 68 69 73 20 77 6f 72  |ype and this wor|
00000b30  64 0a 2b 38 09 43 68 6f  69 63 65 20 69 64 65 6e  |d.+8.Choice iden|
00000b40  74 69 66 69 65 72 2c 20  6d 61 78 20 31 31 20 63  |tifier, max 11 c|
00000b50  68 61 72 73 2c 20 70 61  64 64 65 64 20 77 69 74  |hars, padded wit|
00000b60  68 20 30 27 73 20 74 6f  20 31 32 20 62 79 74 65  |h 0's to 12 byte|
00000b70  73 0a 2b 32 30 09 54 68  65 20 72 65 73 74 20 64  |s.+20.The rest d|
00000b80  65 70 65 6e 64 73 20 6f  6e 20 74 68 65 20 63 68  |epends on the ch|
00000b90  6f 69 63 65 20 74 79 70  65 3a 0a 09 30 09 4f 70  |oice type:..0.Op|
00000ba0  74 69 6f 6e 0a 09 09 2b  32 30 09 4f 66 66 73 65  |tion...+20.Offse|
00000bb0  74 20 74 6f 20 74 69 74  6c 65 20 74 65 78 74 0a  |t to title text.|
00000bc0  09 09 2b 32 34 09 4f 66  66 73 65 74 20 74 6f 20  |..+24.Offset to |
00000bd0  68 65 6c 70 20 74 65 78  74 0a 09 09 2b 32 38 09  |help text...+28.|
00000be0  44 65 66 61 75 6c 74 20  76 61 6c 75 65 20 28 30  |Default value (0|
00000bf0  20 6f 72 20 2d 31 29 0a  0a 09 31 09 52 61 64 69  | or -1)...1.Radi|
00000c00  6f 20 67 72 6f 75 70 0a  09 09 2b 32 30 09 4e 75  |o group...+20.Nu|
00000c10  6d 62 65 72 20 6f 66 20  65 6e 74 72 69 65 73 20  |mber of entries |
00000c20  69 6e 20 67 72 6f 75 70  0a 09 09 2b 32 34 09 44  |in group...+24.D|
00000c30  65 66 61 75 6c 74 20 65  6e 74 72 79 20 73 65 6c  |efault entry sel|
00000c40  65 63 74 65 64 0a 09 09  2b 32 38 09 4f 66 66 73  |ected...+28.Offs|
00000c50  65 74 20 74 6f 20 74 69  74 6c 65 20 6f 66 20 65  |et to title of e|
00000c60  6e 74 72 79 20 30 0a 09  09 2b 33 32 09 4f 66 66  |ntry 0...+32.Off|
00000c70  73 65 74 20 74 6f 20 68  65 6c 70 20 74 65 78 74  |set to help text|
00000c80  20 6f 66 20 65 6e 74 72  79 20 30 0a 09 09 2b 33  | of entry 0...+3|
00000c90  36 09 4f 66 66 73 65 74  20 74 6f 20 74 69 74 6c  |6.Offset to titl|
00000ca0  65 20 6f 66 20 65 6e 74  72 79 20 31 0a 09 09 2b  |e of entry 1...+|
00000cb0  34 30 09 4f 66 66 73 65  74 20 74 6f 20 68 65 6c  |40.Offset to hel|
00000cc0  70 20 74 65 78 74 20 6f  66 20 65 6e 74 72 79 20  |p text of entry |
00000cd0  31 0a 09 09 2b 34 34 09  65 74 63 2e 0a 0a 09 32  |1...+44.etc....2|
00000ce0  09 53 74 72 69 6e 67 0a  09 09 2b 32 30 09 4f 66  |.String...+20.Of|
00000cf0  66 73 65 74 20 74 6f 20  74 69 74 6c 65 20 74 65  |fset to title te|
00000d00  78 74 0a 09 09 2b 32 34  09 4f 66 66 73 65 74 20  |xt...+24.Offset |
00000d10  74 6f 20 68 65 6c 70 20  74 65 78 74 0a 09 09 2b  |to help text...+|
00000d20  32 38 09 4f 66 66 73 65  74 20 74 6f 20 76 61 6c  |28.Offset to val|
00000d30  69 64 61 74 69 6f 6e 20  73 74 72 69 6e 67 0a 09  |idation string..|
00000d40  09 2b 33 32 09 4f 66 66  73 65 74 20 74 6f 20 64  |.+32.Offset to d|
00000d50  65 66 61 75 6c 74 20 76  61 6c 75 65 0a 09 09 2b  |efault value...+|
00000d60  33 36 09 4d 61 78 69 6d  75 6d 20 6c 65 6e 67 74  |36.Maximum lengt|
00000d70  68 20 6f 66 20 76 61 6c  75 65 0a 0a 09 33 09 4e  |h of value...3.N|
00000d80  75 6d 62 65 72 20 72 61  6e 67 65 0a 09 09 2b 32  |umber range...+2|
00000d90  30 09 4f 66 66 73 65 74  20 74 6f 20 74 69 74 6c  |0.Offset to titl|
00000da0  65 20 74 65 78 74 0a 09  09 2b 32 34 09 4f 66 66  |e text...+24.Off|
00000db0  73 65 74 20 74 6f 20 68  65 6c 70 20 74 65 78 74  |set to help text|
00000dc0  0a 09 09 2b 32 38 09 4c  6f 77 65 72 20 62 6f 75  |...+28.Lower bou|
00000dd0  6e 64 0a 09 09 2b 33 32  09 55 70 70 65 72 20 62  |nd...+32.Upper b|
00000de0  6f 75 6e 64 0a 09 09 2b  33 36 09 53 74 65 70 20  |ound...+36.Step |
00000df0  73 69 7a 65 0a 09 09 2b  34 30 09 44 65 66 61 75  |size...+40.Defau|
00000e00  6c 74 20 76 61 6c 75 65  0a 09 09 2b 34 34 09 50  |lt value...+44.P|
00000e10  72 65 63 69 73 69 6f 6e  0a 0a 09 34 09 53 74 72  |recision...4.Str|
00000e20  69 6e 67 20 73 65 74 0a  09 09 2b 32 30 09 4f 66  |ing set...+20.Of|
00000e30  66 73 65 74 20 74 6f 20  74 69 74 6c 65 20 74 65  |fset to title te|
00000e40  78 74 0a 09 09 2b 32 34  09 4f 66 66 73 65 74 20  |xt...+24.Offset |
00000e50  74 6f 20 68 65 6c 70 20  74 65 78 74 0a 09 09 2b  |to help text...+|
00000e60  32 38 09 49 6e 64 65 78  20 6f 66 20 64 65 66 61  |28.Index of defa|
00000e70  75 6c 74 20 73 74 72 69  6e 67 20 73 65 6c 65 63  |ult string selec|
00000e80  74 65 64 0a 09 09 2b 33  32 09 4f 66 66 73 65 74  |ted...+32.Offset|
00000e90  20 74 6f 20 73 65 74 20  6f 66 20 73 74 72 69 6e  | to set of strin|
00000ea0  67 73 0a 3c 2f 70 72 65  3e 0a 0a 3c 70 3e 54 68  |gs.</pre>..<p>Th|
00000eb0  65 20 6c 69 73 74 20 6f  66 20 66 75 6e 63 74 69  |e list of functi|
00000ec0  6f 6e 73 20 6c 6f 6f 6b  73 20 6c 69 6b 65 20 74  |ons looks like t|
00000ed0  68 69 73 2e 20 54 68 65  20 6f 66 66 73 65 74 73  |his. The offsets|
00000ee0  20 61 72 65 20 66 72 6f  6d 20 74 68 65 20 73 74  | are from the st|
00000ef0  61 72 74 20 6f 66 20 74  68 65 20 6d 6f 64 75 6c  |art of the modul|
00000f00  65 2c 20 67 69 76 65 6e  20 77 68 65 6e 20 72 65  |e, given when re|
00000f10  67 69 73 74 65 72 69 6e  67 3a 0a 0a 3c 70 72 65  |gistering:..<pre|
00000f20  3e 0a 2b 30 09 46 75 6e  63 74 69 6f 6e 20 68 61  |>.+0.Function ha|
00000f30  6e 64 6c 65 2c 20 74 6f  20 62 65 20 66 69 6c 6c  |ndle, to be fill|
00000f40  65 64 20 6f 75 74 20 62  79 20 46 69 6c 65 72 0a  |ed out by Filer.|
00000f50  2b 34 09 46 75 6e 63 74  69 6f 6e 20 69 64 65 6e  |+4.Function iden|
00000f60  74 69 66 69 65 72 2c 20  6d 61 78 20 31 31 20 63  |tifier, max 11 c|
00000f70  68 61 72 73 2c 20 70 61  64 64 65 64 20 77 69 74  |hars, padded wit|
00000f80  68 20 30 27 73 20 74 6f  20 31 32 20 62 79 74 65  |h 0's to 12 byte|
00000f90  73 0a 2b 31 36 09 4f 66  66 73 65 74 20 74 6f 20  |s.+16.Offset to |
00000fa0  76 61 6c 69 64 61 74 69  6f 6e 20 63 6f 64 65 20  |validation code |
00000fb0  6f 72 20 30 20 69 66 20  6e 6f 6e 65 0a 2b 32 30  |or 0 if none.+20|
00000fc0  09 4f 66 66 73 65 74 20  74 6f 20 70 61 72 61 6d  |.Offset to param|
00000fd0  65 74 65 72 20 63 6f 64  65 20 6f 72 20 30 20 69  |eter code or 0 i|
00000fe0  66 20 6e 6f 6e 65 0a 2b  32 34 09 4f 62 6a 65 63  |f none.+24.Objec|
00000ff0  74 20 49 44 20 6f 66 20  70 61 72 61 6d 65 74 65  |t ID of paramete|
00001000  72 20 77 69 6e 64 6f 77  2e 20 4d 75 73 74 20 62  |r window. Must b|
00001010  65 20 30 20 69 6e 69 74  69 61 6c 6c 79 2c 20 61  |e 0 initially, a|
00001020  6e 64 20 77 69 6c 6c 0a  09 6c 61 74 65 72 20 62  |nd will..later b|
00001030  65 20 66 69 6c 6c 65 64  20 69 6e 20 62 79 20 74  |e filled in by t|
00001040  68 65 20 46 69 6c 65 72  2e 0a 2b 32 38 09 4f 66  |he Filer..+28.Of|
00001050  66 73 65 74 20 74 6f 20  61 63 74 69 76 61 74 69  |fset to activati|
00001060  6e 67 20 63 6f 64 65 20  6f 72 20 30 20 69 66 20  |ng code or 0 if |
00001070  6e 6f 6e 65 0a 2b 33 32  09 4f 66 66 73 65 74 20  |none.+32.Offset |
00001080  74 6f 20 75 6e 6b 6e 6f  77 6e 20 65 76 65 6e 74  |to unknown event|
00001090  20 63 6f 64 65 20 6f 72  20 30 20 69 66 20 6e 6f  | code or 0 if no|
000010a0  6e 65 0a 2b 33 36 09 4d  65 6e 75 20 6e 75 6d 62  |ne.+36.Menu numb|
000010b0  65 72 20 74 68 65 20 66  75 6e 63 74 69 6f 6e 20  |er the function |
000010c0  61 70 70 65 61 72 73 20  69 6e 2c 20 6f 72 20 32  |appears in, or 2|
000010d0  35 35 20 69 66 20 6e 6f  6e 65 0a 2b 33 37 09 46  |55 if none.+37.F|
000010e0  75 6e 63 74 69 6f 6e 20  66 6c 61 67 73 0a 09 62  |unction flags..b|
000010f0  69 74 30 09 48 61 73 20  70 61 72 61 6d 65 74 65  |it0.Has paramete|
00001100  72 20 77 69 6e 64 6f 77  0a 09 62 69 74 31 2d 37  |r window..bit1-7|
00001110  09 52 65 73 65 72 76 65  64 0a 2b 33 38 09 52 65  |.Reserved.+38.Re|
00001120  73 65 72 76 65 64 0a 2b  33 39 09 52 65 73 65 72  |served.+39.Reser|
00001130  76 65 64 0a 2b 34 30 09  53 75 67 67 65 73 74 65  |ved.+40.Suggeste|
00001140  64 20 6b 65 79 63 6f 64  65 0a 09 26 32 30 30 20  |d keycode..&200 |
00001150  69 66 20 6e 6f 6e 65 0a  09 26 32 30 34 20 69 66  |if none..&204 if|
00001160  20 6e 6f 74 20 61 6c 6c  6f 77 65 64 0a 2b 34 34  | not allowed.+44|
00001170  09 4f 66 66 73 65 74 20  74 6f 20 69 6e 69 74 69  |.Offset to initi|
00001180  61 6c 69 73 61 74 69 6f  6e 20 63 6f 64 65 20 6f  |alisation code o|
00001190  72 20 30 20 69 66 20 6e  6f 6e 65 0a 2b 34 38 09  |r 0 if none.+48.|
000011a0  4f 66 66 73 65 74 20 74  6f 20 6c 69 73 74 20 6f  |Offset to list o|
000011b0  66 20 61 64 64 74 69 6f  6e 61 6c 20 74 6f 6f 6c  |f addtional tool|
000011c0  62 6f 78 20 6f 62 6a 65  63 74 73 2c 20 6f 72 20  |box objects, or |
000011d0  30 20 69 66 20 6e 6f 6e  65 0a 2b 35 32 09 52 65  |0 if none.+52.Re|
000011e0  73 65 72 76 65 64 0a 2b  35 36 09 52 65 73 65 72  |served.+56.Reser|
000011f0  76 65 64 0a 2b 36 30 09  52 65 73 65 72 76 65 64  |ved.+60.Reserved|
00001200  0a 3c 2f 70 72 65 3e 0a  0a 3c 69 3e 4e 6f 74 65  |.</pre>..<i>Note|
00001210  73 3a 0a 3c 75 6c 3e 0a  3c 6c 69 3e 3c 62 3e 49  |s:.<ul>.<li><b>I|
00001220  64 65 6e 74 69 66 69 65  72 73 3a 3c 2f 62 3e 20  |dentifiers:</b> |
00001230  54 68 65 73 65 20 61 72  65 20 73 74 72 69 6e 67  |These are string|
00001240  73 20 6f 66 20 75 70 20  74 6f 20 31 31 20 63 68  |s of up to 11 ch|
00001250  61 72 73 2e 20 54 68 65  79 20 6e 65 65 64 20 74  |ars. They need t|
00001260  6f 20 62 65 20 75 6e 69  71 75 65 20 77 69 74 68  |o be unique with|
00001270  69 6e 20 74 68 65 20 75  74 69 6c 69 74 79 20 69  |in the utility i|
00001280  6e 20 71 75 65 73 74 69  6f 6e 2e 20 54 68 69 73  |n question. This|
00001290  20 69 6e 63 6c 75 64 65  73 20 61 6e 79 20 66 75  | includes any fu|
000012a0  74 75 72 65 20 76 65 72  73 69 6f 6e 73 20 6f 66  |ture versions of|
000012b0  20 69 74 2c 20 61 6e 64  20 74 68 61 74 20 69 73  | it, and that is|
000012c0  20 74 68 65 20 6d 61 69  6e 20 72 65 61 73 6f 6e  | the main reason|
000012d0  20 66 6f 72 20 74 68 65  20 49 44 73 2e 20 49 66  | for the IDs. If|
000012e0  20 61 20 63 68 6f 69 63  65 2f 66 75 6e 63 74 69  | a choice/functi|
000012f0  6f 6e 20 6b 65 65 70 73  20 6f 6e 20 68 61 76 69  |on keeps on havi|
00001300  6e 67 20 74 68 65 20 73  61 6d 65 20 65 66 66 65  |ng the same effe|
00001310  63 74 2c 20 79 6f 75 20  73 68 6f 75 6c 64 20 6b  |ct, you should k|
00001320  65 65 70 20 75 73 69 6e  67 20 74 68 65 20 73 61  |eep using the sa|
00001330  6d 65 20 49 44 2e 20 54  68 69 73 20 77 69 6c 6c  |me ID. This will|
00001340  20 65 6e 73 75 72 65 20  74 68 61 74 20 74 68 65  | ensure that the|
00001350  20 75 73 65 72 27 73 20  73 65 74 74 69 6e 67 73  | user's settings|
00001360  20 61 72 65 20 73 74 69  6c 6c 20 63 6f 6e 73 69  | are still consi|
00001370  64 65 72 65 64 20 76 61  6c 69 64 2e 20 49 66 2c  |dered valid. If,|
00001380  20 68 6f 77 65 76 65 72  2c 20 61 20 63 68 6f 69  | however, a choi|
00001390  63 65 2f 66 75 6e 63 74  69 6f 6e 20 63 68 61 6e  |ce/function chan|
000013a0  67 65 73 20 65 66 66 65  63 74 20 73 69 67 6e 69  |ges effect signi|
000013b0  66 69 63 61 6e 74 6c 79  2c 20 79 6f 75 20 73 68  |ficantly, you sh|
000013c0  6f 75 6c 64 20 61 6c 73  6f 20 75 73 65 20 61 20  |ould also use a |
000013d0  6e 65 77 20 49 44 20 66  6f 72 20 69 74 2e 20 54  |new ID for it. T|
000013e0  68 65 20 75 73 65 72 27  73 20 70 72 65 76 69 6f  |he user's previo|
000013f0  75 73 20 73 65 74 74 69  6e 67 20 69 73 20 74 68  |us setting is th|
00001400  65 6e 20 64 69 73 63 61  72 64 65 64 20 66 6f 72  |en discarded for|
00001410  20 74 68 61 74 20 63 68  6f 69 63 65 2f 66 75 6e  | that choice/fun|
00001420  63 74 69 6f 6e 2c 20 61  6e 64 20 74 68 65 20 64  |ction, and the d|
00001430  65 66 61 75 6c 74 20 76  61 6c 75 65 20 69 73 20  |efault value is |
00001440  75 73 65 64 2e 0a 3c 6c  69 3e 54 68 65 20 46 75  |used..<li>The Fu|
00001450  6c 6c 20 49 44 20 6f 66  20 61 20 66 75 6e 63 74  |ll ID of a funct|
00001460  69 6f 6e 20 69 73 20 22  55 74 69 6c 49 44 5f 46  |ion is "UtilID_F|
00001470  75 6e 63 49 44 22 2e 0a  3c 6c 69 3e 54 68 65 20  |uncID"..<li>The |
00001480  73 75 67 67 65 73 74 65  64 20 6b 65 79 20 63 6f  |suggested key co|
00001490  64 65 20 69 73 20 75 73  65 64 20 61 73 20 64 65  |de is used as de|
000014a0  66 61 75 6c 74 20 76 61  6c 75 65 20 69 66 20 69  |fault value if i|
000014b0  74 20 69 73 6e 27 74 20  75 73 65 64 20 61 6c 72  |t isn't used alr|
000014c0  65 61 64 79 20 66 6f 72  20 61 6e 6f 74 68 65 72  |eady for another|
000014d0  20 66 75 6e 63 74 69 6f  6e 2e 0a 3c 6c 69 3e 54  | function..<li>T|
000014e0  68 65 20 4d 65 73 73 61  67 65 73 20 66 69 6c 65  |he Messages file|
000014f0  20 63 6f 6e 74 61 69 6e  73 20 61 20 64 65 73 63  | contains a desc|
00001500  72 69 70 74 69 6f 6e 20  6f 66 20 77 68 61 74 20  |ription of what |
00001510  68 61 70 70 65 6e 73 20  77 68 65 6e 20 74 68 65  |happens when the|
00001520  20 6b 65 79 20 73 68 6f  72 74 63 75 74 20 69 73  | key shortcut is|
00001530  20 70 72 65 73 73 65 64  2e 20 54 68 69 73 20 73  | pressed. This s|
00001540  68 6f 75 6c 64 20 62 65  20 73 68 6f 72 74 20 61  |hould be short a|
00001550  6e 64 20 74 6f 20 74 68  65 20 70 6f 69 6e 74 2c  |nd to the point,|
00001560  20 65 2e 67 2e 20 22 4f  70 65 6e 20 27 43 6f 70  | e.g. "Open 'Cop|
00001570  79 27 22 2e 20 54 68 65  20 74 6f 6b 65 6e 20 3c  |y'". The token <|
00001580  73 61 6d 70 3e 4b 5f 26  6c 74 3b 75 74 69 6c 26  |samp>K_&lt;util&|
00001590  67 74 3b 5f 26 6c 74 3b  66 75 6e 63 74 69 6f 6e  |gt;_&lt;function|
000015a0  26 67 74 3b 3c 2f 73 61  6d 70 3e 20 69 73 20 73  |&gt;</samp> is s|
000015b0  65 61 72 63 68 65 64 20  66 6f 72 2e 0a 3c 6c 69  |earched for..<li|
000015c0  3e 54 68 65 72 65 20 6d  61 79 20 61 6c 73 6f 20  |>There may also |
000015d0  62 65 20 61 6e 20 3c 73  61 6d 70 3e 4d 5f 26 6c  |be an <samp>M_&l|
000015e0  74 3b 75 74 69 6c 26 67  74 3b 5f 26 6c 74 3b 66  |t;util&gt;_&lt;f|
000015f0  75 6e 63 74 69 6f 6e 26  67 74 3b 3c 2f 73 61 6d  |unction&gt;</sam|
00001600  70 3e 20 74 65 78 74 20  69 6e 20 74 68 65 20 4d  |p> text in the M|
00001610  65 73 73 61 67 65 73 20  66 69 6c 65 2e 20 54 68  |essages file. Th|
00001620  69 73 20 69 73 20 75 73  65 64 20 66 6f 72 20 74  |is is used for t|
00001630  68 65 20 6d 65 6e 75 20  65 6e 74 72 79 20 69 66  |he menu entry if|
00001640  20 69 74 20 65 78 69 73  74 73 2e 20 49 66 20 6e  | it exists. If n|
00001650  6f 74 2c 20 74 68 65 20  66 75 6e 63 74 69 6f 6e  |ot, the function|
00001660  20 49 44 20 69 73 20 75  73 65 64 2e 0a 3c 6c 69  | ID is used..<li|
00001670  3e 54 68 65 20 53 43 4d  20 21 43 68 6f 69 63 65  |>The SCM !Choice|
00001680  73 20 66 69 6c 65 20 69  73 20 65 71 75 69 76 61  |s file is equiva|
00001690  6c 65 6e 74 20 74 6f 20  74 68 65 20 53 43 4d 20  |lent to the SCM |
000016a0  63 68 6f 69 63 65 73 20  6c 69 73 74 20 64 65 73  |choices list des|
000016b0  63 72 69 62 65 64 20 61  62 6f 76 65 2e 20 41 6c  |cribed above. Al|
000016c0  6c 20 74 68 65 20 6f 66  66 73 65 74 73 20 61 72  |l the offsets ar|
000016d0  65 20 66 72 6f 6d 20 74  68 65 20 73 74 61 72 74  |e from the start|
000016e0  20 6f 66 20 74 68 65 20  66 69 6c 65 2e 0a 3c 2f  | of the file..</|
000016f0  75 6c 3e 3c 2f 69 3e 0a  0a 3c 68 33 3e 49 6e 69  |ul></i>..<h3>Ini|
00001700  74 69 61 6c 69 73 61 74  69 6f 6e 20 63 6f 64 65  |tialisation code|
00001710  3c 2f 68 33 3e 0a 43 61  6c 6c 65 64 20 74 6f 20  |</h3>.Called to |
00001720  69 6e 69 74 69 61 6c 69  73 65 20 74 68 65 20 66  |initialise the f|
00001730  75 6e 63 74 69 6f 6e 2e  20 49 66 20 74 68 65 20  |unction. If the |
00001740  66 75 6e 63 74 69 6f 6e  20 68 61 73 20 61 20 70  |function has a p|
00001750  61 72 61 6d 65 74 65 72  20 77 69 6e 64 6f 77 2c  |arameter window,|
00001760  20 69 74 20 73 68 6f 75  6c 64 20 62 65 20 63 72  | it should be cr|
00001770  65 61 74 65 64 2c 20 61  6e 64 20 69 74 73 20 49  |eated, and its I|
00001780  44 20 72 65 74 75 72 6e  65 64 2e 20 54 68 65 20  |D returned. The |
00001790  77 69 6e 64 6f 77 20 77  69 6c 6c 20 75 73 75 61  |window will usua|
000017a0  6c 6c 79 20 63 6f 6e 74  61 69 6e 20 61 6e 20 4f  |lly contain an O|
000017b0  4b 20 62 75 74 74 6f 6e  20 6f 72 20 73 69 6d 69  |K button or simi|
000017c0  6c 61 72 2c 20 61 6e 64  20 74 68 69 73 20 67 61  |lar, and this ga|
000017d0  64 67 65 74 20 73 68 6f  75 6c 64 20 62 65 20 73  |dget should be s|
000017e0  65 74 20 75 70 20 74 6f  20 72 65 74 75 72 6e 20  |et up to return |
000017f0  74 68 65 20 65 76 65 6e  74 20 67 69 76 65 6e 20  |the event given |
00001800  69 6e 20 52 30 2e 0a 42  65 66 6f 72 65 20 74 68  |in R0..Before th|
00001810  69 73 20 65 6e 74 72 79  20 69 73 20 63 61 6c 6c  |is entry is call|
00001820  65 64 2c 20 74 68 65 20  46 69 6c 65 72 20 77 69  |ed, the Filer wi|
00001830  6c 6c 20 68 61 76 65 20  6c 6f 61 64 65 64 20 74  |ll have loaded t|
00001840  68 65 20 27 52 65 73 27  20 66 69 6c 65 20 69 6e  |he 'Res' file in|
00001850  20 74 68 65 20 75 74 69  6c 69 74 79 20 64 69 72  | the utility dir|
00001860  65 63 74 6f 72 79 20 69  66 20 70 72 65 73 65 6e  |ectory if presen|
00001870  74 2e 0a 3c 70 72 65 3e  4f 6e 20 65 6e 74 72 79  |t..<pre>On entry|
00001880  0a 52 30 09 41 63 74 69  76 61 74 65 20 65 76 65  |.R0.Activate eve|
00001890  6e 74 0a 52 31 31 09 42  61 73 65 20 6f 66 20 73  |nt.R11.Base of s|
000018a0  65 72 76 69 63 65 20 65  6e 74 72 69 65 73 2c 20  |ervice entries, |
000018b0  73 65 65 20 62 65 6c 6f  77 0a 4f 6e 20 65 78 69  |see below.On exi|
000018c0  74 0a 52 31 09 49 44 20  6f 66 20 70 61 72 61 6d  |t.R1.ID of param|
000018d0  65 74 65 72 20 77 69 6e  64 6f 77 2c 20 6f 72 20  |eter window, or |
000018e0  30 20 69 66 20 6e 6f 6e  65 0a 52 31 32 09 50 72  |0 if none.R12.Pr|
000018f0  65 73 65 72 76 65 64 0a  3c 2f 70 72 65 3e 0a 0a  |eserved.</pre>..|
00001900  3c 68 33 3e 56 61 6c 69  64 61 74 69 6f 6e 20 63  |<h3>Validation c|
00001910  6f 64 65 3c 2f 68 33 3e  0a 43 61 6c 6c 65 64 20  |ode</h3>.Called |
00001920  74 6f 20 76 61 6c 69 64  61 74 65 20 74 68 65 20  |to validate the |
00001930  66 75 6e 63 74 69 6f 6e  2e 20 4e 6f 6e 65 20 6f  |function. None o|
00001940  66 20 74 68 65 20 6f 74  68 65 72 20 65 6e 74 72  |f the other entr|
00001950  69 65 73 20 77 69 6c 6c  20 62 65 20 63 61 6c 6c  |ies will be call|
00001960  65 64 2c 20 69 66 20 74  68 69 73 20 63 6f 64 65  |ed, if this code|
00001970  20 72 65 74 75 72 6e 73  20 27 69 6e 76 61 6c 69  | returns 'invali|
00001980  64 27 2e 20 49 66 20 6e  6f 20 63 6f 64 65 20 65  |d'. If no code e|
00001990  78 69 73 74 73 2c 20 74  68 65 20 6f 74 68 65 72  |xists, the other|
000019a0  20 65 6e 74 72 69 65 73  20 61 72 65 20 63 6f 6e  | entries are con|
000019b0  73 69 64 65 72 65 64 20  76 61 6c 69 64 2e 0a 3c  |sidered valid..<|
000019c0  70 72 65 3e 4f 6e 20 65  6e 74 72 79 0a 52 30 09  |pre>On entry.R0.|
000019d0  4e 75 6d 62 65 72 20 6f  66 20 6f 62 6a 65 63 74  |Number of object|
000019e0  73 20 73 65 6c 65 63 74  65 64 0a 52 31 09 30 0a  |s selected.R1.0.|
000019f0  52 32 09 2d 3e 56 69 65  77 65 72 0a 52 31 31 09  |R2.->Viewer.R11.|
00001a00  42 61 73 65 20 6f 66 20  73 65 72 76 69 63 65 20  |Base of service |
00001a10  65 6e 74 72 69 65 73 2c  20 73 65 65 20 62 65 6c  |entries, see bel|
00001a20  6f 77 0a 4f 6e 20 65 78  69 74 0a 52 31 09 62 69  |ow.On exit.R1.bi|
00001a30  74 30 09 49 6e 76 61 6c  69 64 20 2d 20 73 68 61  |t0.Invalid - sha|
00001a40  64 65 64 0a 09 62 69 74  31 09 54 69 63 6b 65 64  |ded..bit1.Ticked|
00001a50  0a 09 62 69 74 32 2d 33  31 09 52 65 73 65 72 76  |..bit2-31.Reserv|
00001a60  65 64 2c 20 6d 75 73 74  20 62 65 20 30 0a 52 31  |ed, must be 0.R1|
00001a70  32 09 50 72 65 73 65 72  76 65 64 0a 3c 2f 70 72  |2.Preserved.</pr|
00001a80  65 3e 0a 0a 3c 68 33 3e  50 61 72 61 6d 65 74 65  |e>..<h3>Paramete|
00001a90  72 20 63 6f 64 65 3c 2f  68 33 3e 0a 43 61 6c 6c  |r code</h3>.Call|
00001aa0  65 64 20 6a 75 73 74 20  62 65 66 6f 72 65 20 74  |ed just before t|
00001ab0  68 65 20 70 61 72 61 6d  65 74 65 72 20 77 69 6e  |he parameter win|
00001ac0  64 6f 77 20 69 73 20 6f  70 65 6e 65 64 2c 20 65  |dow is opened, e|
00001ad0  69 74 68 65 72 20 62 65  63 61 75 73 65 20 74 68  |ither because th|
00001ae0  65 20 73 75 62 6d 65 6e  75 20 61 72 72 6f 77 20  |e submenu arrow |
00001af0  69 73 20 66 6f 6c 6c 6f  77 65 64 2c 20 6f 72 20  |is followed, or |
00001b00  77 68 65 6e 20 74 68 65  20 6b 65 79 20 73 68 6f  |when the key sho|
00001b10  72 74 63 75 74 20 66 6f  72 20 61 20 66 75 6e 63  |rtcut for a func|
00001b20  74 69 6f 6e 20 77 69 74  68 20 70 61 72 61 6d 65  |tion with parame|
00001b30  74 72 65 73 20 69 73 20  70 72 65 73 73 65 64 2e  |tres is pressed.|
00001b40  20 54 68 65 20 66 75 6e  63 74 69 6f 6e 20 63 61  | The function ca|
00001b50  6e 20 73 65 74 20 75 70  20 74 68 65 20 69 63 6f  |n set up the ico|
00001b60  6e 73 20 69 6e 20 74 68  65 20 77 69 6e 64 6f 77  |ns in the window|
00001b70  20 61 63 63 6f 72 64 69  6e 67 20 74 6f 20 74 68  | according to th|
00001b80  65 20 63 75 72 72 65 6e  74 20 73 65 6c 65 63 74  |e current select|
00001b90  69 6f 6e 2e 0a 3c 70 72  65 3e 4f 6e 20 65 6e 74  |ion..<pre>On ent|
00001ba0  72 79 0a 52 30 09 4e 75  6d 62 65 72 20 6f 66 20  |ry.R0.Number of |
00001bb0  6f 62 6a 65 63 74 73 20  73 65 6c 65 63 74 65 64  |objects selected|
00001bc0  0a 52 31 09 49 44 20 6f  66 20 70 61 72 61 6d 65  |.R1.ID of parame|
00001bd0  74 65 72 20 77 69 6e 64  6f 77 20 61 73 20 72 65  |ter window as re|
00001be0  74 75 72 6e 65 64 20 66  72 6f 6d 20 69 6e 69 74  |turned from init|
00001bf0  20 63 6f 64 65 0a 52 32  09 2d 3e 56 69 65 77 65  | code.R2.->Viewe|
00001c00  72 0a 52 31 31 09 42 61  73 65 20 6f 66 20 73 65  |r.R11.Base of se|
00001c10  72 76 69 63 65 20 65 6e  74 72 69 65 73 2c 20 73  |rvice entries, s|
00001c20  65 65 20 62 65 6c 6f 77  0a 4f 6e 20 65 78 69 74  |ee below.On exit|
00001c30  0a 52 31 32 09 50 72 65  73 65 72 76 65 64 0a 3c  |.R12.Preserved.<|
00001c40  2f 70 72 65 3e 0a 0a 3c  68 33 3e 41 63 74 69 76  |/pre>..<h3>Activ|
00001c50  61 74 65 20 63 6f 64 65  3c 2f 68 33 3e 0a 43 61  |ate code</h3>.Ca|
00001c60  6c 6c 65 64 20 77 68 65  6e 20 74 68 65 20 66 75  |lled when the fu|
00001c70  6e 63 74 69 6f 6e 20 69  73 20 61 63 74 69 76 61  |nction is activa|
00001c80  74 65 64 2c 20 69 6e 20  6f 6e 65 20 6f 66 20 33  |ted, in one of 3|
00001c90  20 77 61 79 73 3a 0a 3c  62 72 3e 31 2e 20 53 65  | ways:.<br>1. Se|
00001ca0  6c 65 63 74 69 6e 67 20  69 74 73 20 6d 65 6e 75  |lecting its menu|
00001cb0  20 65 6e 74 72 79 20 69  66 20 74 68 65 72 65 20  | entry if there |
00001cc0  69 73 20 6e 6f 20 70 61  72 61 6d 65 74 65 72 20  |is no parameter |
00001cd0  77 69 6e 64 6f 77 2e 0a  3c 62 72 3e 32 2e 20 4d  |window..<br>2. M|
00001ce0  61 6b 69 6e 67 20 74 68  65 20 70 61 72 61 6d 65  |aking the parame|
00001cf0  74 65 72 20 77 69 6e 64  6f 77 20 67 65 6e 65 72  |ter window gener|
00001d00  61 74 65 20 74 68 65 20  61 63 74 69 76 61 74 65  |ate the activate|
00001d10  20 65 76 65 6e 74 20 28  75 73 75 61 6c 6c 79 20  | event (usually |
00001d20  62 79 20 63 6c 69 63 6b  69 6e 67 20 61 6e 20 4f  |by clicking an O|
00001d30  4b 20 62 75 74 74 6f 6e  29 2e 0a 3c 62 72 3e 33  |K button)..<br>3|
00001d40  2e 20 50 72 65 73 73 69  6e 67 20 74 68 65 20 6b  |. Pressing the k|
00001d50  65 79 20 73 68 6f 72 74  63 75 74 20 69 66 20 74  |ey shortcut if t|
00001d60  68 65 72 65 20 69 73 20  6e 6f 20 70 61 72 61 6d  |here is no param|
00001d70  65 74 65 72 20 77 69 6e  64 6f 77 2e 0a 3c 70 72  |eter window..<pr|
00001d80  65 3e 4f 6e 20 65 6e 74  72 79 0a 52 30 09 4e 75  |e>On entry.R0.Nu|
00001d90  6d 62 65 72 20 6f 66 20  6f 62 6a 65 63 74 73 20  |mber of objects |
00001da0  73 65 6c 65 63 74 65 64  0a 52 31 09 49 44 20 6f  |selected.R1.ID o|
00001db0  66 20 70 61 72 61 6d 65  74 65 72 20 77 69 6e 64  |f parameter wind|
00001dc0  6f 77 20 61 73 20 72 65  74 75 72 6e 65 64 20 66  |ow as returned f|
00001dd0  72 6f 6d 20 69 6e 69 74  20 63 6f 64 65 0a 52 32  |rom init code.R2|
00001de0  09 2d 3e 56 69 65 77 65  72 0a 52 31 31 09 42 61  |.->Viewer.R11.Ba|
00001df0  73 65 20 6f 66 20 73 65  72 76 69 63 65 20 65 6e  |se of service en|
00001e00  74 72 69 65 73 2c 20 73  65 65 20 62 65 6c 6f 77  |tries, see below|
00001e10  0a 4f 6e 20 65 78 69 74  0a 52 31 32 09 50 72 65  |.On exit.R12.Pre|
00001e20  73 65 72 76 65 64 0a 3c  2f 70 72 65 3e 0a 0a 3c  |served.</pre>..<|
00001e30  68 33 3e 55 6e 6b 6e 6f  77 6e 20 65 76 65 6e 74  |h3>Unknown event|
00001e40  20 63 6f 64 65 3c 2f 68  33 3e 0a 43 61 6c 6c 65  | code</h3>.Calle|
00001e50  64 20 77 68 65 6e 20 72  65 63 65 69 76 69 6e 67  |d when receiving|
00001e60  20 61 6e 20 75 6e 6b 6e  6f 77 6e 20 74 6f 6f 6c  | an unknown tool|
00001e70  62 6f 78 20 65 76 65 6e  74 20 66 72 6f 6d 20 74  |box event from t|
00001e80  68 65 20 66 75 6e 63 74  69 6f 6e 27 73 20 70 61  |he function's pa|
00001e90  72 61 6d 65 74 65 72 20  77 69 6e 64 6f 77 2e 20  |rameter window. |
00001ea0  45 76 65 6e 74 73 20 66  72 6f 6d 20 26 46 46 30  |Events from &FF0|
00001eb0  30 20 74 6f 20 26 46 46  46 46 20 61 72 65 20 72  |0 to &FFFF are r|
00001ec0  65 73 65 72 76 65 64 20  66 6f 72 20 65 78 74 65  |eserved for exte|
00001ed0  72 6e 61 6c 20 75 74 69  6c 69 74 69 65 73 2e 20  |rnal utilities. |
00001ee0  59 6f 75 20 63 61 6e 20  6d 61 6b 65 20 79 6f 75  |You can make you|
00001ef0  72 20 77 69 6e 64 6f 77  20 67 65 6e 65 72 61 74  |r window generat|
00001f00  65 20 74 68 65 73 65 20  65 76 65 6e 74 73 2c 20  |e these events, |
00001f10  61 6e 64 20 74 68 69 73  20 65 6e 74 72 79 20 77  |and this entry w|
00001f20  69 6c 6c 20 62 65 20 63  61 6c 6c 65 64 2e 20 49  |ill be called. I|
00001f30  66 20 61 6e 79 20 6f 74  68 65 72 20 65 76 65 6e  |f any other even|
00001f40  74 20 61 62 6f 76 65 20  26 46 46 46 46 20 28 69  |t above &FFFF (i|
00001f50  2e 65 2e 20 74 68 65 20  74 6f 6f 6c 62 6f 78 20  |.e. the toolbox |
00001f60  65 76 65 6e 74 73 29 20  61 72 65 20 72 65 63 65  |events) are rece|
00001f70  69 76 65 64 2c 20 69 74  20 77 69 6c 6c 20 61 6c  |ived, it will al|
00001f80  73 6f 20 62 65 20 70 61  73 73 65 64 20 6f 6e 20  |so be passed on |
00001f90  74 6f 20 79 6f 75 20 69  66 20 69 74 20 63 6f 6d  |to you if it com|
00001fa0  65 73 20 66 72 6f 6d 20  79 6f 75 72 20 77 69 6e  |es from your win|
00001fb0  64 6f 77 2e 0a 49 66 20  79 6f 75 20 6e 65 65 64  |dow..If you need|
00001fc0  20 74 6f 20 72 65 63 65  69 76 65 20 65 76 65 6e  | to receive even|
00001fd0  74 73 20 66 72 6f 6d 20  6f 74 68 65 72 20 77 69  |ts from other wi|
00001fe0  6e 64 6f 77 73 20 79 6f  75 20 6d 61 79 20 68 61  |ndows you may ha|
00001ff0  76 65 20 63 72 65 61 74  65 64 2c 20 79 6f 75 20  |ve created, you |
00002000  63 61 6e 20 70 75 74 20  74 68 65 20 61 70 70 72  |can put the appr|
00002010  6f 70 72 69 61 74 65 20  49 44 73 20 69 6e 74 6f  |opriate IDs into|
00002020  20 61 20 6c 69 73 74 2e  20 54 68 65 20 6c 69 73  | a list. The lis|
00002030  74 20 73 68 6f 75 6c 64  20 65 6e 64 20 77 69 74  |t should end wit|
00002040  68 20 61 20 30 20 77 6f  72 64 2e 0a 3c 70 72 65  |h a 0 word..<pre|
00002050  3e 4f 6e 20 65 6e 74 72  79 0a 52 30 09 4e 75 6d  |>On entry.R0.Num|
00002060  62 65 72 20 6f 66 20 6f  62 6a 65 63 74 73 20 73  |ber of objects s|
00002070  65 6c 65 63 74 65 64 0a  52 31 09 45 76 65 6e 74  |elected.R1.Event|
00002080  20 72 65 6c 61 74 65 64  20 6f 62 6a 65 63 74 20  | related object |
00002090  49 44 0a 52 32 09 2d 3e  56 69 65 77 65 72 0a 52  |ID.R2.->Viewer.R|
000020a0  33 09 45 76 65 6e 74 20  63 6f 64 65 0a 52 35 09  |3.Event code.R5.|
000020b0  2d 3e 45 76 65 6e 74 20  62 6c 6f 63 6b 0a 52 36  |->Event block.R6|
000020c0  09 45 76 65 6e 74 20 72  65 6c 61 74 65 64 20 63  |.Event related c|
000020d0  6f 6d 70 6f 6e 65 6e 74  20 49 44 0a 52 31 31 09  |omponent ID.R11.|
000020e0  42 61 73 65 20 6f 66 20  73 65 72 76 69 63 65 20  |Base of service |
000020f0  65 6e 74 72 69 65 73 2c  20 73 65 65 20 62 65 6c  |entries, see bel|
00002100  6f 77 0a 4f 6e 20 65 78  69 74 0a 52 31 32 09 50  |ow.On exit.R12.P|
00002110  72 65 73 65 72 76 65 64  0a 3c 2f 70 72 65 3e 0a  |reserved.</pre>.|
00002120  0a 3c 68 32 3e 53 65 72  76 69 63 65 20 65 6e 74  |.<h2>Service ent|
00002130  72 69 65 73 3c 2f 68 32  3e 0a 53 65 72 76 69 63  |ries</h2>.Servic|
00002140  65 20 65 6e 74 72 69 65  73 20 61 72 65 20 6a 75  |e entries are ju|
00002150  73 74 20 75 73 65 66 75  6c 20 72 6f 75 74 69 6e  |st useful routin|
00002160  65 73 20 69 6e 20 74 68  65 20 46 69 6c 65 72 2c  |es in the Filer,|
00002170  20 74 68 61 74 20 6d 61  79 20 62 65 20 75 73 65  | that may be use|
00002180  64 20 62 79 20 74 68 65  20 66 75 6e 63 74 69 6f  |d by the functio|
00002190  6e 20 63 6f 64 65 2e 20  54 68 65 73 65 20 72 6f  |n code. These ro|
000021a0  75 74 69 6e 65 73 20 63  6f 75 6c 64 20 68 61 76  |utines could hav|
000021b0  65 20 62 65 65 6e 20 53  57 49 73 2c 20 62 75 74  |e been SWIs, but|
000021c0  20 61 72 65 6e 27 74 20  66 6f 72 20 73 65 76 65  | aren't for seve|
000021d0  72 61 6c 20 72 65 61 73  6f 6e 73 3a 0a 3c 75 6c  |ral reasons:.<ul|
000021e0  3e 0a 3c 6c 69 3e 54 68  65 72 65 20 69 73 20 61  |>.<li>There is a|
000021f0  6c 6d 6f 73 74 20 6e 6f  20 6f 76 65 72 68 65 61  |lmost no overhea|
00002200  64 20 77 68 65 6e 20 63  61 6c 6c 69 6e 67 20 74  |d when calling t|
00002210  68 65 20 72 6f 75 74 69  6e 65 73 20 74 68 69 73  |he routines this|
00002220  20 77 61 79 2e 0a 3c 6c  69 3e 54 68 65 72 65 20  | way..<li>There |
00002230  77 69 6c 6c 20 62 65 20  6d 61 6e 79 20 6f 66 20  |will be many of |
00002240  74 68 65 73 65 2c 20 61  6e 64 20 69 74 20 77 6f  |these, and it wo|
00002250  75 6c 64 20 72 65 71 75  69 72 65 20 73 65 76 65  |uld require seve|
00002260  72 61 6c 20 53 57 49 20  63 68 75 6e 6b 73 2e 0a  |ral SWI chunks..|
00002270  3c 6c 69 3e 49 74 20 69  73 20 6d 75 63 68 20 65  |<li>It is much e|
00002280  61 73 69 65 72 20 74 6f  20 72 65 74 61 69 6e 20  |asier to retain |
00002290  62 61 63 6b 77 61 72 64  73 20 63 6f 6d 70 61 74  |backwards compat|
000022a0  69 62 69 6c 69 74 79 20  69 66 20 61 20 72 6f 75  |ibility if a rou|
000022b0  74 69 6e 65 20 69 73 20  6c 61 74 65 72 20 77 69  |tine is later wi|
000022c0  74 68 64 72 61 77 6e 20  6f 72 20 72 65 70 6c 61  |thdrawn or repla|
000022d0  63 65 64 2e 0a 3c 2f 75  6c 3e 0a 57 68 65 6e 20  |ced..</ul>.When |
000022e0  63 61 6c 6c 69 6e 67 20  6f 6e 65 20 6f 66 20 74  |calling one of t|
000022f0  68 65 73 65 20 72 6f 75  74 69 6e 65 73 2c 20 79  |hese routines, y|
00002300  6f 75 20 73 68 6f 75 6c  64 20 75 73 65 20 46 4e  |ou should use FN|
00002310  63 61 6c 6c 20 69 6e 20  45 78 74 4c 69 62 2e 20  |call in ExtLib. |
00002320  49 66 20 79 6f 75 20 61  72 65 6e 27 74 20 75 73  |If you aren't us|
00002330  69 6e 67 20 74 68 65 20  42 61 73 69 63 20 41 73  |ing the Basic As|
00002340  73 65 6d 62 6c 65 72 2c  20 73 69 6d 70 6c 79 20  |sembler, simply |
00002350  64 6f 20 74 68 65 20 65  71 75 69 76 61 6c 65 6e  |do the equivalen|
00002360  74 20 6f 66 20 74 68 69  73 3a 0a 3c 70 72 65 3e  |t of this:.<pre>|
00002370  41 44 52 20 52 31 34 2c  72 65 74 75 72 6e 0a 41  |ADR R14,return.A|
00002380  44 44 20 50 43 2c 52 31  31 2c 23 53 45 2a 34 0a  |DD PC,R11,#SE*4.|
00002390  2e 72 65 74 75 72 6e 0a  3c 2f 70 72 65 3e 0a 53  |.return.</pre>.S|
000023a0  45 20 69 73 20 74 68 65  20 72 6f 75 74 69 6e 65  |E is the routine|
000023b0  20 6e 75 6d 62 65 72 2c  20 61 6e 64 20 74 68 65  | number, and the|
000023c0  79 20 61 72 65 20 64 65  66 69 6e 65 64 20 61 73  |y are defined as|
000023d0  20 76 61 72 69 61 62 6c  65 73 20 69 6e 20 45 78  | variables in Ex|
000023e0  74 4c 69 62 2e 0a 3c 62  72 3e 54 68 65 20 63 75  |tLib..<br>The cu|
000023f0  72 72 65 6e 74 6c 79 20  64 65 66 69 6e 65 64 20  |rrently defined |
00002400  72 6f 75 74 69 6e 65 73  20 61 72 65 3a 0a 0a 3c  |routines are:..<|
00002410  68 33 3e 53 45 5f 47 65  74 53 65 6c 65 63 74 65  |h3>SE_GetSelecte|
00002420  64 3c 2f 68 33 3e 0a 3c  70 72 65 3e 4f 6e 20 65  |d</h3>.<pre>On e|
00002430  6e 74 72 79 3a 0a 52 32  09 2d 3e 56 69 65 77 65  |ntry:.R2.->Viewe|
00002440  72 0a 52 33 09 50 72 65  73 65 72 76 65 64 20 66  |r.R3.Preserved f|
00002450  72 6f 6d 20 6c 61 73 74  20 63 61 6c 6c 2c 20 6f  |rom last call, o|
00002460  72 20 30 20 74 6f 20 73  74 61 72 74 0a 4f 6e 20  |r 0 to start.On |
00002470  65 78 69 74 3a 0a 52 33  09 4e 65 78 74 20 73 65  |exit:.R3.Next se|
00002480  6c 65 63 74 65 64 20 6f  62 6a 65 63 74 20 28 30  |lected object (0|
00002490  20 69 66 20 6e 6f 6e 65  29 0a 3c 2f 70 72 65 3e  | if none).</pre>|
000024a0  0a 54 68 69 73 20 72 6f  75 74 69 6e 65 20 69 73  |.This routine is|
000024b0  20 75 73 65 64 20 74 6f  20 66 69 6e 64 20 6f 75  | used to find ou|
000024c0  74 20 77 68 61 74 20 6f  62 6a 65 63 74 73 20 61  |t what objects a|
000024d0  72 65 20 73 65 6c 65 63  74 65 64 2e 20 54 68 69  |re selected. Thi|
000024e0  73 20 72 6f 75 74 69 6e  65 2c 20 61 6e 64 20 53  |s routine, and S|
000024f0  45 5f 53 63 61 6e 53 65  6c 65 63 74 69 6f 6e 20  |E_ScanSelection |
00002500  61 72 65 20 74 68 65 20  74 77 6f 20 6d 61 69 6e  |are the two main|
00002510  20 77 61 79 73 20 6f 66  20 64 65 63 69 64 69 6e  | ways of decidin|
00002520  67 20 77 68 61 74 20 6f  62 6a 65 63 74 73 20 74  |g what objects t|
00002530  6f 20 6f 70 65 72 61 74  65 20 6f 6e 2e 0a 0a 3c  |o operate on...<|
00002540  68 33 3e 53 45 5f 53 63  61 6e 53 65 6c 65 63 74  |h3>SE_ScanSelect|
00002550  69 6f 6e 3c 2f 68 33 3e  0a 3c 70 72 65 3e 4f 6e  |ion</h3>.<pre>On|
00002560  20 65 6e 74 72 79 3a 0a  52 32 09 2d 3e 56 69 65  | entry:.R2.->Vie|
00002570  77 65 72 0a 52 33 09 52  65 63 75 72 73 65 20 6d  |wer.R3.Recurse m|
00002580  6f 64 65 0a 09 30 09 4e  6f 20 72 65 63 75 72 73  |ode..0.No recurs|
00002590  69 6f 6e 0a 09 31 09 2a  52 65 73 65 72 76 65 64  |ion..1.*Reserved|
000025a0  2a 0a 09 32 09 52 65 63  75 72 73 65 20 69 6e 74  |*..2.Recurse int|
000025b0  6f 20 64 69 72 65 63 74  6f 72 69 65 73 0a 09 33  |o directories..3|
000025c0  09 52 65 63 75 72 73 65  20 69 6e 74 6f 20 64 69  |.Recurse into di|
000025d0  72 65 63 74 6f 72 69 65  73 20 61 6e 64 20 69 6d  |rectories and im|
000025e0  61 67 65 20 66 69 6c 65  73 0a 52 34 09 41 64 64  |age files.R4.Add|
000025f0  72 65 73 73 20 6f 66 20  72 6f 75 74 69 6e 65 20  |ress of routine |
00002600  74 6f 20 63 61 6c 6c 20  66 6f 72 20 65 61 63 68  |to call for each|
00002610  20 6f 62 6a 65 63 74 0a  52 35 09 56 61 6c 75 65  | object.R5.Value|
00002620  20 6f 66 20 52 31 32 20  77 68 65 6e 20 72 6f 75  | of R12 when rou|
00002630  74 69 6e 65 20 69 73 20  63 61 6c 6c 65 64 0a 0a  |tine is called..|
00002640  52 6f 75 74 69 6e 65 20  77 69 6c 6c 20 62 65 20  |Routine will be |
00002650  63 61 6c 6c 65 64 20 77  69 74 68 3a 0a 52 31 09  |called with:.R1.|
00002660  2d 3e 46 75 6c 6c 20 70  61 74 68 6e 61 6d 65 20  |->Full pathname |
00002670  6f 66 20 6f 62 6a 65 63  74 0a 52 31 32 09 52 35  |of object.R12.R5|
00002680  20 6f 6e 20 65 6e 74 72  79 0a 52 31 34 09 52 65  | on entry.R14.Re|
00002690  74 75 72 6e 20 61 64 64  72 65 73 73 20 28 6e 6f  |turn address (no|
000026a0  20 66 6c 61 67 73 29 0a  52 30 2d 52 37 2c 52 31  | flags).R0-R7,R1|
000026b0  32 2c 52 31 34 20 6d 61  79 20 62 65 20 63 6f 72  |2,R14 may be cor|
000026c0  72 75 70 74 65 64 2c 20  56 20 6d 61 79 20 62 65  |rupted, V may be|
000026d0  20 73 65 74 20 69 66 20  61 6e 20 65 72 72 6f 72  | set if an error|
000026e0  20 6f 63 63 75 72 73 0a  3c 2f 70 72 65 3e 0a 46  | occurs.</pre>.F|
000026f0  6f 72 20 65 61 63 68 20  73 65 6c 65 63 74 65 64  |or each selected|
00002700  20 6f 62 6a 65 63 74 20  69 6e 20 74 68 65 20 76  | object in the v|
00002710  69 65 77 65 72 2c 20 61  20 63 61 6c 6c 20 74 6f  |iewer, a call to|
00002720  20 74 68 65 20 73 75 70  70 6c 69 65 64 20 72 6f  | the supplied ro|
00002730  75 74 69 6e 65 20 77 69  6c 6c 20 62 65 20 6d 61  |utine will be ma|
00002740  64 65 2e 20 54 68 69 73  20 6d 61 6b 65 73 20 69  |de. This makes i|
00002750  74 20 76 65 72 79 20 65  61 73 79 20 73 75 70 70  |t very easy supp|
00002760  6f 72 74 69 6e 67 20 61  6e 79 20 6e 75 6d 62 65  |orting any numbe|
00002770  72 20 6f 66 20 6f 62 6a  65 63 74 73 2c 20 77 68  |r of objects, wh|
00002780  69 6c 65 20 6f 6e 6c 79  20 77 72 69 74 69 6e 67  |ile only writing|
00002790  20 61 20 72 6f 75 74 69  6e 65 20 74 68 61 74 20  | a routine that |
000027a0  73 75 70 70 6f 72 74 73  20 6f 6e 65 20 6f 62 6a  |supports one obj|
000027b0  65 63 74 2e 20 45 73 63  61 70 65 20 77 69 6c 6c  |ect. Escape will|
000027c0  20 62 65 20 63 68 65 63  6b 65 64 20 64 75 72 69  | be checked duri|
000027d0  6e 67 20 74 68 65 20 73  63 61 6e 6e 69 6e 67 2c  |ng the scanning,|
000027e0  20 61 6e 64 20 77 69 6c  6c 20 61 62 6f 72 74 20  | and will abort |
000027f0  77 69 74 68 20 74 68 65  20 65 72 72 6f 72 20 22  |with the error "|
00002800  45 73 63 61 70 65 22 20  69 66 20 70 72 65 73 73  |Escape" if press|
00002810  65 64 2e 0a 0a 3c 68 33  3e 53 45 5f 53 74 61 72  |ed...<h3>SE_Star|
00002820  74 54 61 73 6b 3c 2f 68  33 3e 0a 3c 70 72 65 3e  |tTask</h3>.<pre>|
00002830  4f 6e 20 65 6e 74 72 79  3a 0a 52 30 09 2d 3e 43  |On entry:.R0.->C|
00002840  6f 6d 6d 61 6e 64 20 66  6f 72 20 73 74 61 72 74  |ommand for start|
00002850  69 6e 67 20 74 61 73 6b  0a 3c 2f 70 72 65 3e 0a  |ing task.</pre>.|
00002860  54 68 65 72 65 20 69 73  20 61 20 62 75 67 20 69  |There is a bug i|
00002870  6e 20 74 68 65 20 54 6f  6f 6c 62 6f 78 20 77 68  |n the Toolbox wh|
00002880  69 63 68 20 70 72 65 76  65 6e 74 73 20 61 20 74  |ich prevents a t|
00002890  6f 6f 6c 62 6f 78 20 74  61 73 6b 20 66 72 6f 6d  |oolbox task from|
000028a0  20 73 74 61 72 74 69 6e  67 20 61 6e 6f 74 68 65  | starting anothe|
000028b0  72 20 74 6f 6f 6c 62 6f  78 20 74 61 73 6b 20 6a  |r toolbox task j|
000028c0  75 73 74 20 6c 69 6b 65  20 74 68 61 74 2e 20 54  |ust like that. T|
000028d0  68 69 73 20 72 6f 75 74  69 6e 65 20 77 69 6c 6c  |his routine will|
000028e0  20 64 6f 20 74 68 65 20  6e 65 63 65 73 73 61 72  | do the necessar|
000028f0  79 20 77 6f 72 6b 61 72  6f 75 6e 64 73 20 74 6f  |y workarounds to|
00002900  20 70 72 6f 76 69 64 65  20 61 20 73 61 66 65 20  | provide a safe |
00002910  77 61 79 20 74 6f 20 73  74 61 72 74 20 61 6e 79  |way to start any|
00002920  20 74 61 73 6b 2e 20 53  6f 20 64 6f 6e 27 74 20  | task. So don't |
00002930  75 73 65 20 57 69 6d 70  5f 53 74 61 72 74 54 61  |use Wimp_StartTa|
00002940  73 6b 20 6f 72 20 2a 57  69 6d 70 54 61 73 6b 20  |sk or *WimpTask |
00002950  69 6e 20 74 68 65 20 75  74 69 6c 69 74 69 65 73  |in the utilities|
00002960  2c 20 75 73 65 20 74 68  69 73 20 63 61 6c 6c 20  |, use this call |
00002970  69 6e 73 74 65 61 64 2e  0a 0a 3c 68 33 3e 53 45  |instead...<h3>SE|
00002980  5f 4d 65 73 73 61 67 65  3c 2f 68 33 3e 0a 3c 70  |_Message</h3>.<p|
00002990  72 65 3e 4f 6e 20 65 6e  74 72 79 3a 0a 52 30 09  |re>On entry:.R0.|
000029a0  2d 3e 4d 65 73 73 61 67  65 0a 3c 2f 70 72 65 3e  |->Message.</pre>|
000029b0  0a 54 68 69 73 20 63 61  6c 6c 20 77 69 6c 6c 20  |.This call will |
000029c0  6f 70 65 6e 20 61 20 6d  65 73 73 61 67 65 20 62  |open a message b|
000029d0  6f 78 20 6f 6e 20 74 68  65 20 73 63 72 65 65 6e  |ox on the screen|
000029e0  2c 20 63 6f 6e 74 61 69  6e 69 6e 67 20 74 68 65  |, containing the|
000029f0  20 6d 65 73 73 61 67 65  2e 20 49 6e 20 73 6f 6d  | message. In som|
00002a00  65 20 63 61 73 65 73 20  74 68 69 73 20 69 73 20  |e cases this is |
00002a10  70 72 65 66 65 72 61 62  6c 65 20 74 6f 20 75 73  |preferable to us|
00002a20  69 6e 67 20 57 69 6d 70  5f 52 65 70 6f 72 74 45  |ing Wimp_ReportE|
00002a30  72 72 6f 72 2e 0a 0a 3c  68 33 3e 53 45 5f 4d 61  |rror...<h3>SE_Ma|
00002a40  6b 65 56 69 65 77 65 72  4e 61 6d 65 3c 2f 68 33  |keViewerName</h3|
00002a50  3e 0a 3c 70 72 65 3e 4f  6e 20 65 6e 74 72 79 3a  |>.<pre>On entry:|
00002a60  0a 52 30 09 2d 3e 42 75  66 66 65 72 20 66 6f 72  |.R0.->Buffer for|
00002a70  20 6e 61 6d 65 0a 52 32  09 2d 3e 56 69 65 77 65  | name.R2.->Viewe|
00002a80  72 0a 3c 2f 70 72 65 3e  0a 54 68 69 73 20 63 61  |r.</pre>.This ca|
00002a90  6c 6c 20 77 69 6c 6c 20  70 75 74 20 74 68 65 20  |ll will put the |
00002aa0  76 69 65 77 65 72 20 6e  61 6d 65 20 28 64 69 72  |viewer name (dir|
00002ab0  65 63 74 6f 72 79 29 20  69 6e 74 6f 20 74 68 65  |ectory) into the|
00002ac0  20 62 75 66 66 65 72 2e  0a 0a 3c 68 33 3e 53 45  | buffer...<h3>SE|
00002ad0  5f 4d 61 6b 65 4f 62 6a  65 63 74 4e 61 6d 65 3c  |_MakeObjectName<|
00002ae0  2f 68 33 3e 0a 3c 70 72  65 3e 4f 6e 20 65 6e 74  |/h3>.<pre>On ent|
00002af0  72 79 3a 0a 52 30 09 2d  3e 42 75 66 66 65 72 20  |ry:.R0.->Buffer |
00002b00  66 6f 72 20 6e 61 6d 65  0a 52 32 09 2d 3e 56 69  |for name.R2.->Vi|
00002b10  65 77 65 72 0a 52 33 09  2d 3e 4f 62 6a 65 63 74  |ewer.R3.->Object|
00002b20  0a 3c 2f 70 72 65 3e 0a  54 68 69 73 20 63 61 6c  |.</pre>.This cal|
00002b30  6c 20 77 69 6c 6c 20 70  75 74 20 74 68 65 20 66  |l will put the f|
00002b40  75 6c 6c 20 70 61 74 68  6e 61 6d 65 20 6f 66 20  |ull pathname of |
00002b50  74 68 65 20 6f 62 6a 65  63 74 20 69 6e 74 6f 20  |the object into |
00002b60  74 68 65 20 62 75 66 66  65 72 2e 0a 0a 3c 68 33  |the buffer...<h3|
00002b70  3e 53 45 5f 47 65 74 54  79 70 65 3c 2f 68 33 3e  |>SE_GetType</h3>|
00002b80  0a 3c 70 72 65 3e 4f 6e  20 65 6e 74 72 79 3a 0a  |.<pre>On entry:.|
00002b90  52 33 09 2d 3e 4f 62 6a  65 63 74 0a 4f 6e 20 65  |R3.->Object.On e|
00002ba0  78 69 74 3a 0a 52 30 09  4f 62 6a 65 63 74 20 74  |xit:.R0.Object t|
00002bb0  79 70 65 0a 3c 2f 70 72  65 3e 0a 54 68 69 73 20  |ype.</pre>.This |
00002bc0  63 61 6c 6c 20 77 69 6c  6c 20 72 65 74 75 72 6e  |call will return|
00002bd0  20 74 68 65 20 74 79 70  65 20 6f 66 20 74 68 65  | the type of the|
00002be0  20 6f 62 6a 65 63 74 2e  0a 0a 3c 68 33 3e 53 45  | object...<h3>SE|
00002bf0  5f 47 65 74 4c 65 61 66  3c 2f 68 33 3e 0a 3c 70  |_GetLeaf</h3>.<p|
00002c00  72 65 3e 4f 6e 20 65 6e  74 72 79 3a 0a 52 30 09  |re>On entry:.R0.|
00002c10  2d 3e 42 75 66 66 65 72  0a 52 32 09 2d 3e 56 69  |->Buffer.R2.->Vi|
00002c20  65 77 65 72 0a 52 33 09  2d 3e 4f 62 6a 65 63 74  |ewer.R3.->Object|
00002c30  0a 4f 6e 20 65 78 69 74  3a 0a 52 30 09 2d 3e 54  |.On exit:.R0.->T|
00002c40  65 72 6d 69 6e 61 74 6f  72 20 6f 66 20 6c 65 61  |erminator of lea|
00002c50  66 6e 61 6d 65 0a 3c 2f  70 72 65 3e 0a 54 68 69  |fname.</pre>.Thi|
00002c60  73 20 63 61 6c 6c 20 77  69 6c 6c 20 70 75 74 20  |s call will put |
00002c70  74 68 65 20 6c 65 61 66  6e 61 6d 65 20 6f 66 20  |the leafname of |
00002c80  74 68 65 20 6f 62 6a 65  63 74 20 69 6e 74 6f 20  |the object into |
00002c90  74 68 65 20 62 75 66 66  65 72 2e 0a 0a 3c 2f 62  |the buffer...</b|
00002ca0  6f 64 79 3e 3c 2f 68 74  6d 6c 3e 0a              |ody></html>.|
00002cac