\section{The XPCE GUI system for Prolog} \label{sec:xpce} \index{GUI}\index{XPCE}\index{Graphics}\index{Window interface}% \index{X11}% The \href{http://www.swi-prolog.org/packages/xpce/}{XPCE GUI system} for dynamically typed languages has been with SWI-Prolog for a long time. It is developed by Anjo Anjewierden and Jan Wielemaker from the department of SWI, University of Amsterdam. It aims at a high-productive development environment for graphical applications based on Prolog. Object oriented technology has proven to be a suitable model for implementing GUIs, which typically deal with things Prolog is not very good at: event-driven control and global state. With XPCE, we designed a system that has similar characteristics that make Prolog such a powerful tool: dynamic typing, meta-programming and dynamic modification of the running system. XPCE is an object-system written in the C-language. It provides for the implementation of methods in multiple languages. New XPCE classes may be defined from Prolog using a simple, natural syntax. The body of the method is executed by Prolog itself, providing a natural interface between the two systems. Below is a very simple class definition. \begin{code} :- pce_begin_class(prolog_lister, frame, "List Prolog predicates"). initialise(Self) :-> "As the C++ constructor":: send_super(Self, initialise, 'Prolog Lister'), send(Self, append, new(D, dialog)), send(D, append, text_item(predicate, message(Self, list, @arg1))), send(new(view), below, D). list(Self, From:name) :-> "List predicates from specification":: ( catch(term_to_atom(Term, From), _, fail) -> get(Self, member, view, V), current_output(Old), pce_open(V, write, Fd), set_output(Fd), listing(Term), close(Fd), set_output(Old) ; send(Self, report, error, 'Syntax error') ). :- pce_end_class. test :- send(new(prolog_lister), open). \end{code} \noindent Its 165 built-in classes deal with the meta-environment, data-representation and---of course---graphics. The graphics classes concentrate on direct-manipulation of diagrammatic representations. \paragraph{Availability.} XPCE runs on most Unix\tm{} platforms, Windows~95/98/ME, Windows~NT/2000/XP and MacOS X (using X11). In the past, versions for Quintus- and SICStus Prolog as well as some Lisp dialects have existed. After discontinuing active Lisp development at SWI the Lisp versions have died. Active development on the Quintus and SICStus versions has been stopped due to lack of standardisation in the Prolog community. If adequate standards emerge we are happy to actively support other Prolog implementations. \paragraph{Info.} further information is available from \url{http://www.swi-prolog.org/packages/xpce/} or by E-mail to \email{info@www.swi-prolog.org}.