# Content

The PM3 distribution contains over 130 programs and libraries split by topic along a hierarchical tree.

Database
  Permanent storage, including stable (persistent) objects, and database access.
Graphics
  Graphical applications and libraries, including windowing toolkits, 2D and 3D graphics and animation, graphical editors and viewers, and miscellaneous demo games.
Language
  Compilers, interpreters, parsing tools, and program development tools for several languages including Modula-3, Obliq, and Lisp.
Libs
  General purpose libraries for memory management, input-output, operating system access, data structures, numerical computations, and miscellaneous topics not covered in the other sections.
M3Config
  Configuration files for PM3, which determine default paths, compilation options...
Network
  Libraries and applications for networked, distributed applications, including network objects, mail, www and news readers, and distributed source and binaries repositories.
Text
  Text and documentation processing libraries and applications, including SGML/XML parsing tools.

## Guided Tour for New Users

New users will typically want to read the documentation approximately in the following order.

Modula-3 language definition
  This concise definition of the Modula-3 language may be replaced by the more tutorial book Modula-3 by Sam Harbison, published by Prentice Hall.
The Modula-3 compiler, m3build and m3ship
  M3build interprets package (program or library) definitions in m3makefiles and performs the compilation. M3ship installs the resulting executable or runtime library files. These tools and a few others may conveniently be accessed through emacs menus using m3ide.
Modula-3 Standard Library, and other Useful Modula-3 Interfaces
  This library contains the most commonly used data structures, Input-Output interfaces, and Operating System access.
m3gdb
  This Modula-3 aware version of the GNU debugger offers the usual debugging support functions with support to print Modula-3 values.
Trestle, VBTkit, and FormsVBT windowing toolkits
  Trestle operates at the pixel level and offers all the needed low level mechanisms. VBTkit has higher level components such as shadowed buttons, menus, text editors, scrollbars. FormsVBT offers an interactive user interface builder through a simple description language, and is the preferred vehicle for first time users. The lower level libraries (Trestle and VBTkit) offer slightly more flexibility and performance at the cost of increased programming complexity.
Runtime program analysis tools coverage, shownew, showthread , and others
  Several graphical and textual tools and runtime interfaces may be used to gather information about source code coverage, execution time profiling, new memory allocations, threads activity, and more.
Network Objects
  Network objects may be used to easily build robust distributed applications through remote method invocations.
Stable Objects
  Stable objects offer crash resistant persistent storage.