by Manolis Katevenis and Christos Georgis
The Labyrinth System, or "Laby" for short, is a general-purpose graphical editor for hierarchical designs consisting of interconnected, parametrized cells. Its internal data base explicitly maintains the connection (dependency, constraint) information. Laby was designed and implemented in the Institute of Computer Science, FORTH.
The components of the drawings (cells) have input and output parameters (ports). Primitive cells are procedures that read the values of their input ports as input arguments, compute the values of their output ports, and draw their shape (based on their input values) on a window. All cells do not need to be visible on the drawing - some of them may perform computational or other tasks. Port values may be geometrical points or other arbitrary types (e.g. strings, numbers, user defined types). Composite cells also have input/output ports; they contain other cells (primitive or composite), interconnected in an arbitrary graph. Connections between ports of cells mean equality of port values for Laby (they may mean different things in different application domains). To maintain these equalities, i.e. to propagate changes to whichever cell is affected, Laby includes an event-driven evaluator.
Laby is implemented in C++, using an object oriented organization. Its graphical part operates under the X window system (X version 11.5 or later), using the Athena (or alternatively Motif 1.1 or later) widget set. Laby can be extended by defining new port-value types, new primitive (visible or invisible) cells with arbitrary functionality, or by linking it with other programs. Thus, Laby can be tailored to suit various specific needs and serve as the core of graphical and computer-aided design (CAD) tools for various environments. It provides a programmatic interface which enables tool developers to take advantage of its functionality and create hierarchies of cells which the tools may manipulate and interpret in their own way.
Labyrinth is provided with an interactive graphical editor, which is in fact just an application built on top of its open core. It is menu driven, and provides palettes and toolboxes. It is based on a command language that supports dynamically-typed variables, run-time macro definition, conditionals, iteration and an easy user-defined mechanism for binding commands to shorthands.
The Labyrinth System is already being used by other ICS-FORTH tools, such as the "Semantic Index System (SIS)" which uses its programmatic interface to edit its graphical entities and interpret its semantic network. The Labyrinth system can also be used for schematic drafting in a electronic publishing environment, where the user can design and add constraints and dependencies between the parts of his/her drawing, thus making the modification of the drawing easier and more efficient. Laby may also be used for educational purposes, for example demonstrating geometric constructions.
Christos Georgis and Manolis Katevenis
Tel: +30 81 391 600