Alphabetical Topic Index

- A -

A complete application (9 SWIG and Python)
A few dynamic loading gotchas (11 Advanced Topics)
A few helper functions (10 SWIG and Tcl)
A general interface building strategy (3 SWIG Basics)
A mathematical function plotter (9 SWIG and Python)
A Quick Intermission (12 Extending SWIG)
A simple example (9 SWIG and Python)
A simple example (6 Pointers, Constraints, and Typemaps)
A simple Perl example (8 SWIG and Perl5)
A simple shadow class (9 SWIG and Python)
A simple SWIG interface file (8 SWIG and Perl5)
A simple typemap example (8 SWIG and Perl5)
A SWIG example (1 Introduction)
A tour of SWIG datatypes (12 Extending SWIG)
A Typemap Implementation (6 Pointers, Constraints, and Typemaps)
About the examples (10 SWIG and Tcl)
About the Examples (9 SWIG and Python)
About this manual (Preface)
Accessing array data (9 SWIG and Python)
Accessing array structure members (8 SWIG and Perl5)
Accessing array structure members (9 SWIG and Python)
Accessing arrays (10 SWIG and Tcl)
Accessing arrays and other strange objects (8 SWIG and Perl5)
Accessing member data (10 SWIG and Tcl)
Adding Additional Text (5 Documentation System)
Adding member functions to C structures (3 SWIG Basics)
Adding native Python functions to a SWIG module (9 SWIG and Python)
Adding new methods (3 SWIG Basics)
Adding new methods (3 SWIG Basics)
Additional SWIG options (10 SWIG and Tcl)
An Example (5 Documentation System)
An OpenGL package (10 SWIG and Tcl)
Applying constraints to input values (6 Pointers, Constraints, and Typemaps)
Applying constraints to new datatypes (6 Pointers, Constraints, and Typemaps)
Applying exception handlers to specific datatypes. (7 Exception Handling)
Array members (3 SWIG Basics)
Arrays (3 SWIG Basics)
ASCII Documentation (5 Documentation System)
Automated shadow class generation (9 SWIG and Python)
Automatic documentation generation (1 Introduction)

- B -

Basic Perl interface (8 SWIG and Perl5)
Basic Tcl Interface (10 SWIG and Tcl)
Binary trees in Tcl (10 SWIG and Tcl)
Bug reports (Preface)
Building a C data structure in Tcl (10 SWIG and Tcl)
Building a dynamic module with MakeMaker (8 SWIG and Perl5)
Building a Perl5 interface to MATLAB (8 SWIG and Perl5)
Building a Perl5 module (1 Introduction)
Building a Python module (1 Introduction)
Building a simple 2D imaging class (9 SWIG and Python)
Building a simple OpenGL module (10 SWIG and Tcl)
Building a static version of Perl (8 SWIG and Perl5)
Building an object oriented C interface (10 SWIG and Tcl)
Building C/C++ data structures with Tk (10 SWIG and Tcl)
Building large multi-module systems (9 SWIG and Python)
Building libraries and modules (1 Introduction)
Building new kinds of Tcl interfaces (in Tcl) (10 SWIG and Tcl)
Building Perl Extensions under Windows 95/NT (8 SWIG and Perl5)
Building Python Extensions under Windows 95/NT (9 SWIG and Python)
Building scripting language extensions (2 Scripting Languages)
Building Tcl/Tk Extensions under Windows 95/NT (10 SWIG and Tcl)

- C -

C constructors and destructors (3 SWIG Basics)
C files (10 SWIG and Tcl)
C Information (5 Documentation System)
C Preprocessor directives (3 SWIG Basics)
C syntax, but not a C compiler (1 Introduction)
C++ Classes (10 SWIG and Tcl)
C++ Classes (9 SWIG and Python)
C++ example (3 SWIG Basics)
C++ Processing (12 Extending SWIG)
C++ support (3 SWIG Basics)
C++ Support (5 Documentation System)
Categories (3 SWIG Basics)
Changing member data (10 SWIG and Tcl)
Character Strings (3 SWIG Basics)
Character strings and structures (3 SWIG Basics)
Checking in library files (4 Multiple files and the SWIG library)
Checking out library files (4 Multiple files and the SWIG library)
Choosing a documentation format (5 Documentation System)
Class methods (3 SWIG Basics)
Cleanup (12 Extending SWIG)
Code blocks (3 SWIG Basics)
Code Generation Functions (12 Extending SWIG)
Code Insertion (3 SWIG Basics)
Combining Tcl/Tk Extensions (10 SWIG and Tcl)
Command Line Options and Basic Initialization (12 Extending SWIG)
Comment Formatting variables (5 Documentation System)
Comment placement and formatting (5 Documentation System)
Comments (3 SWIG Basics)
Common typemap methods (6 Pointers, Constraints, and Typemaps)
Compilation problems (10 SWIG and Tcl)
Compilation problems and compiling with C++ (8 SWIG and Perl5)
Compilation problems and compiling with C++ (9 SWIG and Python)
Compiling (12 Extending SWIG)
Compiling a dynamic module (8 SWIG and Perl5)
Compiling a dynamic module (9 SWIG and Python)
Compiling a dynamic module (Unix) (10 SWIG and Tcl)
Compiling a SWIG extension (12 Extending SWIG)
Compiling modules with shadow classes (9 SWIG and Python)
Conditional compilation (3 SWIG Basics)
Configuration management with SWIG (10 SWIG and Tcl)
Constants (12 Extending SWIG)
Constants (3 SWIG Basics)
Constants (9 SWIG and Python)
Constants (2 Scripting Languages)
Constants (10 SWIG and Tcl)
Constants (8 SWIG and Perl5)
Constraint methods (6 Pointers, Constraints, and Typemaps)
Constructors and destructors (3 SWIG Basics)
Constructors and Destructors (9 SWIG and Python)
Constructors and destructors (3 SWIG Basics)
Converting a Tcl list to a char ** (10 SWIG and Tcl)
Converting Python list to a char ** (9 SWIG and Python)
Converting a Perl5 array to a char ** (8 SWIG and Perl5)
Converting a Python file object to a FILE * (9 SWIG and Python)
Copying a typemap (6 Pointers, Constraints, and Typemaps)
Creating a new package initialization library (10 SWIG and Tcl)
Creating a new typemap (6 Pointers, Constraints, and Typemaps)
Creating a usage string (12 Extending SWIG)
Creating a Wrapper Function (12 Extending SWIG)
Creating arrays (6 Pointers, Constraints, and Typemaps)
Creating Commands (12 Extending SWIG)
Creating Library Files (4 Multiple files and the SWIG library)
Creating local variables (6 Pointers, Constraints, and Typemaps)
Creating multi-module packages (11 Advanced Topics)
Creating new objects (10 SWIG and Tcl)
Creating read-only variables (3 SWIG Basics)
Credits (Preface)
Cross platform woes (1 Introduction)

- D -

Debugging and other interesting uses for %except (7 Exception Handling)
Default Formatting (5 Documentation System)
Default/optional arguments (3 SWIG Basics)
Defining different exception handlers (7 Exception Handling)
Defining symbols (3 SWIG Basics)
Deleting a typemap (6 Pointers, Constraints, and Typemaps)
Deleting objects (10 SWIG and Tcl)
Derived types, structs, and classes (3 SWIG Basics)
Disabling all documentation (5 Documentation System)
Documentation entries (12 Extending SWIG)
Documentation generation (1 Introduction)
Documentation Processing (12 Extending SWIG)
Dynamic loading (10 SWIG and Tcl)
Dynamic Loading of C++ modules (11 Advanced Topics)

- E -

Emitting headers and support code (12 Extending SWIG)
Enums and constants (3 SWIG Basics)
Event driven C programming (1 Introduction)
Exception handling (9 SWIG and Python)
Exception handling (8 SWIG and Perl5)
Exception handling (10 SWIG and Tcl)
Exception handling with longjmp() (7 Exception Handling)
Extending and fixing the gd module (9 SWIG and Python)
Extending the Tcl Netscape Plugin (10 SWIG and Tcl)

- F -

File management (12 Extending SWIG)
Final Initialization (12 Extending SWIG)
Floating Point (3 SWIG Basics)
Formatting (5 Documentation System)
From C to SWIG to Python (9 SWIG and Python)
Function Parameters (12 Extending SWIG)
Function usage and argument names (5 Documentation System)
Functions (10 SWIG and Tcl)
Functions (9 SWIG and Python)
Functions (8 SWIG and Perl5)

- G -

Getting down to business (3 SWIG Basics)
Getting even more serious about array access (9 SWIG and Python)
Getting serious (8 SWIG and Perl5)
Getting the right header files (8 SWIG and Perl5)
Getting the right header files (9 SWIG and Python)
Getting the right header files (3 SWIG Basics)
Getting the right header files and libraries (10 SWIG and Tcl)
Global variables (10 SWIG and Tcl)
Global variables (8 SWIG and Perl5)
Graphical Web-Statistics in Perl5 (8 SWIG and Perl5)
Graphs (8 SWIG and Perl5)

- H -

Handling C++ exceptions (7 Exception Handling)
Handling exceptions in C code (7 Exception Handling)
Handling output values (the easy way) (8 SWIG and Perl5)
Hands off code generation (1 Introduction)
Hash Tables (12 Extending SWIG)
Hints (12 Extending SWIG)
How C++ processing works (12 Extending SWIG)
How does a scripting language talk to C? (2 Scripting Languages)
How it works (5 Documentation System)
How many typemaps are there? (12 Extending SWIG)
How to avoid creating the interface from hell (3 SWIG Basics)
How to avoid reading the manual (Preface)
How to break everything with a typemap (6 Pointers, Constraints, and Typemaps)
How to cope with C++ (3 SWIG Basics)
How to survive this manual (1 Introduction)
HTML Documentation (5 Documentation System)

- I -

Ignoring comments (5 Documentation System)
Implementations and Protocols (3 SWIG Basics)
Implementing C callback functions in Python (9 SWIG and Python)
Implementing constraints with typemaps (6 Pointers, Constraints, and Typemaps)
Implementing methods in C (10 SWIG and Tcl)
Implementing methods in Perl (8 SWIG and Perl5)
Implementing special Python methods in C (9 SWIG and Python)
Including files on the command line (4 Multiple files and the SWIG library)
Inheritance (8 SWIG and Perl5)
Inheritance (3 SWIG Basics)
Inheritance (3 SWIG Basics)
Inheritance and shadow classes (9 SWIG and Python)
Initialization blocks (3 SWIG Basics)
Inlined code blocks (3 SWIG Basics)
Input format (3 SWIG Basics)
Input Methods (6 Pointers, Constraints, and Typemaps)
Input/Output Methods (6 Pointers, Constraints, and Typemaps)
Inside the SWIG type-checker (11 Advanced Topics)
Instance methods (3 SWIG Basics)
Integers (3 SWIG Basics)
Introduction (6 Pointers, Constraints, and Typemaps)
Introduction (5 Documentation System)
Introduction (Preface)
Introduction (12 Extending SWIG)
Introduction to typemaps (6 Pointers, Constraints, and Typemaps)
Invoking member functions (10 SWIG and Tcl)
Iterators (8 SWIG and Perl5)

- L -

Language extensions (12 Extending SWIG)
LaTeX Documentation (5 Documentation System)
Library example (4 Multiple files and the SWIG library)
Life after SWIG (1 Introduction)
Life before SWIG (1 Introduction)
Limitations in the Parser (and various things to keep in mind) (3 SWIG Basics)
Limitations to this approach (10 SWIG and Tcl)
Linking to complex variables (3 SWIG Basics)
Linking with shared libraries (2 Scripting Languages)

- M -

Making a quick a dirty Tcl module (10 SWIG and Tcl)
Making a quick and dirty Python module (9 SWIG and Python)
malloc.i (4 Multiple files and the SWIG library)
Managing input and output parameters (6 Pointers, Constraints, and Typemaps)
Managing special data-types with helper functions (6 Pointers, Constraints, and Typemaps)
Manipulating Global Variables (12 Extending SWIG)
Mapping C structures into Tcl Lists (10 SWIG and Tcl)
Mapping Python tuples into small arrays (9 SWIG and Python)
Member data (9 SWIG and Python)
Member data (3 SWIG Basics)
Member data (3 SWIG Basics)
Member functions (3 SWIG Basics)
Merging modules (9 SWIG and Python)
Methods that return new objects (9 SWIG and Python)
Module and package names (8 SWIG and Perl5)
Module names (9 SWIG and Python)
Modules (9 SWIG and Python)
Modules, packages, and classes (8 SWIG and Perl5)
More about the SWIG library (4 Multiple files and the SWIG library)
More Examples (7 Exception Handling)
Motivations for using typemaps (6 Pointers, Constraints, and Typemaps)

- N -

Name based type conversion (10 SWIG and Tcl)
Name based type conversion (9 SWIG and Python)
Name based type conversion (8 SWIG and Perl5)
Naming Services (12 Extending SWIG)
Nested objects (9 SWIG and Python)
Nested Objects (8 SWIG and Perl5)
Nested structures (3 SWIG Basics)
Non-intrusive interface building (1 Introduction)

- O -

Object Ownership (8 SWIG and Perl5)
Object ownership (9 SWIG and Python)
Objective-C (3 SWIG Basics)
Objective-C Example (3 SWIG Basics)
Organization of this manual (Preface)
Other issues (3 SWIG Basics)
Other odds and ends (9 SWIG and Python)
Other things to note about structures (3 SWIG Basics)
Output Methods (6 Pointers, Constraints, and Typemaps)
Overriding call by reference (3 SWIG Basics)

- P -

Packing a data structure (6 Pointers, Constraints, and Typemaps)
Partial class definitions (3 SWIG Basics)
Passing complex datatypes by value (3 SWIG Basics)
Performance concerns and disabling the object oriented interface (10 SWIG and Tcl)
Performance concerns and hints (9 SWIG and Python)
Performance of the type-checker (11 Advanced Topics)
Perl5 typemaps (8 SWIG and Perl5)
Placing the files in the library (4 Multiple files and the SWIG library)
Plotting an unstructured mesh (9 SWIG and Python)
Pointer handling (8 SWIG and Perl5)
Pointer handling (10 SWIG and Tcl)
Pointer handling (9 SWIG and Python)
Pointer Library Functions (6 Pointers, Constraints, and Typemaps)
Pointers (8 SWIG and Perl5)
Pointers (10 SWIG and Tcl)
Pointers (9 SWIG and Python)
Pointers and complex objects (3 SWIG Basics)
Pointers to functions (3 SWIG Basics)
Predefined Symbols (3 SWIG Basics)
Preliminaries (10 SWIG and Tcl)
Preliminaries (8 SWIG and Perl5)
Preliminaries (9 SWIG and Python)
Preparing a C program for SWIG (3 SWIG Basics)
Preparing a module (9 SWIG and Python)
Prerequisites (Preface)
Prerequisites (12 Extending SWIG)
Printing (9 SWIG and Python)
Problems with the OpenGL interface (10 SWIG and Tcl)
Protection (3 SWIG Basics)
Protection (3 SWIG Basics)
Putting it all together (9 SWIG and Python)
Putting it all together (8 SWIG and Perl5)
Python shadow classes (9 SWIG and Python)
Python typemaps (9 SWIG and Python)

- R -

Rebuilding the Python interpreter (aka. static linking) (9 SWIG and Python)
References (3 SWIG Basics)
Referring to other classes (3 SWIG Basics)
Relationship with pointers (10 SWIG and Tcl)
Remapping C datatypes with typemaps (9 SWIG and Python)
Remapping constants (10 SWIG and Tcl)
Remapping datatypes with typemaps (8 SWIG and Perl5)
Renaming (3 SWIG Basics)
Renaming (3 SWIG Basics)
Renaming declarations (3 SWIG Basics)
Required C++ compiler (12 Extending SWIG)
Required files (12 Extending SWIG)
Required files (10 SWIG and Tcl)
Return by value (3 SWIG Basics)
Return values (8 SWIG and Perl5)
Returning values in arguments (10 SWIG and Tcl)
Run time pointer type checking (3 SWIG Basics)
Running SWIG (8 SWIG and Perl5)
Running SWIG (9 SWIG and Python)
Running SWIG (3 SWIG Basics)
Running SWIG (10 SWIG and Tcl)
Running SWIG from Developer Studio (10 SWIG and Tcl)
Running SWIG from Developer Studio (9 SWIG and Python)
Running SWIG from Developer Studio (8 SWIG and Perl5)
Runtime support (and potential problems) (11 Advanced Topics)

- S -

Sample Perl Script (8 SWIG and Perl5)
Scope (6 Pointers, Constraints, and Typemaps)
Setting a module name (12 Extending SWIG)
Setting a package prefix (10 SWIG and Tcl)
Shadow classes (8 SWIG and Perl5)
Shadow classes (10 SWIG and Tcl)
Shadow classes (2 Scripting Languages)
Shadow Functions (8 SWIG and Perl5)
Shadow Functions (9 SWIG and Python)
Shared libraries and dynamic loading (2 Scripting Languages)
Shortcuts (1 Introduction)
Simple C functions, variables, and constants (3 SWIG Basics)
Simple constraint example (6 Pointers, Constraints, and Typemaps)
Simple pointers (3 SWIG Basics)
Solving a simple heat-equation (9 SWIG and Python)
Sorting (5 Documentation System)
Special variables (6 Pointers, Constraints, and Typemaps)
Standard typemaps (9 SWIG and Python)
Standard typemaps (10 SWIG and Tcl)
Standard typemaps (8 SWIG and Perl5)
Starting the parser (12 Extending SWIG)
Static initialization of multiple modules (4 Multiple files and the SWIG library)
Static linking (2 Scripting Languages)
Static linking (10 SWIG and Tcl)
Static members (3 SWIG Basics)
Structures (10 SWIG and Tcl)
Structures (9 SWIG and Python)
Structures and C++ classes (8 SWIG and Perl5)
Structures and classes (2 Scripting Languages)
Structures, unions, and object oriented C programming (3 SWIG Basics)
Summary (1 Introduction)
Summary (so far) (9 SWIG and Python)
Supported C++ features (3 SWIG Basics)
SWIG Directives (3 SWIG Basics)
SWIG for Windows and Macintosh (1 Introduction)
SWIG interface file (1 Introduction)
SWIG is free (Preface)
SWIG on the Power Macintosh (1 Introduction)
SWIG on Windows 95/NT (1 Introduction)
SWIG Organization (12 Extending SWIG)
SWIG output (12 Extending SWIG)
SWIG Output (3 SWIG Basics)
SWIG resources (Preface)
SWIG, C++, and the Legislation of Morality (3 SWIG Basics)

- T -

Tabs and other annoyances (5 Documentation System)
Tcl typemaps (10 SWIG and Tcl)
Tcl8.0 features (10 SWIG and Tcl)
tclsh.i (4 Multiple files and the SWIG library)
Templates (3 SWIG Basics)
The #if directive (3 SWIG Basics)
The %except directive (7 Exception Handling)
The %extern directive (4 Multiple files and the SWIG library)
The %import directive (4 Multiple files and the SWIG library)
The %include directive (4 Multiple files and the SWIG library)
The C++ code (9 SWIG and Python)
The DataType class (12 Extending SWIG)
The Final Word? (5 Documentation System)
The future of C++ and SWIG (3 SWIG Basics)
The Future of SWIG (12 Extending SWIG)
The gory details of shadow classes (9 SWIG and Python)
The gory details on shadow classes (8 SWIG and Perl5)
The header file (12 Extending SWIG)
The idea (in a nutshell) (6 Pointers, Constraints, and Typemaps)
The Language class (simple version) (12 Extending SWIG)
The low-level Python/C interface (9 SWIG and Python)
The MATLAB engine interface (8 SWIG and Perl5)
The object oriented interface (10 SWIG and Tcl)
The organization of this chapter (12 Extending SWIG)
The output of SWIG (3 SWIG Basics)
The step-by-step process for making a plugin extension. (10 SWIG and Tcl)
The String Class (12 Extending SWIG)
The swig command (1 Introduction)
The SWIG interface file (3 SWIG Basics)
The SWIG library (4 Multiple files and the SWIG library)
The SWIG library and installation issues (12 Extending SWIG)
The SWIG package (1 Introduction)
The SWIG Pointer Library (6 Pointers, Constraints, and Typemaps)
The SWIG runtime library (11 Advanced Topics)
The this pointer (9 SWIG and Python)
The two language view of the world (2 Scripting Languages)
The typemap C API. (12 Extending SWIG)
The use of id (3 SWIG Basics)
The world's fastest way to write a Makefile (4 Multiple files and the SWIG library)
The WrapperFunction class (12 Extending SWIG)
Titles, sections, and subsections (5 Documentation System)
Turning a SWIG module into a Tcl Package. (10 SWIG and Tcl)
Turning Perl references into C pointers (8 SWIG and Perl5)
Two classes (9 SWIG and Python)
Type casting (11 Advanced Topics)
Type equivalence (11 Advanced Topics)
Typedef (3 SWIG Basics)
Typedef and structures (3 SWIG Basics)
Typemap examples (6 Pointers, Constraints, and Typemaps)
Typemap matching rules (6 Pointers, Constraints, and Typemaps)
Typemap variables (8 SWIG and Perl5)
Typemap variables (9 SWIG and Python)
Typemap variables (10 SWIG and Tcl)
Typemaps (10 SWIG and Tcl)
Typemaps (from C) (12 Extending SWIG)
Typemaps and the future (6 Pointers, Constraints, and Typemaps)
Typemaps and the SWIG Library (6 Pointers, Constraints, and Typemaps)
Typemaps for handling arrays (6 Pointers, Constraints, and Typemaps)

- U -

Use Python for control, C for performance (9 SWIG and Python)
Use static linking (9 SWIG and Python)
Useful functions (10 SWIG and Tcl)
Useful functions (8 SWIG and Perl5)
Useful Functions (9 SWIG and Python)
Using our new module (9 SWIG and Python)
Using a dynamic module (10 SWIG and Tcl)
Using a new documentation module (12 Extending SWIG)
Using different names (6 Pointers, Constraints, and Typemaps)
Using dynamic loading (9 SWIG and Python)
Using NMAKE (8 SWIG and Perl5)
Using NMAKE (10 SWIG and Tcl)
Using NMAKE (9 SWIG and Python)
Using some typemaps (6 Pointers, Constraints, and Typemaps)
Using the gd module (9 SWIG and Python)
Using the OpenGL module (10 SWIG and Tcl)
Using the plugin (10 SWIG and Tcl)
Using The SWIG exception library (7 Exception Handling)
Using typemaps to return arguments (9 SWIG and Python)
Using typemaps to return values (8 SWIG and Perl5)
Using your module (9 SWIG and Python)
Using [incr Tcl] namespaces (10 SWIG and Tcl)

- V -

Variable Linking (9 SWIG and Python)
Variable linking (2 Scripting Languages)
Variables (3 SWIG Basics)

- W -

What gets created? (8 SWIG and Perl5)
What happens on typemap lookup? (12 Extending SWIG)
What happens when SWIG encounters an unknown datatype? (3 SWIG Basics)
What is a typemap? (9 SWIG and Python)
What is a typemap? (10 SWIG and Tcl)
What is a typemap? (6 Pointers, Constraints, and Typemaps)
What is SWIG? (1 Introduction)
What to do with main() (3 SWIG Basics)
What's new? (Preface)
Where to go for more information (9 SWIG and Python)
Where to go for more information (12 Extending SWIG)
Where to go from here? (8 SWIG and Perl5)
Why a name based approach? (11 Advanced Topics)
Why doesn't C++ inheritance work between modules? (11 Advanced Topics)
Why use separate interface files? (3 SWIG Basics)
Why write shadow classes in Python? (9 SWIG and Python)
Will adding a scripting language to my C program make it unmanagable? (2 Scripting Languages)
Will scripting languages make my C program inefficient? (2 Scripting Languages)
Working with library files (4 Multiple files and the SWIG library)
Working with the C preprocessor (3 SWIG Basics)
Wrapper code blocks (3 SWIG Basics)
Wrapper functions (2 Scripting Languages)
Wrapping a C library (9 SWIG and Python)
Wrapping a library file (4 Multiple files and the SWIG library)
Wrapping C libraries and other packages (8 SWIG and Perl5)
Wrapping gl.h (10 SWIG and Tcl)
Wrapping glu.h (10 SWIG and Tcl)
Wrapping the aux library (10 SWIG and Tcl)
Wrapping the MATLAB matrix functions (8 SWIG and Perl5)
Writing a main program (12 Extending SWIG)
Writing a main program and Tcl_AppInit() (10 SWIG and Tcl)
Writing a new documentation module (12 Extending SWIG)
Writing a Real Language Module (12 Extending SWIG)
Writing new typemaps (6 Pointers, Constraints, and Typemaps)
Writing the default typemaps (12 Extending SWIG)
Writing typemap code (6 Pointers, Constraints, and Typemaps)


SWIG 1.1 - Last Modified : Mon Aug 4 10:47:18 1997