Triton

An object oriented GUI creation system

Release 2.0 (public beta 1) \begin{matrix}c \\ ◯ \end{matrix} 1993-1996 by Stefan Zeiger. All rights reserved.

1

1 Introduction

1.1 Introduction

Triton is a standard Amiga shared runtime library. Triton makes it much easier to create good looking graphical user interfaces (GUIs) than GadTools, BOOPSI or other systems.

The most important features are:

• Object oriented system

• Automatically font sensitive, font adaptive

• Automatic keyboard shortcuts for default window actions

• Really easy to use

• Beautiful customizable AmigaOS3.x look

• Comes as a freely distributable shared library

• Size! It’s the Triton among the minnows of GUI creation systems ;)

• Easy installation: For a quick installation simply put triton.library into ‘Libs:’ or the current directory.

• Resizability of windows wherever applicable

• A Preferences editor which allows you to customize the look and feel of all Triton GUIs • No installation required. Simply putting triton.library into the current directory is enough

for a minimum installation.

By using Triton you don’t have to worry about otherwise very time-consuming things like font-sensitivity and resizability of your windows. What is even more important is that you can easily change your user interfaces later without having to rearrange display objects. Simply add an object to a group and the whole GUI will adapt to make room for it.

1.2 Copyright

The programs and files in this distribution are freely distributable, but are also \begin{matrix}c \\ ◯ \end{matrix} by Stefan Zeiger. They may be freely distributed as long as no more than a nominal fee is charged to cover time and copying costs. ‘triton.library’ is distributed as Freeware.

The Triton Preferences editor is shareware. If you want to customize the look and feel of Triton GUIs or if you simply like Triton and want to support its development, you have to register. You will then get a keyfile which will enable you to save all settings in the Preferences editor. In unregistered versions only the system options are saved.

If you want to register, please send DM20, US$15 or an equal amount in any other valid currency to me. See Section 3.3 [Odds & Ends - Support], page 9, for addresses.

Send money by EuroCheque (only in German Marks (DM)!), postal(!) money order or cash! It’s impossible for me to cash in foreign cheques, even if the amount is in DM. Please state the version of triton.library you have (use the ‘C:Version’ command to display the version).

There is absolutely no obligation for you to register Triton. If you don’t need the registered Preferences editor, then you need not register.

Note: Registered trademarks are not explicitly marked as such in this manual. If a name is not marked as a trademark, this does not imply that it is free.

See Section 3.5 [Odds & Ends - License], page 10, for information about using Triton in your own - commercial or free - programs.

1.3 Installation

First of all, Triton requires at least OS2.04. If you’re still running 1.2 or 1.3, you have to upgrade to OS2.04 or better. OS1.3 is obsolete and I will not support it. You certainly won’t regret upgrading to OS3.1.

The user relevant parts of Triton (i.e. the contents of the user archive) can be installed comfortably using the supplied installer scripts. In order to save space, the required ‘Installer’ program is not included in the Triton archive. ‘Installer’ is included in the AmigaOS system software beginning with OS release 3.0 and can also be found as a freely distributable archive on many BBSs and ftp sites.

If you’re running OS2.0x, use the ‘Install/Workbench_2.0’ installer script. If you’re running OS2.1 or better, use the script for your preferred language from the ‘Install/Workbench_2.1+’ drawer. Note that not all installation scripts are fully localized. Unlocalized strings will be displayed in English.

Two versions of triton.library are included in this distribution. The one in libs37 requires OS2.04 or better, the one in libs39 requires OS3.0 or better and is optimized for OS3.0+, so that it is shorter and will run slightly faster than the OS2.04 version on an OS3.0+ system. The OS3.0+ version cannot be used with OS2.0/2.1. Beginning with Triton release 2.0 the OS3.0+ version of the library also requires an 68020 or better processor and is optimized for a 68030. I assume that most Amiga users who are still interested in new software and use OS3.0 or better do also have at least a 68020 processor. Note that the V37 version will behave exactly like the V39 version on V39+ systems. It is only a bit larger and slower than the native version.

1.4 Usage

The usage of a Triton GUI should be pretty clear. All windows have two additional keyboard shortcuts (if not explicitly disabled by the application):

• ’Esc’ will simulate the ’close window’ gadget.

• ’Del’ will simulate the ’resize window’ gadget.

Furthermore, various objects react on some standard keyboard shortcuts:

• In palette, slider, scroller and similar gadgets with an up/down facility you can use the shifted shortcut to decrease the value.

• Listviews can be controlled with either the cursor keys (Shifted and Alternate shortcuts are also available) or the numeric keypad (including the numeric arrow keys, Home, End, PgUp and PgDn). The programmer may choose to disable these shortcuts, mainly in order to make the primary listview accessable via the cursor keys and the secondary listview via the numeric keypad.

• Within string gadgets, Tab and Shift Tab will activate the previous/next string gadget as usual. You can access all keyboard shortcuts by pressing them together with the right Amiga key (RAmiga). If no such shortcut exists, Triton will instead try to interpret the key you pressed as a menu shortcut. You may use the cursor up and down keys normally from within string gadgets to control a listview.

• You can cancel a button which has been pressed down with a keyboard shortcut by pressing down either Shift key before releasing the shortcut. This is similar to releasing the mouse button outside the borders of a button.

For information on how to use Triton as a programmer for developing Triton applications, see the developer documentation which is included in the Triton developer archive in the directory

‘Developer’.

2 Preferences editor

2.1 Introduction

The Triton Preferences Editor allows you to customize the look and feel of applications which are using the Triton GUI creation system. The Preferences Editor is shareware. In unregistered versions only the system options are saved. See Section 1.2 [Introduction - Copyright], page 2, for details.

The Triton Preferences Editor allows you to change basically two kinds of settings:

1. Global settings for all Triton applications (e.g. public screens).

2. Private application settings.

Note that the listed global application <<Global>> belongs to the second type, too. If an application is created, it will inherit the global application’s settings. Thus all applications without own settings will use the global settings. As soon as you change any setting of an application, it will become independant and will not inherit future changes of the global application. If you want to delete an application’s private settings and make it use the global settings again (including inheriting future changes to them), select the menu item Edit/Reset To Global. This system may sound a bit complicated to you, but it is quite easy to handle.

2.2 Usage

Main window menu Project:

The Triton Preferences Editor can be installed by hand by simply dragging it into the ’Prefs’ drawer of your boot partition (‘sys:Prefs’). Then start the editor and confirm that you want to install the Preferences System. It may be removed again later by selecting ’Project/Remove’ in the editor’s main window’s menu.

Main window menu Edit:

This menu contains all standard items plus Reset to Global (see Section 2.1 [Preferences editor - Introduction], page 5). All changes made from within this menu do only apply to the currently selected application.

Main window gadgets:

Save, Use and Cancel should be self-explaining. They apply to all modified settings of all applications. Test will restart the Preferences editor using the current settings without saving anything.

Info will give you all information available about the selected application. This includes name, version, compilation date and so on.

Delete will delete an application, i.e. its settings and information files. You have to restart the application to make it appear in the Triton Preferences Editor again. If you just want to delete an application’s private settings, use Edit/Reset to Global.

The gadget System opens the system window which contains all global settings. All other gadgets open windows for private application settings.

Frames window:

The frames window allows you to configure the look of frames and groups. This should be mostly self-explaining.

Images window:

You can change some default Triton images (e.g. window backgrounds) in this window.

With Use <Return> arrow in buttons you can decide how buttons which can be activated by pressing <Return> will be highlighted. If you check the gadget, these buttons will have an arrow on the right side. By default they will have their label displayed in bold text instead.

Pens window:

In this window you can change some Triton pens. Especially important are Halfshine and Halfshadow which are used for rendering frames in XEN 1, XEN 2 and NeXT look.

Also listed among these pens are the foregrounds and backgrounds of string gadgets. From a logical point of view the backgrounds should rather be images than pens but due to limitations of AmigaOS this is technically not possible.

   Windows window:

This window contains the Triton window manager. The list shows all windows of the selected application which have been opened since the last reboot or are saved permanently to ‘envarc:Triton’. The windows are displayed by their titles (if available; otherwise the ID number in square brackets). If you close a Triton window, Triton will remember its last dimensions in a file in ‘env:Triton’, so that it will have the same dimensions when you reopen it. If you want to keep the window dimensions permanently, so that they are always available (unless you change them later on), select the appropriate window and click on Snapshot. This system works just like the window snapshotting of the Amiga Workbench. If you want Triton to "forget" a custom window position and reposition the window according to the original positioning information (e.g. centering the window on the screen after choosing a new screen resolution), you can UnSnapshot the window. The gadgets Snapshot all and UnSnapshot all will (un)snapshot all windows of the currently selected application. The gadget Info will bring up a requester containing some information about the currently selected window.

System window:

The system window contains all global settings. The most important one of those is the public screen manager. You can add, delete and edit public screens. Double click on a screen or select Use and the name of the screen will be copied into the above string gadget. This is the screen for the currently selected application. You may also type in any other screen name (either of an existing public screen or of a public screen which is managed by the Triton public screen manager).

When Triton opens a window, it will first look if the specified screen exists and use it in this case. Otherwise it will try to create it if an entry for this screen can be found in the screen manager. If this doesn’t work either, Triton will fall back onto the default public screen. You can test how a screen will look by selecting Test. The screen will be opened and can be closed again by closing the information window which is displayed in it. Note that the screen will not be made public when testing.

The screen manager settings override any specifications made by the programmer. Setting an application’s screen to <<Program default>> will make it use the screen specified by the programmer. However only public and workbench screen windows can be promoted using the screen manager. Custom screen windows will always open on the custom screen specified in the application.

Except for the public screen manager, the System window currently contains only one switch: Simple refresh. Select it to make all windows use Simple instead of Smart refresh. This will require less memory but make the refresh slower und worse looking (at least with the standard AGA graphics - I haven’t tried it with a graphics board).

3 Odds & Ends

3.1 Astronomy lesson

Triton - A moon of Neptune (by Michael Berg)

Triton is a quaint little moon, in that it is one of the very few moons to be known to have retrograde orbits around their host. Triton is believed to be a 3-6000 km large world of mostly liquid nitrogen oceans, perhaps with a thin methane atmosphere as well, but noone knows for sure since either of the Voyager twins ever got close enough to take convincing snapshots.

Neptune itself is also quite strange in that it has an almost 90 degree tilted inclination, so that it "rolls" through space, unlike Earth and the other planets (minus Venus), which all spin like tops in their orbits. Noone can tell for sure why Neptune has such an eccentric inclination, but it has been suggested that it was caused by a gigantic collision of some sort (probably with a large asteroid). In the process Neptune also lost its third moon, which at the time was none other than Pluto. The collision accelerated Pluto to the point where it had enough momentum to actually leave its orbit and shoot into space on its own. As it did so it probably passed below the Roche’ radius of Neptune, causing it to break up in two or more bodies under the influence of the massive tidal forces of Neptune. This would certainly account for Charon, which is in itself too large to have been "captured" by an object as small as Pluto.

Okay, end of today’s astronomy lesson :-)

3.2 Acknowledgments

Thanks must go to (in more or less random order):

• The Triton 2.0 beta-testers: Magnus Holmgren, Nils Sjoholm, Volker Stolz, Patrick Ohly, Jürgen Kohrmeyer, Carsten Raufuß, Matthias Andree, Heikki Linnakangas, Stefan ’eau’ Schulz, Michael Bergmann, Klaus Melchior, Philipp Lonke, Tom Eicher, Uffe Holst, Marco Frischkorn

• The Triton 1.x beta-testers: Nico François, Carsten Raufuß, Michael Berg, Magnus Holmgren, Marco Frischkorn, Patrick Ohly, Daniel Schrod and everyone else I have forgotten

• The catalog translators: Philipp Lonke for the French translation and the BlitzBasic interface Magnus Holmgren for the Swedish translation and the DICE interface Frank Verheyen for the Dutch translation and the AmigaE interface • The authors of developer support material:

Philipp Lonke (BlitzBasic), Magnus Holmgren (DICE), Frank Verheyen (AmigaE), Gunther Nikl (gcc), Klaus Melchior (DICE), Peter Fröhlich (AmigaOberon), Volker Stolz (AmigaOberon), Oskar Liljeblad (Assembler), Stefan Schulz (M2Amiga), Sotirios Pappas (Kick-Pascal/MaxonPascal),

• Jürgen Kohrmeyer for writing TritonRexx

• Kai Iske for his BOOPSI class sources

• Michael Berg for the ’Astronomy Lesson’

• Tom Eicher and Everett M. Greene for proof-reading the documentation

• Michael ’Mick’ Hohmann for the icons

• The people at iM.Net for running the Triton mailing list

• Everyone I’ve forgotten

I have used the following software products for creating Triton:

• The C sources were compiled with SAS/C 6.56. With SAS/C it was possible to create Triton without a single line of assembly language code.

• The sources and the documentation were edited with GNU Emacs 18.59 on my Amiga and XEmacs 19.13 on my Linux PC.

• The documentation was written in Texinfo and formatted using PasTeX and makeinfo.

• Shell commands were entered in KingCON and xterm windows ;-)

3.3 Support

If you have suggestions or remarks about Triton, or if you find any bugs, please let me know.

Contacting the author:

• EMail:

triton-support@laren.rhein-main.de

• Mail:

Stefan Zeiger

Seligenstädter Weg 24

D-63796 Kahl

Germany

• Voice:

+49-6188-900712

• Fax & Voice Box:

+49-6188-900713

You can also find this information on my WWW home page at http://home.pages.de/~szeiger/.

3.4 Updates

Beginning with release 1.2, the Triton archives are named ‘triXXusr.lha’ (user archive) and ‘triXXdev.lha’ (developer archive) with XX being the release number, e.g. ‘tri12usr.lha’ and ‘tr12dev.lha’ for Triton release 1.2. Beginning with release 2.0, support material for different programming languages is not included in ‘triXXdev.lha’ anymore. Instead separate archives are made available.

If you have access to the World Wide Web (WWW), the easiest way of obtaining a new version of Triton or getting information about Triton is the Triton Home Page at

http://home.pages.de/~szeiger/triton.html. You can follow links from this page to

AmiNet ftp sites that carry the latest Triton archives.

You may also log in as a guest at the BBS of Tec Mania Systems in order to download Triton

directly (it can be found in ‘/T-M-S/BINAER/AMIGA/WIZARD-WORKS’).
          Name : Tec Mania Systems
         SysOp : Bernd Hassenzahl
         Phone : +49-6157-87427 (V32.t 19k2)
                 +49-6157-87428 (V32.t 19k2)
                 +49-6157-86117 (V34 28k8)
                 +49-6157-91012-1 (ISDN X75)
                 +49-6157-91012-2 (ISDN X75)

Updates of the Triton packages will furthermore be distributed through AmiNet (directory ‘/dev/gui’). The main AmiNet distribution site is wuarchive.wustl.edu. From Europe, try ftp.luth.se or ftp.uni-paderborn.de instead in order to save bandwidth.

3.5 License

1. Disclaimer: There is no warranty for the Triton user and developer packages, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holder or any other party which may distribute the packages provides the program "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction. In no event unless required by applicable law or agreed to in writing will the copyright holder or any other party be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the program (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the program to operate with any other programs), even if the copyright holder or other party has been advised of the possibility of such damages.

2. Commercial and FD usage: You may use Triton freely for all free applications (Freeware, Public Domain, Copyleft,…). If you want to use Triton for a shareware product, please register Triton and send me an uncrippled version of your product. If you want to use Triton for a commercial product, please contact me directly (see Section 3.3 [Odds & Ends - Support], page 9) for information about licensing Triton for your individual product. The standard price for a commercial Triton license is twice the suggested retail price of the product (at least DM50) plus a copy of the product for me. One user license (Triton keyfile) is included. However there are exceptions to that pricing scheme.

3. Distribution:

All of the files copyrighted by the author must remain unmodified. None of these files may be distributed on its own, the entire package must be distributed as a whole. If not explicitly stated otherwise all files are subject to my copyright on the Triton package. The icons used in the Triton package were created and are copyrighted by Michael-Wolfgang Hohmann (mickh@iM.Net) and may not be used in other projects without his written permission. The agreement to use these icons for the Triton distribution has been given. There is one exception to the above redistribution limitations. If you plan to release a freely distributable program, you may include the Distribution drawer (which can be found under the name ’Triton’ in the ‘Developer/Distribution’ directory) with your distribution. It is left to the programmer to decide whether he wishes to register Triton. Whether your program is freely distributable or commercial, you must state in your documentation that your program uses triton.library and that Triton is \begin{matrix}c \\ ◯ \end{matrix} by Stefan Zeiger. A notice in the "About" requester saying "This application uses the Triton GUI creation system, which is \begin{matrix}c \\ ◯ \end{matrix} by Stefan Zeiger" wouldn’t be bad, either ;)

Glossary

‘BOOPSI’ Basic Object Oriented Programming System for Intuition. See the BOOPSI chapter of the RKM ("ROM Kernel Manual") volume "Libraries" for details.

‘DICE’ Dillon’s Integrated C Environment. A C development system for AmigaOS.

‘Endless loop’
          See ‘Loop, endless’.
‘FD software’

Freely distributable software, including ‘Public Domain (PD)’, ‘Freeware’, ‘Giftware’,

          ‘Shareware’, etc.

‘GCC’ ‘GNU C’: The C compiler of the "Free Software Foundation". This compiler and its development system is freely distributable and a port is also available for AmigaOS.

‘GUI’ Graphical User Interface.

‘Loop, endless’
          See ‘Endless loop’.

‘SAS/C’ A commercial C development system for AmigaOS.

Index 13

Index

A

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 AmiNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Astronomy lesson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

B

BBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 BOOPSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

C

Commercial usage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Contacting the author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Credits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

D

Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 DICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Distribution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

E

Editor, Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Endless loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

F

FD software. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

G

GCC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

H

Home Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

I

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

L

License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Loop, endless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

O

Odds & Ends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

P

Preferences editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Programmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

S

SAS/C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

T

Tec Mania Systems BBS . . . . . . . . . . . . . . . . . . . . . . . . . 10 Thanks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

U

Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Usage, commercial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

W

World Wide Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 WWW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Table of Contents

1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Preferences editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Odds & Ends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1 Astronomy lesson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3 Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.4 Updates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.5 License. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13