# ManaGeR

ManaGeR or MGR is an early windowing system originally designed and developed for Sun 2/120 workstations in 1984 by Stephen A. Uhler, then at Bellcore.
MGR features overlapped, asynchronous windows and an applications interface that was both machine and network independent.
Each MGR window has support for both character terminal operations as well as basic graphics operations. It is controlled by mousing pop-up menus, by keyboard interaction, and by escape sequences written on pseudo-terminals by client software.
The system was presented at the USENIX Fourth Computer Graphics Workshop in 1987 as "MGR - a Window System for UNIX". The entire MGR source code was posted to the comp.sources.unix Usenet newsgroup, Volume 17, Issue 1, in January 1989.
Internally, MGR was pronounced as munger referring to mung, although the users pronounced each letter.

## Features

MGR provided each client window with:
* termcap-style terminal control functions, graphics primitives such as line and circle drawing;
* vector drawing operations could be done with either absolute (pixel-based) or fixed relative coordinates. The latter allowed window contents to scale when a window was resized without recalculation of coordinates.
* facilities for manipulating bitmaps, fonts, icons, and pop-up menus;
* commands to reshape and position windows; and a message passing facility enabling client programs to rendezvous and exchange messages. Client programs may ask to be informed when a change in the window system occurs, such as a reshaped window, a pushed mouse button, or a message sent from another client program. These changes are called events. MGR notifies a client program of an event by sending it an ASCII character string in a format specified by the client program. Existing applications can be integrated into the windowing environment without modification by having MGR imitate keystrokes in response to user defined menu selections or other events.
All these features worked equally well if the client program was executing on the same computer as the MGR server or if the client was executed on a remote computer. The type of connection was insignificant. You could use telnet over TCP/IP or a modem dial-up connection equally well, for instance. Bitmaps, however, presented issues on lower bandwidth connections. To use a bitmap, it had to be downloaded to the window manager over the communications channel. Bitmap heavy applications would often download bitmaps to be used at application start, which could make an application look like it was hung. Since applications used input and output streams, there could be problems when unexpected input arrived, say from line noise or from a system message.
External programs such as Stephen Uhler's own MTX and Howard Chu's rmgr made it possible to multiplex several windows over a single connection to a remote host, even using a normal modem dial-up connection.
A later feature, $HOME MOVIE, made it possible to record user interaction for later display.

## Ports

MGR ran on at least these systems: SunOS on Sun workstations (the original development platform), Apple Macintosh, Unix System V on the AT&T UNIX PC, Ultrix on the DECstation 3100, MiNT on the Atari ST, OS-9, Coherent, Linux, FreeBSD and VSTa.
The initial Macintosh port was done on a Macintosh Plus computer using the Lightspeed C compiler. It was a hybrid port in that many of the low-level operations were passed on to QuickDraw instead of using the internal bitmap code. The application did not conform to the Macintosh user interface guidelines as it took over the entire screen. The initial version used either available serial port as the communications channel. A later update of the port could use either Ethernet or serial communications.