\chapter{Einleitung}

\section{Was ist die libCUI}

    Die Abk"urzung CUI steht f"ur Character User Interface. Gemeint
    ist damit eine bedienerfreundliche Gestaltung der 
    Benutzeroberfl"ache, die im Gegensatz zum GUI (Grapical User 
    Interface) auf einer reinen Zeichendarstellung beruht und
    vornehmlich f"ur die Textkonsole gedacht ist.
    
    Die libCUI ist eine auf curses (GNU ncurses) basierende
    Bibliothek, zur einfachen und schellen Entwicklung von 
    CUI-Anwendungen. Programmiert wird dabei mit Ansichten, die
    in der libCUI Terminologie als Fenster bezeichnet werden.
    
    Zentraler Bestandteil der Bibliothek ist eine Art 
    Fenstermanager der die Darstellung und Verwaltung von
    Fenstern, sowie die Steuerung der Tastatur- und Mauseingabe
    "ubernimmt.
    
    Aufbauend auf einer generischen Fensterfunktionalit"at, kann
    sich der CUI-Programmierer seine eigenen Ansichten durch
    die Vorgabe von Fensterstilen und durch die Implementierung 
    von Hook-Funktionen erstellen. Daneben sind
    auch eine Reihe vordefinierter Fensterklassen verf"ugbar,
    die auf einfache Weise in eigene Anwendungen eingebunden
    werden k"onnen. Dies sind im allgemeinen Kontrollelemente
    wie Textfelder, Buttons und Listboxen.
    
    W"ahrend die libCUI dem Programmierer das Update-Handling
    der Benutzerschnittstelle, sowie die Tastatur- und
    Mausbehandlung vollst"andig abnimmt, werden f"ur 
    die Textausgabe selbst die Funktionen der ncurses-Bibliothek
    verwendet. Es sind daher Grundkenntnisse dieser API
    erforderlich um erfolgreich Anwendungen mit der libCUI 
    erstellen zu k"onnen.
    
    Das vorliegende Dokument ist keine vollst"andige Referenz 
    der CUI-API sondern versucht ein didaktischer Leitfaden zu sein,
    der den Programmierer schrittweise an den Umgang mit der
    Bibliothek heranf"uhrt. F"ur eine vollst"andige Liste aller
    Funktionsprototypen und Datentypen sein auf die Datei ''cui.h'' verwiesen,
    die sich unter ''/usr/include'' befinden sollte.
    
\section{Historie}

    Alles begann damit, dass f"ur eisfair ein auf curses basierendes
    Programm zur Darstellung des Systemmen"us entwickelt wurde. 
    Sp"ater kamen weitere Programme, wie z.B. der Konfigurationseditor
    und ein Dokumenten-Viewer dazu, die auf gemeinsamen
    Code-Dateien beruhten um redundante Code-Pflege zu vermeiden.
    Dies wurde jedoch mehr und mehr zum Problem. Zum einen waren die
    bisherigen Dateien konzeptionell nicht daf"ur vorgesehen, um
    universell einsetzbar zu sein, zum anderen wurde das Projektverzeichnis
    durch weitere Programme immer un"ubersichtlicher.
    
    Um hier eine Trennung der Projekte und zugleich eine 
    Verallgemeinerung der zugrunde liegenden Programmroutinen zu
    erreichen wurde die libCUI entwickelt. Dabei wurde darauf geachtet,
    dass auch mit der neuen Basis die eisfair-typische Darstellung
    der Anwendungen weiterhin gewahrt bleibt.
    
    \hinweis{Zum Zeitpunkt der Erstellung dieses Dokuments ist die libCUI 
    noch sehr jung und noch nicht alle eisfair-Programme wurden bisher
    auf die Verwendung der Bibliothek umgestellt. Es ist noch immer
    damit zu rechnen, dass sich die API grundlegend "andert, weshalb
    in diesem Stadium dringend empfohlen wird, eigene Programme 
    statisch mit der libCUI zu verlinken. Siehe dazu auch das Kapitel 
    \jump{build}{''"ubersetzen von libCUI Anwendungen''}}

\section{Lizenz}

    Die libCUI unterliegt der GPL.
