## Angry Red Planet # Common Libraries |

This package is a set of class libraries that we have created in the course of developing various Angry Red Planet programs, particularily ArpTelnet (the source for which is available in a separate distribution).

This code is being released open source under a slight various of the Artistic License. The intention is to make it as easy as possible for people to make use of the contained classes, but to encourage any changes they make to them to be rolled back into the Open Source distribution. The license also has provisions for renaming modified packages that are not rolled back into the main distribution, so that we can avoid problems like conflicting shared library names.

The current distribution of this code can always be found at the Angry Red Planet web site, http://www.angryredplanet.com/. Questions or comments should be directed either to Dianne Hackborn at <hackbod@angryredplanet.com>, or Eric Hackborn at <hackborn@angryredplanet.com>.

# Contents

The main purpose of this current distribution is to make available our layout class library for people to play with and comment on, and to provide all of the libraries needed to compile the ArpTelnet application.

Please be aware that this is something like an 0.4 release of this code. All of the documentation here has been fairly quickly put together -- you will need to look through the headers and maybe sometimes (okay, probably always) even the source code to really use it. We hope to get it cleaned up a bit, with a lot more documentation, but it is going to take time. Inspite of that, hopefully it will be useful "as-is" to some people out there; and if you have any questions or comments, do please contact us!

The following main pieces are included in this package:

## ArpCollections

This is a small set of various collection classes we have developed. Probably the most useful to the rest of the world are the template classes `ArpVectorI`, `ArpSTLVector`, and `ArpPtrVector`: these are intended to supply an "abstract vector" interface that can be exposed in methods in public interfaces (particularily those in shared libraries), as well as a couple common implementations of it.

## ArpKernel

This is our "core" set of classes -- it is basically a miscellaneous grab-bag of things that are useful in many other places. Included here are wrappers around messages and rgb_color structures, a class for iterating over multiple directories, a helper for managing add-ons, a generic implemention of "configuration panels" in an add-on, a smattering of debug macros, reference counting, and even Our Very Own String Class.

## FFont

This is the FFont class I previously released, which provides a BFlattenable method for BFont objects.

## ArpLayout

This is one of the the main parts of the current distribution, the BView layout classes. These provide a common framework for creating control layouts that are automatically font sensitive and resizeable.

## ArpTerminal

This library contains a complete "terminal widget" with add-on emulators and other spiffy stuff. The terminal can be used at varying levels -- from a raw class with little support (ArpCoreTerminal), to a full-fledged "terminal with add-on emulators and remote device protocol" (ArpRemoteTerminal). The library does not include any actual emulator implementations (see the ArpTelnet source distribution for the VT200 emulator), nor remote devices (see the ArpNetwork library for a TELNET device, and the ArpTelnet distribution for a "shell" device).

## ArpNetwork

This library mostly contains classes for working with sockets that are soon to be obsoleted by the new Genki network classes. It is included here because it also contains the ArpTelnet class, a remote device for ArpCoreTerminal that implements the TELNET protocol.

## Other Stuff

In addition to the above class libraries, there are a couple other pieces to help in building and managing the distribution. The `makefiles` directory contains some common makefile pieces that the other parts of the package make use of to build themselves. The `tools` directory contains some scripts that we use internally to manage the distribution. (Being only two people, we don't have a need yet for a full blown change management system -- so we wrote these scripts just to help in passing changes back and forth to each other.)

# Building

> Note: if you just want a quick peek at what the ArpLayout library can do, you might to download one of the binary distributions, which includes just a pre-compiled binary of the ArpLayout test program.

The libraries are only distributed in source code form, so before using them you will have to build them. (To just build the ArpTelnet application, download the ArpTelnet source distribution and follow the direction there.) To build the ArpLayoutable library test program, perform the following steps:

1. Open a Terminal window.
2. Change your current directory (cd) to the ARP/ArpTest/ArpLayout directory.
3. Enter "make release".

After much grinding, you should end up with the ArpCollections, ArpKernel, and ArpLayout libraries in the ArpLib directory, and the ArpLayout test program in ArpTest/ArpLayout. Right now, there are very few test programs or examples, so the only thing for you to immediately play with is the ArpLayout test program.

To do development, you should build a version of the library with debugging symbols. To accomplish this, run a "make clean" and then a plain "make" in the root ARP directory. This will build all of the libraries in the distribution, including ArpTerminal and ArpNetwork.

# Copyright

All files and code contained in this package are Copyright ©1999 Angry Red Planet, except where otherwise noted.

The files contained here-in are distrubuted under a modifed form of the Artistic License. See the file `@License.html` or `@License.txt` for a copy of this license.