Software Design:

NSZephyr is designed to implement a quality user interface using Apple's Foundation and AppKit toolkits, without rewriting any code already provided in MIT's source distribution.  As such, NSZephyr, wholly incorporates MIT's zwgc client, running it in a thread which notifies the application when a new message arrives.  The result is that the vast majority of the code in NSZephyr has little to no knowledge of the zephyr protocol, or zwgc's internals, and that means the application is relatively simple in design.  The following classes implement NSZephyr:

 * ZephyrApplication is the main application class.  It launches the zwgc thread and instantiates the viewer. ZephyrApplication is written such that it's a simple matter to add a preference which lists alternatives to MessageBrowser if a different viewer (eg. a windowgram viewer) is desired.

 * ZephyrClient is a static (uninstantiated) class which implements the methods which run the zwgc thread and pass messages from the background thread to the application.

 * ZephyrMessage encapsulated the notion of a zephyr message and it's attributes.

 * NewMessageController handles the message sending interface.

 * MessageBrowser is the default message viewer.  It presents messages to the user in a single window with a class browser.

Additionally, there are three functional source files:

 * zwgc_driver.m implements the zwgc output driver which sends messages to ZephyrClient.

 * message_parser.m implements the scribe-format and HTML-format parsing routines use in zwgc_driver.m.

 * NSZephyr_main.m launches the application.

All code that knows about zephyr internals is limited to three files: ZephyrClient.m (zwgc), zwgc_driver.m (output), message_parser (formatting).

	-Wilfredo Sanchez
	 wsanchez@apple.com
	 tritan@mit.edu
