| [Anfang] | [Inhalt] | [Index] | [ ? ] |
Dies ist die Bedienungsanleitung für AKFAvatar (Version 0.18.0, 2009-11-08).
AKFAvatar ist eine lustige Benutzeroberfläche für Textkonsolen-Programme, ein Text-Betrachter, eine Skript-Sprache um Demos zu erstellen und eine Programmbibliothek um dafür Programme in C oder Pascal zu schreiben.
Homepage: http://akfavatar.nongnu.org/
Copyright © 2007, 2008, 2009 Andreas K. Förster, http://akfoerster.de/
Vervielfältigung und Verbreitung dieser Anleitung, mit oder ohne Veränderungen, sind ohne Gebühr in jeglicher Form erlaubt, solange der Copyright Vermerk sowie dieser Hinweis erhalten bleiben. Diese Anleitung wird so wie sie ist, ohne jegliche Garantie angeboten.
| 1. Überblick über AKFAvatar | ||
| 2. AKFAvatar installieren | ||
3. Verwendung des Werkzeugs avatarsay | ||
| 4. Wie man es unter GNOME verwendet | ||
| 5. Dateiformate und andere Angaben | ||
| 6. Programmierung mit AKFAvatar | ||
| A. Pascal Referenz | Referenz für Pascal | |
| B. C Referenz | Die C Header Datei akfavatar.h
| |
| C. Namen der Farben | ||
| Index | Index für diese Dokumentation |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
AKFAvatar ist ein graphisches Programm und eine Bibliothek, bei denen ein Avatar auf dem Bildschirm erscheint und dem Benutzer Sachen in einer Sprechblase mitteilt. Man kann auch Audio-Aufnahmen abspielen lassen, so dass der Benutzer sogar hören kann, was der Avatar sagt.
AKFAvatar kann auf verschiedene Arten eingesetzt werden.
avatarsay als Text-Terminal verwenden,
so wie xterm, nur lustiger. Im Gegensatz zu xterm
läuft es eventuell auch ohne einen X-Server.
(Für Windows steht diese Funktion nicht zur Verfügung.)
avatarsay -x öffnen
lassen.
(Für Windows steht diese Funktion nicht zur Verfügung.)
avatarsay kann als lustiger Text-Betrachter verwendet
werden, mehr oder weniger wie more oder less.
avatarsay kann noch viel mehr. Er kann als einfache
Skript-Sprache verwendet werden, mit der man Demos erstellen kann, die man zum
Beispiel an Info-Ständen oder in Schaufenstern zeigen kann.
Keine Angst, das klingt viel komplizierter als es ist. Vielleicht sollte ich eher sagen, man kann seine Texte mit gelegentlichen Anweisungen aufpeppen.
libakfavatar, die man von
Programmiersprachen aus verwenden kann. Zur Zeit werden Free Pascal,
GNU-Pascal und C-kompatible Sprachen unterstützt. Insbesondere die
Sprache Pascal ist für Anfänger geeignet, die programmieren lernen wollen.
Die Bibliothek ist so einfach zu verwenden, wie Kommandozeilen-Programme zu
schreiben — es macht aber wesentlich mehr Spaß!
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Wenn ein AKFAvatar-Programm in einem Fenster läuft, kann man natürlich
einfach den Schließen-Knopf des Fenster-Managers betätigen, um es zu beenden.
Man kann das Programm aber auch jederzeit mit der Tastenkombination
<Alt>+<Q> abbrechen, zum Beispiel, wenn es im Vollbild-Modus läuft.
Meistens kann man das Programm auch einfach mit der <Esc>-Taste beenden.
Diese Taste kann jedoch auch für andere Aufgaben reserviert sein, zum Beispiel
im Terminal-Modus von avatarsay.
Man kann jederzeit die <Pause>-Taste betätigen, um die Programmausführung anzuhalten. Durch den Druck auf eine andere Taste, kann die Pause wieder aufgehoben werden.
Auf manchen Systemen kann man die Tastenkombinationen <Alt>+<Enter>
oder <Strg>+<Alt>+<F> verwenden um zwischen der Darstellung im
Fenster oder der Vollbild-Darstellung hin und her zu schalten. Häufig kann
man dazu auch einfach die Taste <F11> drücken. Diese Taste kann
jedoch auch für andere Aufgaben reserviert sein, zum Beispiel im Terminal-Modus
von avatarsay.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Obwohl auch Pakete mit Binärdateien zur Verfügung stehen, sollte man AKFAvatar vom Quelltext-Paket installieren um das vollständige Potential der Software ausnutzen zu können.
Dieses Kapitel beschreibt die Installation für POSIX-kompatible Betriebssysteme, hauptsächlich für GNU/Linux. Es gibt ein paar Hinweise für andere Systeme am Ende dieses Kapitels.
Kurz gesagt: ‘./configure && make && make install’
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Natürlich benötigt SDL eine grafische Umgebung. Zum Beispiel das X-Window-System oder einen Linux Framebuffer...
Dies ist auch auf Systemen erforderlich, welche nicht auf dem Kernel Linux basieren, aber nicht unter Windows. Unter Debian und davon abgeleiteten Distributionen muss hierfür das Paket “ncurses-term” installiert sein.
X-Pixmaps (XPM), X-Bitmaps (XBM) und unkomprimierte BMP Dateien kann man immer verwenden. Mit SDL_image stehen viele weitere Dateiformate für Bilder zur Verfügung. SDL_image kann auch nach der Installation dieses Paketes noch nachinstalliert werden.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Zunächst sollte man ‘./configure’ aufrufen. Wenn das klappt, kann man ‘make’ eingeben, um die ausführbaren Programme zu kompilieren. Es werden zwei Varianten von avatarsay kompiliert: 1. “avatarsay” ist speziell dafür erstellt worden, dass man es auch ohne Installation verwenden kann. 2. “avatarsay-d” wird nur funktionieren, wenn man zuvor die Bibliothek installiert hat. Diese Variante wird für die Installation verwendet.
Auf einigen Systemen muss man den Parameter ‘--with-iconv’ bei
./configure mit angeben, um vollständige iconv-Unterstützung zu
erhalten (iconv ist ein Zeichenkodierungs-Konverter). Dieser Parameter wird
nicht benötigt, wenn bereits die SDL so konfiguriert wurde, dass sie ein
externes iconv verwendet. Auf manchen Systemen ist dies jedoch nicht der
Fall, obwohl ein iconv existiert (zum Beispiel, weil evtl. verschiedene
Implementierungen existieren).
Diese Software (AKFAvatar) versucht den richtigen Namen für die interne
Kodierung von wchar_t zu erraten. Das klappt aber nicht in jedem
Fall. Man kann dann diese Information zusammen mit dieser Option angeben,
und zwar folgendermaßen: ‘--with-iconv=UCS-4LE’. Auf vielen Systemen
kann man mit dem Befehl iconv -l eine Liste erhalten. Wenn
‘WCHAR_T” oder “wchar_t” auf dieser Liste steht, sollte man es damit
versuchen.
Wenn man weiß, dass SDL_image auf jeden Fall installiert ist, kann man den Parameter ‘--enable-link-sdl-image’ angeben. Dadurch wird die Bibliothek direkt mit SDL_image verlinkt, anstatt dass diese zur Laufzeit nachgeladen werden muss.
Um ältere SDL-Versionen auf dem Ziel-Computer zu unterstützen, könnte
es notwendig sein, den Parameter ‘--with-oldsdl’ bei
./configure zu verwenden. Das ist jedoch nicht notwendig, wenn
man das Programm nur auf dem selben Computer verwenden will, auf dem
man es kompiliert.
Wenn man es auf Geräten mit einer kleinen Anzeige verwenden will (zB. Netbooks),
kann man den Parameter ‘--enable-size=vga’ mit configure verwenden.
Der Wert vga steht dabei für eine Auflösung von 640*480 Pixeln.
Das Programm avatarsay ist ein Text-Betrachter und eine simple
Skript-Sprache. Man kann sich zum Beispiel die Installations-Anleitung
mit diesem Programm folgendermaßen ansehen:
‘./avatarsay --pager INSTALL’.
Man kann avatarsay jederzeit mit der Taste <Esc> beenden.
Auf einigen Systemen kann man zwischen dem Vollbild-Modus und dem
Fenster-Modus mit der Taste <F11> umschalten. Auch die
<Pause>-Taste ist hier sehr nützlich.
In dem Paket befinden sich ein paar Beispiel-Skripte. Zum Beispiel sollte man mal ‘./fsdemo-de.avt’ ausprobieren. Man kann die Datei ‘fsdemo-de.avt’ in einem Text-Editor öffnen, um sich anzusehen, wie man so etwas selber umsetzen kann...
Man kann es auch als ein lustiges Manpage-Leseprogramm einsetzen. Hierfür gibt man zum Beispiel den Befehl ‘avtman man’ ein...
Bei GNU/Linux sollte man zunächst sicher stellen, dass ‘/usr/local/lib’
in der Datei ‘/etc/ld.so.conf’ aufgeführt ist; entweder direkt, oder
indirekt. Ebenso sollte man sicher stellen, dass ‘/usr/local/bin’
in der PATH Umgebungsvariablen mit eingetragen ist.
Nun sollte man sich als root einloggen und ‘make install’ eingeben um das Ganze nach ‘/usr/local’ zu installieren. Falls man wenig Speicherplatz auf der Festplatte hat, kann man stattdessen auch ‘make install-strip’ verwenden. Das installiert die Binärdateien ohne Debugger-Informationen.
Wenn man das Ganze später wieder deinstallieren will, kann man dann den Befehl ‘make uninstall’ verwenden.
Mit dem Befehl ‘make example’ kann man das Programm ‘example.c’ kompilieren. Die Datei ‘example.c’ ist ein Beispiel, das man als Ausgangspunkt für eigene Programme verwenden kann.
Lösung: zunächst kann man versuchen das Verzeichnis ‘/usr/local/lib’,
oder wohin man das auch immer installiert hat, bei der Umgebungs-Variablen
LD_LIBRARY_PATH mit aufzuführen:
‘export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib’.
Als dauerhaftere Lösung sollte man sicher stellen, dass ‘/usr/local/lib’
direkt oder indirekt in der Datei ‘/etc/ld.so.conf’ aufgeführt ist.
Dann sollte man mit root-Rechten den Befehl ldconfig aufrufen.
avatarsay nicht richtig
angezeigt.
Lösung: Es gibt verschiedene Zeichensatz-Kodierungen. Man könnte versuchen die Parameter ‘--utf-8’ oder ‘--latin1’ mit anzugeben.
AKFAvatar ist mit FreeBSD 6.2 kompilierbar. Um iconv-Unterstützung zu
erhalten, muss man libiconv installiert haben und
‘./configure --with-iconv’ verwenden.
Windows wird nur teilweise unterstützt. Ich stelle Binärdateien zur Verfügung, die mit einem Crosscompiler erstellt wurden. Da ich es nie direkt unter Windows selber kompiliert habe, kann ich dazu wenig sagen. Tut mir Leid.
Für solche Systeme wird ein iconv-Ersatz in der SDL verwendet.
Der Zeichensatz Windows-1252 (häufig als “ANSI” bezeichnet, er hat aber
nichts mit ANSI zu tun) wird nicht vollständig unterstützt. Dieser
Zeichensatz ist jedoch teilweise kompatibel zu dem Standard ISO-8859-1,
welcher unterstützt wird. Einige Zeichen entsprechen jedoch nicht dem
Standard. Falls diese Zeichen unbedingt benötigt werden, kann man den
Text als UTF-8 abspeichern, welches ebenfalls unterstützt wird.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
avatarsayDieses Kapitel erklärt die verschiedenen Anwendungsbereiche des
Werkzeugs avatarsay.
3.1 Einsatz von avatarsay als lustiges Text-Terminal | Einsatz als lustiges Text-Terminal | |
3.2 Einsatz von avatarsay als lustiger Text-Betrachter | Einsatz als lustiger Text-Betrachter | |
| 3.3 Wie man seinen Text in ein Programm verwandelt | ||
| 3.4 Wie man ein anderes Avatar-Bild verwendet | ||
3.5 Die genaue Verwendung von avatarsay | ||
3.6 Anweisungen für das Programm avatarsay | ||
| 3.7 Pipes | ||
| 3.8 Archiv-Dateien |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
avatarsay als lustiges Text-TerminalDas Programm avatarsay kann auf POSIX-kompatiblen Systemen
(nicht unter Windows) als lustiges Text-Terminal und als ein Frontend für
Textkonsolen-Programme verwendet werden.
Man kann im Hauptmenü den Punkt “Terminal-Modus” auswählen, oder man kann
den Befehl avatarsay mit der Option ‘--terminal’, oder kurz
‘-t’ aufrufen. Damit bekommt man eine Terminal-Sitzung mit der Shell,
welche auf dem System für das Benutzerkonto eingerichtet ist.
Falls man keine Farben in der Sprechblase mag, kann man außerdem die Option
‘--nocolor’, oder kurz ‘-b’ verwenden.
Falls man eine andere Shell oder ein anderes Startverzeichnis bevorzugt, kann
man über die Umgebungsvariablen SHELL, beziehungsweise HOME
andere Werte einstellen. Das Programm kommt aber auch damit klar, wenn diese
Umgebungsvariablen nicht gesetzt sind.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Man kann avatarsay als Benutzeroberfläche für Textkonsolen-Programme
verwenden.
Dazu verwende man die Option ‘--execute’, oder kurz ‘-x’, gefolgt
vom Namen des auszuführenden Programmes. Man kann dies natürlich auch mit der
Option ‘--nocolor’ kombinieren. Optionen, die nach dem Programmnamen
angegeben werden, werden an das aufgerufene Programm weitergeleitet. Das
bedeutet, dass die Reihenfolge der Optionen wichtig ist.
Zum Beispiel, um sich mit Hilfe von ssh in einen anderen Rechner
einzuloggen:
avatarsay --execute ssh example.net |
um eine E-Mail mit dem Programm mutt zu schreiben:
avatarsay -bx mutt pal@example.net |
um die E-Mail mit einem Mailprogramm auf dem anderen Rechner zu erstellen:
avatarsay -bx ssh -t example.net mutt pal |
Zu beachten: Wenn man ssh auf diese Weise einsetzt, muss man die
Option ‘-t’ bei ssh mit angeben.
um mit dem Programm lynx im Web zu surfen:
avatarsay -bx lynx |
Wie man sieht, kann man wirklich ziemlich ausgefallene Sachen damit machen.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Das Programm avatarsay simuliert die Text-Konsole des Kernels Linux.
Darum wird die Umgebungsvariable TERM entweder auf linux oder auf
linux-m eingestellt.
Da dieses Verhalten für einige Verwirrungen sorgen könnte, versuche ich hier mal zu erklären, was das nicht bedeutet:
TERM auf anderen
Systemen angepasst werden sollte. Sie sollte einfach so bleiben, wie sie ist.
Das System sollte jedoch Einträge für linux und linux-m in seiner
Terminal-Datenbank haben.
console_codes gelesen, sowie die Einträge in
Terminfo und Termcap Datenbanken verglichen und einige andere Anleitungen
gelesen, um mir Informationen zu beschaffen.
ANSI X3.64 (ECMA-48). Aber es werden einige Teile
weggelassen und andere Sachen hinzugefügt, wie zum Beispiel Tastatur-Codes.
Darum ist die Einstellung linux wirklich die richtige.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Die Terminal-Emulation von avatarsay unterstützt
Erweiterungen, die weder in ANSI X3.64 (ECMA-48) vorkommen,
noch von der Terminal-Emulation von Linux unterstützt werden.
Um diese Erweiterungen in eigenen Programmen zu verwenden, wird empfohlen,
zunächst zu überprüfen, ob die Umgebungsvariable AKFAVTTERM gesetzt
ist.
CSI ? 56 hschaltet den Modus für langsame Textausgabe an (veraltet: besser APC verwenden)
CSI ? 56 lschaltet den Modus für langsame Textausgabe aus (veraltet: besser APC verwenden)
CSI 8 ; Höhe ; Breite tändert die Höhe und Breite der Sprechblase (Anzahl der Zeichen).
Der Wert 0 steht für das jeweilige Maximum.
(Dies ist tatsächlich kompatibel mit dem original xterm)
APC Befehl STsendet einen Befehl an avatarsay. See section Anweisungen für das Programm avatarsay.
Erläuterungen:
ist das Steuerzeichen 1Bhex
kann entweder durch die Steuerzeichen ESC und [ ausgelöst
werden, oder in einigen Zeichensätzen durch das einzelne Steuerzeichen
9Bhex.
kann durch die Steuerzeichen ESC und _ ausgelöst werden,
oder in einigen Zeichensätzen durch das einzelne Steuerzeichen
9Fhex.
kann durch die Steuerzeichen ESC und \ ausgelöst werden,
oder in einigen Zeichensätzen durch das einzelne Steuerzeichen
9Chex.
Die Varianten mit ESC sind vorzuziehen. Insbesondere in UTF-8
hat man durch die einzelnen Steuerzeichen keinen Vorteil, da diese auch
mit zwei Byte kodiert werden müssen.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
avatarsay als lustiger Text-BetrachterDas Programm avatarsay kann als lustiger Text-Betrachter
verwendet werden. Wenn man eine Text-Datei hat, sagen wir mal
‘MeinText’, dann kann man sie sich mit dem Befehl
‘avatarsay MeinText’ ansehen.
Ausprobieren! Sofort! ;-)
Das ist doch einfach, oder? Wenn die Textdatei nicht richtig für das
verwendete System kodiert ist, könnte man Probleme bei Zeichen bekommen
haben, die in ASCII nicht vorkommen, wie die deutschen
Umlaute (ä, ü, ü, ß).
Nun, es gibt wie gesagt verschiedene Kodierungen dafür. Die am
meisten verwendeten Kodierungen für deutsche Texte sind
ISO-8859-1 (auch bekannt als Latin-1) und UTF-8.
Wenn man also Probleme mit deutschen Umlauten oder anderen Zeichen
hat, kann man mal den Parameter ‘--encoding=UTF-8’ oder
‘--encoding=ISO-8859-1’ ausprobieren —
Wie in diesem Beispiel: ‘avatarsay --encoding=ISO-8859-1 MeinText’.
Nun, manchmal möchte man nicht, dass der Text in einem kontinuierlichen
Textfluss dargestellt wird. Man kann seinen Text deshalb mit Trennlinien
strukturieren. Eine Trennlinie ist eine Zeile wie diese: ‘---------’.
Die Zeile muss in der aller ersten Spalte beginnen und sie muss mindestens
drei aufeinander folgende Bindestriche (U+002D) umfassen. Natürlich
kann man auch mehr als drei benutzen. Wenn avatarsay auf eine solche
Trennlinie stößt, wartet es es eine Weile und fängt dann eine neue Seite an.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Man muss nicht unbedingt immer den Befehl avatarsay von Hand
eingeben um seine Texte damit zu betrachten. Man kann auch den Text
selbst in ein “Programm” verwandeln. Wie das funktioniert hängt vom
verwendeten Betriebssystem ab.
Auf einem POSIX-kompatiblen System, wie dem GNU-System
kann man eine spezielle Zeile an den Anfang der Datei einfügen. Diese
Zeile sieht zum Beispiel so aus: ‘#! /usr/local/avatarsay’.
Natürlich sollte man darauf achten, dass man den richtigen Pfad angibt.
Dies muss die aller erste Zeile der Datei sein. Man kann eine oder
mehrere Leerzeilen nach dieser Zeile einfügen — diese werden ignoriert.
Danach muss man das Ausführungs-Bit bei der Text-Datei setzen. Das geht
folgendermaßen: ‘chmod +x MeinText’. Schon ist der Text selbst
ausführbar. Er akzeptiert fast alle Parameter, die auch
avatarsay akzeptiert.
Auf Systemen wie Windows oder ReactOS funktioniert diese Zeile nicht — sie schadet aber auch nicht. Auf diesen Systemen muss man einen anderen Trick anwenden. Man könnte die Datei so umbenennen, dass sie eine spezielle Datei-Endung bekommt; zum Beispiel ‘.avt’. Nun muss man sein System so konfigurieren, dass die Datei-Endung ‘.avt’ mit dem Programm ‘avatarsay.exe’ verknüpft wird. Dann kann man auf seinen Text doppelklicken und er wird ausgeführt.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Bisher haben wir immer ein und denselben Avatar gesehen. — Nun, das ist nur der Vorgabe-Avatar. Man kann ihn austauschen.
Es gibt verschiedene Methoden um den Avatar bei avatarsay
auszutauschen:
Man kann es allgemein einstellen, dass der Aufruf von avatarsay
immer den neuen Avatar verwendet. Dies kann man entweder über eine
Umgebungsvariable erreichen, oder indem man eine systemweite
Konfigurationsdatei erstellt.
Nun, zuerst sollte man die Umgebungsvariable ausprobieren. Das ist
einfach. Die Variable heißt AVATARIMAGE. Zum Beispiel mit der
GNU bash kann man die Variable folgendermaßen setzen:
‘export AVATARIMAGE=/usr/local/share/pixmaps/meinavatar.xpm’.
Wichtig: Man sollte immer den vollständigen Pfad angeben!
Wenn man eine Konfigurationsdatei verwenden will, erstellt man eine Datei mit dem Namen ‘/etc/avatarsay’ und folgendem Inhalt:
AVATARIMAGE=/usr/local/share/pixmaps/meinavatar.xpm |
Oder man kann das Bild für den Avatar auf einer Text-für-Text Basis
austauschen, indem man eine Anweisung in der Text-Datei verwendet. Das wird in
Anweisungen für das Programm avatarsay näher erläutert.
Welche Bilddatei-Formate von AKFAvatar unterstützt werden, hängt davon ab, welche Bibliotheken auf dem System installiert sind (siehe Abschnitt Dateiformate und andere Angaben).
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Das Avatar-Bild sollte natürlich einen transparenten Hintergrund haben. Leider unterstützen viele Bild-Formate keine Transparenz. Darum verwendet AKFAvatar einen Trick. Wenn das Avatar-Bild keine Transparenz hat, dann wird der erste Farbwert im Bild genommen, das ist der Farbwert in der oberen linken Ecke, und dieser Farbwert wird als transparent deklariert. Wenn man ein Bild für die Verwendung als Avatar vorbereiten will, sollte man also darauf achten, dass die obere linke Ecke “leer” ist und man sollte darauf achten, eine Hintergrund-Farbe zu wählen, die in dem Teil des Bildes, der sichtbar sein soll, nicht vorkommt. Man muss außerdem darauf achten, dass der Hintergrund “glatt” ist und nur einen einzigen Farbwert ohne jegliche Schattierungen erhält. Wegen dieser Voraussetzung ist übrigens das JPEG-Format nicht geeignet. Man kann nämlich in diesem Format niemals einen wirklich “glatten” Hintergrund bekommen.
Man sollte also möglichst Bild-Formate verwenden, die Transparenz unterstützen. AKFAvatar wird dann nicht in die Transparenz eingreifen. Es ist jedoch zu beachten, dass der oben beschriebene Trick angewendet wird, wenn das Bild keine Transparenz hat, unabhängig davon, ob das Bildformat Transparenz unterstützen würde.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
avatarsayDas genaue Aufruf-Format für avatarsay ist:
avatarsay [Optionen] [Text-Dateien] avatarsay [Optionen] --execute Programm [Programm-Optionen] |
Wenn Text-Dateien nur ein ‘-’ ist, dann liest das Programm von der Standard-Eingabe (‘stdin’) und es läuft nicht in einer Schleife.
Das Programm avatarsay unterstützt die folgenden Optionen:
--help-hzeige eine kurze Zusammenfassung der Aufruf-Optionen
--version-vzeige die Version des Befehls an
--terminal-tTerminal-Modus, dh. eine Shell in der Sprechblase ausführen
--execute-xein Programm in der Sprechblase ausführen
Es muss ein Programmname angegeben werden. Optionen hinter dem Programmnamen gelten für das aufzurufende Programm.
--nocolor-bkeine Farbe für auszuführende Programme und den Terminal-Modus
--window-wversuche das Programm in einem Fenster zu starten (Vorgabe)
--fullscreen-fversuche das Programm im Vollbild-Modus zu starten
--fullfullscreen-Fwie ‘-f’, aber verwende die aktuelle Bildschirm-Auflösung
Diese Option ist auch nützlich, wenn es nur einen Vollbild-Modus gibt,
aber die Bildschirm-Auflösung nicht umgestellt werden kann; zum Beispiel
mit dem VESA-Framebuffer des Kernels Linux.
Diese Option wird erst ab SDL Version 1.2.10 oder neuer unterstützt.
--encoding=Namedie Eingabe-Daten sind in der Kodieriung Name kodiert
Welche Kodierungen unterstützt werden, hängt von der
iconv-Implementierung des Systems ab. Auf einigen Systemen kann man
eine Liste mit dem Befehl iconv -l bekommen.
--latin1-ldie Eingabe-Daten sind in Latin-1 kodiert
--utf-8--utf8-u8-udie Eingabe-Daten sind in UTF-8 kodiert
--once-1nur einmal ablaufen (keine Schleife)
--popup-pPopup, dh. bewege nicht den Avatar langsam ins Bild
Dies kann man für schnelle Popup-Texte verwenden.
Um das Programm auch wieder schnell zu beenden, kann man die Anweisung
[stop] verwenden.
--no-delay-nkeine Verzögerung bei der Textausgabe
--raw-rden rohen Text ausgeben (keine Anweisungen oder Trennlinien beachten)
--ignoreeof-iignoriere Dateiende Situationen; dies sollte man verwenden, wenn die Eingabe nicht von einer Datei stammt
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Der Befehl avatarsay unterstützt die folgenden Umgebungsvariablen:
AVATARIMAGEBilddatei für den Avatar mit vollständigem Pfad
DATADIRdas Verzeichnis, in dem sich Bilder und Audio-Dateien befinden (hat keinen
Einfluss auf die Umgebungsvariable AVATARIMAGE)
LC_ALLLC_CTYPELANGdiese Variablen beeinflussen die Standard-Kodierung und die Sprache
SHELLdie bevorzugte Shell für den Terminal-Modus
HOMEdas bevorzugte Startverzeichnis für den Terminal-Modus
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Über eine Konfigurationsdatei namens ‘/etc/avatarsay’ kann man ebenfalls
Werte für AVATARIMAGE und DATADIR festlegen.
Beispiel:
AVATARIMAGE=/usr/local/share/pixmaps/meinavatar.xpm AVATARDATADIR=/usr/local/share/akfavatar |
Siehe auch Wie man ein anderes Avatar-Bild verwendet.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
avatarsayMit dem Programm avatarsay kann man auch einfache Demos erstellen,
ohne dafür eine Programmiersprache beherrschen zu müssen.
Eine Zeile, die mit einer Raute (#, U+0023) beginnt,
ist ein Kommentar. Diese Zeilen werden von dem Programm einfach
ignoriert. Achtung: Im Gegensatz zu anderen Skript-Sprachen
dürfen vor der Raute noch nicht mal Leerzeichen stehen.
Man kann seinen Text mit Trennlinien strukturieren. Eine Trennlinie ist
eine Zeile wie diese: ‘---------’. Die Zeile muss in der aller
ersten Spalte beginnen und sie muss mindestens drei aufeinander folgende
Bindestriche (U+002D) umfassen. Natürlich kann man auch mehr als
drei benutzen.
Eine Anweisung für ein avatarsay-Demo wird in eckige Klammern
geschrieben und muss in der aller ersten Spalte einer neuen Zeile anfangen.
Anmerkung: Frühere Versionen von avatarsay verwendeten einen
anderen Schreibstil.
Die meisten dieser Anweisungen können auch über die Terminal-Emulation
angesprochen werden. Aus der Shell heraus kann der Befehl avtcmd
verwendet werden, um Anweisungen an das Programm avatarsay zu schicken.
Zum Beispiel so: ‘avtcmd size 5, 40’. Man kann auch die Escape-Sequenz
APC aus eigenen Programmen oder Skripten heraus verwenden.
datadir Verzeichnismit dieser Anweisung kann man das Verzeichnis wechseln. Dies ist notwendig, um Bilder und Audio-Dateien zu laden.
Das Daten-Verzeichnis kann auch mit der Umgebungsvariablen
AVATARDATADIR eingestellt werden. Diese Anweisung hat Vorrang
vor der Umgebungsvariablen.
avatarimage Bild-Dateimit dieser Anweisung kann man ein anderes Bild für den Avatar festlegen
Man kann den Namen der Bild-Datei weglassen, um zum Vorgabe-Avatar
zurück zu wechseln. Bei Angabe von info wird ein kleines
Info-Symbol als Avatar verwendet. Die Angabe des Wertes none
entfernt den Avatar ganz. Dadurch erhält man die maximal mögliche Größe
für den Textbereich, aber es sieht halt langweilig aus.
Achtung: Diese Anweisung sollte benutzt werden, bevor der eigentliche Text anfängt. Diese Anweisung löscht auch den Avatarnamen.
Das Avatar-Bild kann auch mit der Umgebungsvariablen AVATARIMAGE
eingestellt werden. Diese Anweisung hat Vorrang vor der Umgebungsvariablen.
Welche Bilddatei-Formate von AKFAvatar unterstützt werden, hängt davon ab, welche Bibliotheken auf dem System installiert sind (siehe Abschnitt Dateiformate und andere Angaben).
avatarname Namesetzt einen Namen für den Avatar
encoding Kodierungnur für Demos: gibt die Kodierung des Textes an; zum Beispiel ‘ISO-8859-1’ oder ‘UTF-8’
Achtung: Diese Anweisung muss ziemlich am Anfang der Datei stehen. Man kann die Kodierung nicht mehr innerhalb des Textes verändern. (Das war in früheren Versionen noch möglich.)
Diese Anweisung kann nur bei ASCII-kompatiblen Kodierungen verwendet
werden, wie zum Beispiel die ISO-8859-Familie oder UTF-8.
Die Kodierungen UTF-16 (UCS2) und UTF-32 (UCS4)
können nicht auf diese Weise definiert werden. Diese Kodierungen werden
in der Regel jedoch automatisch erkannt. (Ältere Versionen von
avatarsay konnten mit diesen Kodierungen gar nicht umgehen.)
Welche Kodierungen unterstützt werden, hängt von der
iconv-Implementierung des Systems ab. Auf einigen Systemen kann man
eine Liste mit der Anweisung iconv -l bekommen.
title Titeländert den Titel des Fensters. Verwendet man die Anweisung ohne Angabe eines Titels, wird der Titel auf “AKFAvatar” zurück gesetzt.
scrolling off | onschaltet das automatisch Text-Scrollen aus oder ein.
slow off | onschaltet den Langsamschreibmodus aus oder ein.
backgroundcolor Farb-Definitionändert die Hintergrund-Farbe
Wie die Farb-Definition angegeben werden kann, ist in Dateiformate und andere Angaben beschrieben.
Achtung: Diese Anweisung sollte benutzt werden, bevor der eigentliche Text anfängt.
ballooncolor Farb-Definitionändert die Farbe der Sprechblase
Wie die Farb-Definition angegeben werden kann, ist in Dateiformate und andere Angaben beschrieben.
Achtung: Diese Anweisung sollte benutzt werden, bevor der eigentliche Text anfängt.
textcolor Farb-Definitionändert die Text-Farbe
Wie die Farb-Definition angegeben werden kann, ist in Dateiformate und andere Angaben beschrieben.
Achtung: Die Standard-Text-Farbe des Terminals wird dadurch nicht verändert. Vorsicht ist geboten, wenn man das in Verbindung mit Terminal-Codes verwendet.
left-to-rightright-to-leftändert die Text-Richtung; das ist nützlich, wenn man Text in hebräisch oder jiddisch hat (arabisch wird nicht unterstützt)
Man kann die Text-Richtung nur Zeile für Zeile ändern. Verschiedene Text-Richtungen innerhalb einer Zeile werden nicht unterstützt.
size Höhe, Breiteändert die Größe der Sprechblase.
Man kann die Größe nicht über eine Maximalgröße hinaus festlegen. Der Wert 0 setzt die jeweilige Maximalgröße. Ohne Angabe von Werten wird die Sprechblase insgesamt auf die Maximalgröße gesetzt.
height Höheändert die Höhe der Sprechblase.
Man kann die Größe nicht über eine Maximalgröße hinaus festlegen. Der Wert 0 oder keine Angabe setzt die Maximalgröße.
width Breiteändert die Breite der Sprechblase.
Man kann die Größe nicht über eine Maximalgröße hinaus festlegen. Der Wert 0 oder keine Angabe setzt die Maximalgröße.
flipumblättern; der selbe Effekt wie mit einer Trennlinie: kurz warten und dann den Text-Bereich löschen
clearlöscht den Text-Bereich; im Gegensatz zu flip wird nicht erst
etwas gewartet, sondern der Text-Bereich wird sofort gelöscht
move out | inbewegt den Avatar aus dem Bild, bzw. wieder hinein
wait Millisekundenwartet die angegebene Zeit, oder eine vorgegebene Zeit bei keiner Angabe
pauseeine längere Pause; wartet erst kurz, dann wird der Avatar einige Zeit ohne Sprechblase angezeigt
image Bild-Dateiwartet einen Augenblick und zeigt dann ein Bild für einige Zeit ohne den Avatar
Das Bild wird auf dem Bildschirm zentriert. Wenn das Bild größer als der Bildschirm ist, wird der Bildschirm auf dem Bild zentriert.
Man kann eine Trennlinie nach dieser Anwesung einfügen, wenn man will. Die Trennlinie hat dann keine Auswirkung.
Welche Bilddatei-Formate von AKFAvatar unterstützt werden, hängt davon ab, welche Bibliotheken auf dem System installiert sind (siehe Abschnitt Dateiformate und andere Angaben).
rawaudiosettings Samplingrate Kodierung mono|stereoEinstellungen für das Laden von rohen Audio-Dateien
Diese Anweisung wird benötigt um rohe Audio-Dateien abspielen zu können.
Rohe Audio-Dateien beinhalten Audio-Daten ohne Einleitung oder ein
Container-Format.
Die Kodierung kann einer der folgenden Bezeichner sein: u8,
s8, u16le, u16be, u16sys, s16le,
s16be, s16sys, mu-law | u-law, A-law.
Zum Beispiel u8 bedeutet unsigned 8-Bit lineares PCM oder
s16le bedeutet signed 16-Bit lineares PCM, little endian.
Zum Beispiel: ‘rawaudiosettings 16000 mu-law mono’
audio Audio-Dateilädt eine Audio-Datei und spielt sie ab
Der Text wird weiterhin angezeigt. Auf diese Weise kann man eine Audio Datei mit dem aufgenommenen Text abspielen, während gleichzeitig der Text auf dem Bildschirm erscheint.
Es werden AU-Dateien mit linearem PCM oder mu-law oder A-law Kodierung
unterstützt.
Außerdem werden WAV-Dateien mit PCM- oder ADPCM-Kodierung
unterstützt.
Nach Verwendung der Anweisung rawaudiosettings können auch rohe
Audio-Dateien abgespielt werden.
audioloop Audio-Dateiwie audio, aber die Audio-Datei wird in einer Endlosschleife
abgespielt
loadaudio audiofilelädt eine Audio-Datei zum späteren Abspielen
Es kann nur eine Datei gleichzeitig geladen sein. Eine eventuell laufende Audio-Ausgabe wird durch diesen Befehl abgebrochen.
Es werden AU-Dateien mit linearem PCM oder mu-law oder A-law Kodierung
unterstützt.
Außerdem werden WAV-Dateien mit PCM- oder ADPCM-Kodierung
unterstützt.
Nach Verwendung der Anweisung rawaudiosettings können auch rohe
Audio-Dateien abgespielt werden.
playaudiospielt eine Audio-Datei ab, die mit loadaudio geladen wurde
playaudioloopspielt eine Audio-Datei, die mit loadaudio geladen wurde in einer
Endlosschleife ab
stopaudiohält die Audio-Ausgabe umgehend an
waitaudiowarte bis die Audio-Ausgabe beendet ist; eine Schleife wird dabei abgeschlossen
Dies kann dafür verwendet werden, um den aufgenommenen Text mit dem geschriebenen Text halbwegs zu synchronisieren.
effectpausekurze Pause, während der Text sichtbar bleibt
back Anzahl Textlöscht die letzten Anzahl Zeichen und zeigt den Text
Man kann diese Anweisung nach der Anweisung [effectpause] verwenden
um einen schönen Effekt zu erzielen.
readreserviert für spätere Versionen
credits Text-Dateizeigt eine Text-Datei in Form eines Abspanns an
endnur für Demos: beendet den Text
Der Avatar bewegt sich aus dem Bild.
Alles nach der end-Anweisung wird ignoriert.
stopnur für Demos: stoppt die Ausgabe sofort
Der Avatar wird nicht aus dem Bild bewegt, sondern die Textausgabe wird sofort beendet.
Alles nach der stop-Anweisung wird ignoriert.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Man muss nicht immer feststehende Texte schreiben um AKFAvatar zu benutzen.
Man kann den Befehl avatarsay auch dafür verwenden um sich die
Ausgabe anderer Befehle anzeigen zu lassen. Hierfür kann man einen einzelnen
Bindestrich (‘-’, U+002D) als Option angeben.
Am besten versucht man das in eine Fenster-basierten Umgebung, wo man ein
Fenster für die Eingabe-Zeile hat und avatarsay in einem anderen
Fenster dargestellt wird.
Man kann zum Beispiel mal folgendes ausprobieren:
‘echo "Hallo du. Wie geht's?" | avatarsay -’. Der Avatar erscheint
und sagt diese Worte. Man sollte aber vorsichtig mit der Verwendung von
Ausrufungszeichen sein, einige Shells haben damit Probleme.
Man kann sich aber auch die Ausgabe von anderen Befehlen mit
avatarsay ansehen. Als Beispiel das: ‘df | avatarsay -’,
oder das: ‘dir | avatarsay -’. Man könnte sogar diese Anleitung auf
folgende Weise lesen:
‘makeinfo --plaintext akfavatar-de.texinfo | avatarsay -’,
aber das ist wohl etwas zu langatmig.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Das Programm avatarsay kann auch spezielle Archiv-Dateien lesen.
Um eigene Archiv-Dateien zu erstellen, benötigt man zusätzliche Software.
Archiv-Dateien müssen im AR-Format vorliegen. Man kann zum Beispiel
den ar-Befehl aus den “GNU Binutils” verwenden. Aber Vorsicht:
es gibt einige zusätzliche Bedingungen und Einschränkungen.
Archiv-Dateien sollten die Datei-Endung ‘.avt’ bekommen.
Das aller erste Datei-Mitglied muss das Skript für avatarsay sein
und muss den Namen ‘AKFAvatar-demo’ haben. Die weiteren Archiv-Mitglieder
können in beliebiger Reihenfolge angehängt werden.
Die Namen der Archiv-Mitglieder ist auf 15 Zeichen beschränkt. GNU ar
und einige andere ar-Implementierungen haben Erweiterungen um längere
Namen zu unterstützen, aber avatarsay kann diese nicht lesen. Auf der
anderen Seite denke ich, dass 15 Zeichen auch mehr als genug sind. Man beachte,
das Archiv-Mitglieder keine Datei-Erweiterungen benötigen, sie werden anhand
des Inhaltes erkannt. Um sicher zu gehen, dass Dateinamen nicht mehr als 15
Zeichen enthalten, kann man bei GNU ar die Option ‘-f’
verwenden, oder bei einigen anderen ar-Implementierungen die
Option ‘-T’. Das TARGA-Bildformat kann in Archiv-Dateien nicht
verwendet werden.
Eine Archiv-Datei sollte ein Mitglied mit dem Namen ‘info’ enthalten. Auf diese Weise kann man Informationen über ein Archiv erhalten, indem man ‘ar p demo.avt info’ eingibt. Dieses ‘info’-Mitglied kann das selbe sein, das man auch für den Abspann verwendet.
Andere Programme können Archiv-Dateien für avatarsay an ihrem Anfang
erkennen. Sie fangen immer mit !<arch>\nAKFAvatar an, wobei \n
für ein einzelnes Zeichen mit dem Wert 10 steht.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Dieses Kapitel erklärt die Verwendung des Skriptes
gnome-akfavatar. Es handelt sich dabei um eine einfache
Benutzeroberfläche für den Befehl avatarsay, bei der einige
Funktionen über ein Menü abrufbar sind.
4.1 Was für gnome-akfavatar benötigt wird | ||
4.2 Das Hauptmenü von gnome-akfavatar |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
gnome-akfavatar benötigt wirdBei dem Befehl gnome-akfavatar handelt es sich um ein Shell-Skript,
er benötigt also eine Bourne-Shell. Er wurde mit der GNU bash
getestet, aber jede andere POSIX-kompatible Bourne-Shell sollte
auch funktionieren.
Dann benötigt er das Programm avatarsay. Das wird über den
PATH gesucht und im aktuellen Verzeichnis.
Für die sichtbare Oberfläche benutzt er das Programm zenity.
Als Text-Editor wird gedit benötigt und als Hilfe-Browser wird
yelp verwendet. Diese Befehle müssen über den PATH
abrufbar sein. Das sind aber alles Programme, die zu GNOME
gehören, und somit schon vorinstalliert sein sollten.
Da der Befehl avatarsay auch im aktuellen Verzeichnis gesucht
wird, braucht das Paket nicht unbedingt installiert zu werden. Aber
die Anleitung muss installiert sein, damit man sie aus
gnome-akfavatar heraus aufrufen kann.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
gnome-akfavatarWenn man gnome-akfavatar aufruft, bekommt man ein Menü, aus
welchem man auswählen kann, was man damit tun will.
Man bekommt die folgenden Menüpunkte:
show a demo or textfile (ein Demo oder eine Text-Datei anzeigen)Man bekommt eine Datei-Auswahl-Box mit der man eine Text-Datei oder ein
Demo auswählen kann, um sie mit avatarsay anzeigen zu lassen.
Ein Demo ist entweder eine Text-Datei, die Anweisungen für
avatarsay enthält (siehe Abschnitt Anweisungen für das Programm avatarsay),
oder ein Paket, dass auch Bilder und Audio-Dateien enthalten kann.
create or edit a demo (ein Demo erstellen oder bearbeiten)kann dafür verwendet werden, um ein neues Demo zu erstellen, oder um ein
bestehendes zu bearbeiten. Wenn man einen Dateinamen angibt, der noch nicht
existiert, wird die Datei mit einer geeigneten #!-Zeile angelegt.
Wenn man ein anderes Avatar-Bild eingestellt hat bevor man diesen Menüpunkt
verwendet hat, wird auch eine passende [avatarimage]-Anweisung mit
eingefügt. Das Ausführungs-Bit wird bei der erstellten Datei gesetzt.
Anmerkung: Das alles wird nur für neu angelegte Dateien gemacht,
nicht für Dateien, die vorher schon existiert haben.
show a manpage (eine Manpage anzeigen)man wird gefragt, welche Manage man betrachten will. Wenn man eine Manpage aus einem bestimmten Abschnitt ansehen will, kann man die Abschnitt-Nummer vor dem Namen der Manpage, getrennt durch ein Leerzeichen, angeben. Zum Beispiel ‘6 intro’ zeigt die Einleitung zu Abschnitt 6.
show the output of a command (zeige die Ausgabe eines Befehls)zeigt die Ausgabe eines Befehls in avatarsay. Das ist nur
für Befehle geeignet, die etwas über die Standard-Ausgabe oder der
Standard-Fehlerausgabe ausgeben. Es ist nicht für interaktive Programme
geeignet, oder für Programme, die curses verwenden.
change avatar image (ändere das Avatar-Bild)lässt einen das Avatar-Bild verändern. Siehe auch Wie man ein anderes Avatar-Bild verwendet. Diese Einstellung gilt erstmal nur für die aktuelle Sitzung, es sei denn, man verwendet den Menüpunkt save settings.
fullscreen or window mode (Vollbild- oder Fenster-Modus)wenn man auf Okay klickt, wird der Vollbild-Modus aktiviert,
wenn man auf Cancel/Abbrechen klickt, wird der
Fenster-Modus ausgewählt.
Diese Einstellung gilt erstmal nur für die aktuelle Sitzung, es sei denn,
man verwendet den Menüpunkt save settings.
save settings (speichere Einstellungen)speichert die Einstellungen, also das Avatar-Bild und ob es im Volbild-Modus
oder im Fenster-Modus läuft. Anmerkung: diese Einstellungen gelten nur für
gnome-akfavatar; sie haben keine Auswirkung wenn man
avatarsay direkt aufruft, oder auf andere Programme, die die
AKFAvatar-Bibliothek verwenden.
help for AKFAvatar (Hilfe für AKFAvatar)zeigt die Onlinehilfe für AKFAvatar mit dem Hilfe-Zentrum von GNOME an.
Websiteöffnet die Homepage von AKFAvatar in einem Web-Browser
Exit (beenden)beendet das Programm.
Anmerkung: Man kann das Programm auch beenden, indem man auf Abbrechen
klickt oder auf den Schließen-Knopf des Fensters, oder indem man die
<Esc>-Taste drückt.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Eine Möglichkeit eine Farbe anzugeben ist, indem man einen englischen Namen dafür angibt. Namen mit einem Leerzeichen dazwischen können nicht immer angegeben werden. Aber man kann diese Namen dann auch zusammenschreiben, als einzelnes Wort. Einen Überblick über die möglichen Farbnamen findet man unter Namen der Farben.
Eine andere Möglichkeit ist es, die RGB-Werte in hexadezimaler Darstellung
anzugeben, eingeleitet durch das Gatter-Zeichen (#). Man kann einen
Wert mit 6 oder 3 Stellen angeben. Zum Beispiel für intensives rot kann man
entweder #f00 angeben, oder #ff0000. Der erste Wert (ein oder
zwei Ziffern) steht für rot, der zweite für grün und der dritte für blau.
Mit diesen Werten kann man jede beliebige Farbe zusammen mischen. Ein paar
weitere Beispiele: schwarz ist #000, weiß ist #fff,
gelb ist #ff0, violett ist #f0f und so weiter. Für dunklere
Farben wählt man einfach kleinere Werte: #808 ist ein dunkles violett,
während #fdf ein sehr helles violett ist.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
AKFAvatar unterstützt Bilder im X-Pixmap (XPM) Format, im X-Bitmap (XBM) Format und im unkomprimierten BMP-Format ohne weitere Zusatz-Bibliotheken. Das XPM-Format eignet sich besonders gut für Avatar-Bilder, da es Transparenz unterstützt. Für andere Formate muss die Software auf einen schmutzigen Trick ausweichen, um eine Art Pseudo-Transparenz zu erreichen (siehe Abschnitt Wie man ein anderes Avatar-Bild verwendet). XPM und XBM eignet sich vor allem auch viel besser für Programmierer, da diese Dateien recht einfach in Code eingefügt werden können, insbesondere in Code von C-kompatiblen Sprachen. Es gibt jedoch auch einen Nachteil: XPM-Dateien mit sehr vielen Farben können ziemlich groß werden. Man sollte dabei also möglichst nur wenige Farben verwenden. Es gibt jedoch keine künstliche Begrenzung.
Wenn man SDL_image installiert hat, kann man auch einige andere Formate
verwenden, inklusive PNG und JPEG, falls man auch dafür die
nötigen Bibliotheken installiert hat. Man sollte jedoch beachten, dass sich
JPEG nicht für Avatar-Bilder eignet (der oben erwähnte
“schmutzige Trick” funktioniert mit JPEG nicht vernünftig).
Sowohl das XPM-Format, das XBM-Format, als auch das BMP-Format sind unkomprimiert. Bilder in diesen Formaten belegen also einiges an Platz auf der Festplatte. Allerdings sollte Festplattenplatz heutzutage kein so großes Problem mehr sein. Man beachte außerdem: Wenn man diese Dateien in komprimierte Archiv-Dateien zum Weiterverteilen packt, dann macht das überhaupt nichts aus. Dann werden sie ja komprimiert, während Dateien, die vorher schon komprimiert waren, sich kaum weiter komprimieren lassen. Das gleicht sich gegenseitig aus. (Lediglich das JPEG-Format hat hierbei einen Vorteil, da es ein verlustbehaftetes Format ist.)
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Es werden AU-Dateien mit linearem PCM oder mu-law oder A-law
Kodierung unterstützt. Dateien mit 24- oder 32-Bit linearem PCM können
gelesen werden, sie werden jedoch nur mit einer Qualität von 16-Bit abgespielt.
Es werden auch “rohe” Audio-Daten mit 8- oder 16-Bit linearem PCM, mu-law oder A-law unterstützt.
Wenn man seine Dateien klein halten will, sollte man mu-law oder A-law verwenden. Diese Kodierungen verbrauchen nur 8-Bit pro Sample, genau wie 8-Bit PCM, aber sie klingen viel besser. Eine gute Samplingrate für Sprachaufnahmen wäre 16000Hz. Wenn man noch mehr Platz sparen will, und Telefon-Qualität gut genug ist, kann man eine Samplingrate von 8000Hz nehmen.
Außerdem werden Wave-Dateien mit 8- oder 16-Bit linearem PCM- oder ADPCM-Kodierung unterstützt.
Alle angegebenen Formate können in Mono oder Stereo vorliegen. Mehr als zwei Kanäle werden nicht unterstützt. Man beachte, dass bei all diesen Formaten Stereo-Dateien doppelt so groß sind, wie Mono-Dateien.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Wenn man anfangen will programmieren zu lernen, ist Pascal eine sehr gute Wahl als Einstiegssprache. Leider ist Pascal jedoch nicht sehr weit verbreitet. Dennoch haben wir mit GNU-Pascal und Free Pascal zwei sehr gute Freie Software Implementierungen zur Verfügung, die auf vielen verschiedenen Plattformen einsetzbar sind.
Es wäre durchaus auch möglich gewesen, das Ganze komplett in Pascal zu schreiben. Aber C ist viel weiter verbreitet und das hat seine Konsequenzen. Jedes moderne System bringt in der Regel bereits einen C-Compiler mit und fast jede andere Programmiersprache kann Bibliotheken, die in C geschrieben wurden verwenden.
| 6.1 Wie man den Avatar in Pascal programmiert |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Man kann AKFAvatar für Pascal-Programme verwenden.
Zunächst einmal muss die Bibliothek bereits auf dem System installiert sein. Man benötigt außerdem die Datei ‘akfavatar.pas’. Die Datei wird normalerweise nicht automatisch installiert, da es kein Standard-Verzeichnis dafür gibt. Wenn sie sich aber im aktuellen Verzeichnis befindet, wird sie dennoch gefunden.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
In dem Paket mit den Quelltexten findet man unter anderem die Skripte
‘gpcavatar’ und ‘fpcavatar’ im Unterverzeichnis ‘pascal/’.
Wenn man zum Beispiel GNU-Pascal (gpc) hat, kann man
folgendes eingeben: ‘./gpcavatar example.pas’
Damit sollte das Programm ‘example’ kompiliert werden.
Auf diese Weise kann man jedes Pascal-Programm, das nur die Standard-Eingabe/Ausgabe verwendet kompilieren. Es sind keine Änderungen am Quelltext des Pascal-Programmes nötig!
Wenn man eine neue Seiten anfangen will, kann man einfach den Befehl
page; verwenden.
Na? Das ist doch einfach, oder?
Hinweis: Wenn das Programm die Unit |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Erstmal sollte man sich die Skripte ‘gpcavatar’ und ‘fpcavatar’ ansehen. Am Anfang dieser Skripte befinden sich einige Variablen, die man an seine Bedürfnisse anpassen sollte. Dann kann man die Skripte nach ‘/usr/local/bin’ kopieren, so dass man sie von überall her aufrufen kann. Die Datei ‘akfavatar.pas’ sollte man dahin kopieren, wo man seine persönlichen Units haben möchte. Man sollte sicher stellen, dass dieses Verzeichnis auch in den Skripten mit aufgelistet ist.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Es ist auch möglich Programme mit AKFAvatar zu verwenden, die auf der Unit
CRT basieren. Dafür sind aber Veränderungen am Programm notwendig.
Die Skripte ‘gpcavatar’ und ‘fpcavatar’ definieren beide das Symbol
AKFAVATAR, so dass man {$IfDef AKFAVATAR} oder
{$IfNDef AKFAVATAR} verwenden kann, um zu kontrollieren, was passiert,
wenn man es mit oder ohne AKFAvatar kompiliert.
Um sicher zu stellen, dass das Programm immer noch mit der Unit CRT
funktioniert, kann man folgendes verwenden:
‘{$IfNDef AKFAVATAR} uses CRT; {$EndIf}’. Das Programm
‘multiply.pas’ ist ein Beispiel für diese Methode.
AKFAvatar unterstützt die meisten Befehle und Variablen wie die originale
CRT Unit. Zum Beispiel der Befehl ClrScr löscht den
Text-Bereich (nicht den ganzen Bildschirm!), ClrEol löscht den
Rest der Zeile. Man kann den Befehl GotoXY(x, y);
verwenden um an eine bestimmte Stelle innerhalb des Text-Bereiches zu
springen. Die Funktionen WhereX und WhereY geben
Auskunft über die aktuelle Position.
Achtung: Die Breite der Anzeige umfasst 80 Zeichen wie bei einem Text-Terminal, aber die Höhe ist meist wesentlich geringer. Man kann die Dimensionen des Text-Bereiches über die Funktion |
Man kann den Befehl TextColor(color); verwenden, um die
Text-Farbe zu verändern. Man kann sogar die Hintergrund-Farbe des Textes
mit dem Befehl TextBackground(color); verändern. Aber
das sieht nicht so gut aus wie auf einem Text-Terminal.
Sogar die Variable TextAttr wird vollständig unterstützt wie
in der originalen CRT-Unit. Aber diese Variable sollte nach Möglichkeit
vermieden werden.
Die Befehle HighVideo und LowVideo werden unterstützt,
aber etwas anders, als in der CRT-Unit. HighVideo schaltet
den Fettduck ein und LowVideo schaltet den Fettdruck wieder aus.
Diese Befehle verändern nicht die Farbe, wie dies in der CRT-Unit
geschieht. Das sollte man im Hinterkopf behalten, wenn man diese Befehle mit
Aufrufen von TextColor kombiniert.
Mit Underlined(true); kann man den Unterstreichen-Modus anschalten
und mit Underlined(false); wieder abschalten.
Um zurück auf die “normale” Text-Darstellung zu schalten, sollte man den
Befehl NormVideo; verwenden. Die “normale” Text-Farbe ist
bei AKFAvatar eine ganz andere als mit der CRT-Unit. Durch
Verwendung dieses Befehles kann man also sicher gehen, dass man mit
beidem ein vernünftiges Ergebnis bekommt. NormVideo; schaltet
auch den Fettdruck und das Unterstreichen aus.
Die Funktion ReadKey wartet auf einen Tastendruck und gibt den
Code der gedrückten Taste wieder. Um heraus zu finden ob eine Taste gedrückt
wurde ohne das Programm zu blockieren, kann man die Funktion
KeyPressed verwenden.
Achtung: Funktionstasten werden noch nicht unterstützt. Die Taste <Esc> beendet das Programm. Wenn man die <Esc>-Taste für etwas anderes benötigt, kann man die Variable |
Es gibt noch eine Menge zusätzlicher Befehle, die nicht kompatibel zur
CRT-Unit sind.
Mit dem folgenden Befehl kann man ein anderes Bild für den Avatar einstellen:
{$IfDef AKFAVATAR}
AvatarImageFile ('/usr/local/share/pixmaps/teacher.xpm');
{$EndIf}
Das ist natürlich nur ein Beispiel.
Dieser Befehl muss verwendet werden, bevor irgendeine Ausgabe oder Eingabe
stattfindet! Die Größe des Avatar-Bildes hat auch Einfluss auf die Größe des
Text-Bereiches. Darum muss der Befehl auch verwendet werden, bevor man die
Funktion ScreenSize verwendet.
Wenn man die Hintergrund-Farbe des Fensters (also nicht des Text-Bereiches)
verändern will, kann man den Befehl setBackgroundColor(rot,
grün, blau); am Anfang des Programmes verwenden. Die Werte
für rot, grün und blau repräsentieren die Farbintensität dieses Farbanteils.
Man kann jede darstellbare Farbe mit diesen drei Werten zusammen mischen.
Der Maximalwert beträgt 255 ($FF). Zum Beispiel
‘setBackgroundColor(0, 0, 100);’ stellt einen dunkel-blauen Hintergrund
ein.
Man kann in seinem Programm festlegen welche Zeichensatz-Kodierung man
verwendet. Wenn man noch ein altes System hat, das auf dem Latin-1
Zeichensatz basiert, kann man den Befehl
setEncoding ('ISO-8859-1'); einsetzen. Falls man mit mehreren
Zeichensätzen gleichzeitig hantieren muss, kann man den Befehl auch
mehrfach verwenden. Unterschiedliche Zeichensätze können im Text-Bereich
gleichzeitig dargestellt werden. (Intern wird ein Unicode-Zeichensatz
verwendet.)
Es gibt auch Zeichen für hebräische oder jiddische Texte. Um diese
zu verwenden muss man die Text-Richtung ändern. Dass kann man mit
den Befehlen setTextDirection (RightToLeft); und
setTextDirection (LeftToRight); tun. Man sollte aber
darauf achten, dass man vor oder nach Verwendung dieser Befehle eine
neue Zeile oder eine neue Seite anfängt. Unterschiedliche
Text-Richtungen innerhalb einer Zeile zu verwenden wird nicht
unterstützt.
Die Eingabe und Ausgabe wird über die üblichen Pascal-Befehle gehandhabt (Read, ReadLn, Write, WriteLn, Page). Man kann die vollständige Pascal Syntax für diese Befehle ausnutzen. Zum Beispiel: ‘WriteLn ('Pi ist ', Pi:0:8, ' und so weiter.');’
Wenn man einen Seitenumbruch auslösen will, kann man den Befehl
page; verwenden. Tatsächlich handelt es sich dabei auch um
einen Befehl aus Standard-Pascal, der aber selten benutzt wird; so
selten, dass er in Free Pascal sogar ganz weggelassen wurde. Aber meine
Unit definiert ihn auch für Free Pascal. Normalerweise wird
page; dafür verwendet um eine neue Seite bei einem Drucker
anzufordern.
Man kann den Text-Bereich auch mit dem Befehl ClrScr; löschen.
Im Gegensatz zu page; wartet der Befehl ClrScr; nicht
erst, sondern löscht den Text-Bereich sofort. Man kann den Cursor mit dem
Befehl GotoXY (x, y); an jede beliebige Stelle bewegen. Man
kann die Position des Cursors mit den Funktionen WhereX und
WhereY heraus finden. Die Koordinaten 1, 1 bezeichnen die
obere linke Ecke (unabhängig von der Text-Richtung). Man kann die
Maximalwerte mit ScreenSize.x und ScreenSize.y heraus
finden. All diese Namen wurden gewählt, um eine gewisse Kompatibilität
zur CRT-Unit zu bekommen. Ungeachtet ihrer Bezeichnungen
verwalten sie nicht den Bildschirm, sondern nur den Text-Bereich.
Wenn man Warnungen Fehlermeldungen oder Debug-Informationen ausgeben will
sollte man stderr verwenden. (Das funktioniert nicht unter Windows
oder ReactOS)
Zum Beispiel: ‘WriteLn (stderr, 'Error: ', AvatarGetError);’
Nun, die Funktion AvatarGetError holt eine Fehlermeldung von
der Bibliothek ein.
Der Befehl ShowAvatar; zeigt nur den Avatar ohne die Sprechblase.
Die Befehle MoveAvatarIn; oder MoveAvatarOut; bewegen
den Avatar heraus beziehungsweise herein. Der Befehl
Delay (500); wartet ungefähr 500 Millisekunden. Falls man eine
Angabe in Sekunden bevorzugt, kann man folgendes verwenden:
Delay (seconds(0.5));.
Eine vollständige Übersicht über alle Pascal-Befehle und Funktionen findet man in Pascal Referenz.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Der folgende Text zeigt das interface der Pascal-Unit
akfavatar.pas:
unit akfavatar;
interface
{ length of an output line }
{ input is one less }
const LineLength = 80;
{ Default encoding of the system }
{$IfDef LATIN1}
const DefaultEncoding = 'ISO-8859-1';
{$Else}
const DefaultEncoding = 'UTF-8';
{$EndIf}
{ defaults for SetTextDelay and SetFlipPageDelay }
const
DefaultTextDelay = 75;
DefaultFlipPageDelay = 2700;
{ Colors for TextColor/TextBackground }
{ compatible to the CRT unit }
const
Black = 0;
Blue = 1;
Green = 2;
Cyan = 3;
Red = 4;
Magenta = 5;
Brown = 6;
LightGray = 7;
DarkGray = 8;
LightBlue = 9;
LightGreen = 10;
LightCyan = 11;
LightRed = 12;
LightMagenta = 13;
Yellow = 14;
White = 15; { as background-color -> balloon-color }
Blink = 128; { ignored }
{ for TextBackground }
const BalloonColor = 15;
{$IfDef FPC}
type LineString = AnsiString;
{$Else}
{ In UTF-8 encoding one char may take up to 4 Bytes }
type LineString = string (4 * LineLength);
type ShortString = string (255);
{$EndIf}
type TextDirection = (LeftToRight, RightToLeft);
type TScreenSize = record x, y: integer end;
{
Text Attributes
mostly compatible to the CRT unit
the "blink-bit" means a bright background color
}
var TextAttr : byte;
{ methods to stop the program }
var
CheckBreak: boolean; { compatible to CRT }
CheckEsc: boolean;
{ compatible to the CRT unit }
var
CheckEof: boolean;
CheckSnow: boolean;
DirectVideo: boolean;
{ for CRT compatiblity, use ScreenSize for new programs }
{ Just for reading! }
{ These variables are only set after the avatar is visible }
var WindMin, WindMax: word;
{ load the Avatar image from a file }
{ should be used before any output took place }
{ but it can be changed later }
procedure AvatarImageFile(FileName: string);
{ load the Avatar image from memory }
{ should be used before any output took place }
{ but it can be changed later }
procedure AvatarImageData(data: pointer; size: LongInt);
{ load the Avatar image from XPM-data }
{ use the tool xpm2pas to import the data }
{ should be used before any output took place }
{ but it can be changed later }
{ example: AvatarImageXPM(addr(image)); }
procedure AvatarImageXPM(data: pointer);
{ load the Avatar image from XBM-data }
{ use the tool xbm2pas to import the data }
{ should be used before any output took place }
{ but it can be changed later }
{ example:
AvatarImageXBM(addr(img_bits), img_width, img_height, 'black'); }
procedure AvatarImageXBM(bits: pointer; width, height: integer;
colorname: string);
{ give the avatar a name }
procedure AvatarName(const Name: string);
{ set a different background color }
{ should be used before any output took place }
procedure setBackgroundColor(red, green, blue: byte);
procedure setBackgroundColorName (const Name: string);
{ set a different balloon color }
{ should be used before any output took place }
procedure setBalloonColor(red, green, blue: byte);
procedure setBalloonColorName (const Name: string);
{ change pace of text and page flipping }
{ the scale is milliseconds }
procedure setTextDelay(delay: integer);
procedure setFlipPageDelay(delay: integer);
{ change the encoding }
procedure setEncoding(const newEncoding: string);
{ change text direction (for hebrew/yiddish texts) }
{ you should start a new line before or after this command }
procedure setTextDirection(direction: TextDirection);
{ The "Screen" is the textarea }
{ The name is chosen for compatiblity with the CRT unit }
{ This causes the library to be initialized }
{ The avatar-image and the background color should be set before this }
function ScreenSize: TScreenSize;
{ assign text-variable to the avatar }
procedure AssignAvatar(var f: text);
{ the same for CRT compatiblity }
procedure AssignCrt(var f: text);
{ Restore Input/Output system }
{ use this to output help or version information }
procedure RestoreInOut;
{$IfDef FPC}
{ the page command is defined in the Pascal standard,
but missing in FreePascal }
{ action: wait a while and then clear the textfield }
procedure page(var f: text);
procedure page;
{$EndIf}
{ switch cursor on or off }
{ extensions compatible to Free Pascal }
procedure CursorOn;
procedure CursorOff;
{ keyboard handling }
{ partly CRT compatible - only Latin1 chars so far }
function KeyPressed: boolean;
function ReadKey: char;
{ clear the keyboard buffer }
procedure ClearKeys;
{ wait for a key }
procedure WaitKey;
{ wait some time }
{ compatible to CRT unit }
procedure delay(milliseconds: integer);
{ example use: delay (seconds (2.5)); }
function seconds(s: Real): integer;
{ clears the window (not the screen!) }
{ the name was chosen for compatiblity to the CRT unit }
procedure ClrScr;
{ clears rest of the line }
{ compatible to CRT unit }
procedure ClrEol;
{ deletes current line, the rest is scrolled up }
procedure DelLine;
{ inserts a line before the current line, the rest is scrolled down }
procedure InsLine;
{ set the text color }
{ compatible to CRT unit }
procedure TextColor (Color: Byte);
{ set the text background color }
{ compatible to CRT unit, but light colors can be used }
procedure TextBackground (Color: Byte);
{ set black on white text colors, switch bold and underlined off }
{ name compatible to CRT unit, but the colors differ }
procedure NormVideo;
{ switch bold mode on or off }
{ this is different from the CRT unit }
{ be careful, when you combine this with TextColor }
procedure HighVideo;
procedure LowVideo;
{ switch underline mode on or off }
procedure Underlined (onoff: boolean);
{ shows the avatar without the balloon }
procedure ShowAvatar;
{ moves the avatar in or out }
procedure MoveAvatarIn;
procedure MoveAvatarOut;
{ loads image
after that call delay or waitkey
the supported image formats depend on your libraries
XPM and uncompressed BMP is always supported
}
function ShowImageFile(FileName: string): boolean;
procedure ShowImageData(data: pointer; size: LongInt);
{ use the tool xpm2pas to import the X Pixmap data }
{ example: ShowImageXPM(addr(image)); }
procedure ShowImageXPM(data: pointer);
{ use the tool xbm2pas to import the X Bitmap data }
{ example:
ShowImageXBM(addr(img_bits), img_width, img_height, 'black'); }
procedure ShowImageXBM(bits: pointer; width, height: integer;
colorname: string);
{ play a short sound as with chr(7) }
procedure Beep;
{ a short visual flash on the screen }
procedure Flash;
{ loads Audio File
AU or WAV files supported }
function LoadSoundFile(const FileName: string): pointer;
function LoadSoundData(data: pointer; size: LongInt): pointer;
procedure FreeSound(snd: pointer);
procedure PlaySound(snd: pointer; loop: boolean);
{ wait until the end of the audio output }
procedure WaitSoundEnd;
{ play a sound of a given frequency }
{ Note: not fast, needs a delay(200) at least }
procedure Sound(frequency: integer);
{ stop sound output }
procedure NoSound;
{ handle coordinates (inside the balloon) }
{ compatible to CRT unit }
function WhereX: integer;
function WhereY: integer;
procedure GotoXY(x, y: integer);
procedure Window(x1, y1, x2, y2: Byte);
{ whether the cursor is in the home position? }
function HomePosition: boolean;
{ set the size of the balloon }
{ the window is reset to the new full size }
procedure BalloonSize(height, width: integer);
procedure BalloonWidth(width: integer);
procedure BalloonHeight(height: integer);
{ set/get scroll mode }
{ 0 = off (page-flipping), 1 = normal }
procedure SetScrollMode(mode: integer);
function GetScrollMode: integer;
{ get last error message }
function AvatarGetError: ShortString;
{ ignore TextColor TextBackground and so on }
{ compatible with GNU-Pascal's CRT unit }
procedure SetMonochrome(monochrome: boolean);
{ for positive/negative questions }
{ keys for positive: + 1 Enter }
{ keys for negative: - 0 Backspace }
function Decide: boolean;
{ Navigate }
{
navigation bar
buttons is a string with the following characters
'l': left
'r': right (play)
'd': down
'u': up
'x': cancel
'f': (fast)forward
'b': (fast)backward
'p': pause
's': stop
'e': eject
'*': circle (record)
'+': plus (add)
'-': minus (remove)
'?': help
' ': spacer (no button)
Pressing a key with one of those characters selects it.
For the directions you can also use the arrow keys,
The [Pause] key returns 'p'.
The [Help] key or [F1] return '?'.
the function returns the letter for the selected option
example:
case Navigate('lxr') of ...
}
function Navigate(buttons: String): char;
{ choice for several items }
{ result is the choice number, starting from 1 }
{ startkey may be #0 }
function Choice(start_line, items: integer; startkey: char;
back, fwrd: boolean): integer;
{ show a very long text in a pager }
{ You can navigate with up/down, page up/page down keys,
Home and End keys, and even with the mouse-wheel }
procedure PagerString (const txt: string; startline: integer);
procedure PagerFile (const filename: string; startline: integer);
{ lock or unlock updates - can be used for speedups }
{ when true the text_delay is set to 0 }
{ when false the textarea gets updated }
{ use with care! }
procedure LockUpdates(lock: boolean);
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Es folgt der Inhalt der C Header Datei akfavatar.h:
/*
* AKFAvatar library - for giving your programs a graphical Avatar
* Copyright (c) 2007, 2008, 2009 Andreas K. Foerster <info@akfoerster.de>
*
* needed:
* SDL1.2 (recommended: SDL1.2.11 or later (but not 1.3!))
* recommended:
* SDL_image1.2
*
* This file is part of AKFAvatar
*
* AKFAvatar is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AKFAvatar is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _akfavatar_h
#define _akfavatar_h
/* SDL redefines main on some systems */
#if defined(__WIN32__) || defined(__MACOS__) || defined(__MACOSX__)
# include "SDL.h"
#endif
/* to get the systems definition of wchar_t */
#include <stddef.h>
#define AKFAVATAR 1
/* maximum linelength */
#define AVT_LINELENGTH 80
/* for avt_initialize */
#define AVT_AUTOMODE -1
#define AVT_WINDOW 0
#define AVT_FULLSCREENNOSWITCH 2
#ifdef AVT_NOSWITCH
# define AVT_FULLSCREEN AVT_FULLSCREENNOSWITCH
#else
# define AVT_FULLSCREEN 1
#endif
/* for _avt_STATUS */
#define AVT_NORMAL 0
#define AVT_QUIT 1
#define AVT_ERROR -1
/* for boolean expressions */
/* see avt_bool_t in the type definitions */
#define AVT_TRUE 1
#define AVT_FALSE 0
#define AVT_MAKE_BOOL(x) ((x) != 0)
/* for avt_set_text_delay and avt_set_flip_page_delay */
#define AVT_DEFAULT_TEXT_DELAY 75
#define AVT_DEFAULT_FLIP_PAGE_DELAY 2700
/* for avt_text_direction */
#define AVT_LEFT_TO_RIGHT 0
#define AVT_RIGHT_TO_LEFT 1
/*
* example: avt_wait(AVT_SECONDS(2.5)) waits 2.5 seconds
*/
#define AVT_SECONDS(x) ((x)*1000)
/* macro for marking unused symbols */
#ifdef __GNUC__
# define AVT_UNUSED __attribute__ ((__unused__))
#else
# define AVT_UNUSED
#endif /* __GNUC__ */
#ifdef __cplusplus
# define AVT_BEGIN_DECLS extern "C" {
# define AVT_END_DECLS }
#else
# define AVT_BEGIN_DECLS
# define AVT_END_DECLS
#endif /* __cplusplus */
/* for later use */
#define AVT_API extern
/***********************************************************************/
/* type definitions */
/*
* boolean are chars for this library
* use AVT_TRUE or AVT_FALSE as values,
* or AVT_MAKE_BOOL(x) to convert values.
*
* You can use true or false and the type bool from stdbool.h in C
* or the equivalent things from C++ - it's all compatible.
* I just make my own type for old compilers.
*/
typedef unsigned char avt_bool_t;
/*
* general types for avatar images and audio data
* may change in the future!
*/
typedef void avt_image_t;
typedef void avt_audio_t;
/* for streams (use FILE from your programs) */
typedef void avt_stream;
AVT_BEGIN_DECLS
/***********************************************************************/
/* functions */
/* most functios return the status, unless otherwise stated */
/***********************************************************************/
/***********************************************************************/
/* initialization / finalization */
/*
* initialize the avatar system
*
* mode is either AVT_WINDOW or AVT_FULLSCREEN or AVT_FULLSCREENNOSWITCH.
* The original image is freed in this function!
* So you can directly put calls to avt_defauls
* or the avt_import_* functions here.
* the image may be NULL if no avatar should be shown
* title and/or icontitle may also be NULL
*/
AVT_API int avt_initialize (const char *title,
const char *icontitle,
avt_image_t *image,
int mode);
/*
* quit the avatar system
* can be used with atexit
*/
AVT_API void avt_quit (void);
/*
* call avt_wait_button (); avt_move_out (); avt_quit ();
* can be used with atexit
*/
AVT_API void avt_button_quit (void);
/***********************************************************************/
/* getting an avatarimage */
/*
* these functions can be used directly with
* avt_initialize or avt_change_avatar_image
* they call avt_make_transparent if approriete
*/
/*
* X-Pixmaps (XPM), X Bitmaps (XBM) and uncompressed BMP are always supported
* other image formats are supported with SDL_image
*/
/* get the default avatar image */
AVT_API avt_image_t *avt_default (void);
/* import an avatar from XPM data */
AVT_API avt_image_t *avt_import_xpm (char **xpm);
/* import an avatar from XBM data */
AVT_API avt_image_t *avt_import_xbm (const unsigned char *bits,
int width, int height,
const char *colorname);
/* RGB gimp_image */
AVT_API avt_image_t *avt_import_gimp_image (void *gimp_image);
/* import avatar from image data */
AVT_API avt_image_t *avt_import_image_data (void *img, int imgsize);
/* import avatar from file */
AVT_API avt_image_t *avt_import_image_file (const char *filename);
/* import avatar from stream */
AVT_API avt_image_t *avt_import_image_stream (avt_stream *stream);
/***********************************************************************/
/* other functions for avatarimages */
/*
* change avatar image while running
* if the avatar is visible, the screen gets cleared
* the original image is freed in this function!
* the image may be NULL if no avatar should be shown
* on error AVT_ERROR is set and returned
* an avatar name is cleared
*/
AVT_API int avt_change_avatar_image (avt_image_t *image);
/*
* free avt_image_t images
* (automatically called in avt_initialize and avt_change_avatar_image)
*/
AVT_API void avt_free_image (avt_image_t *image);
/*
* make background transparent
* pixel in the upper left corner is supposed to be the background color
*/
AVT_API avt_image_t *avt_make_transparent (avt_image_t *image);
/***********************************************************************/
/* actions without or outside the balloon */
/* see also "showing images without the avatar" */
/* show an empty screen with the background color */
AVT_API void avt_clear_screen (void);
/* show just the avatar without the balloon */
AVT_API void avt_show_avatar (void);
/* like avt_show_avatar, but the avatar is moved in */
AVT_API int avt_move_in (void);
/* move the avatar out => empty screen */
AVT_API int avt_move_out (void);
/*
* make a short sound, when audio is initialized
* else it is the same as avt_flash
* same as with \a in avt_say
* the sound is actually not a bell ;-)
*/
AVT_API void avt_bell (void);
/* visual flash of the screen */
AVT_API void avt_flash (void);
/* update, ie handle events and give some time to other processes */
/* use this in a longer loop in your program */
AVT_API int avt_update (void);
/* wait a while */
AVT_API int avt_wait (int milliseconds);
/***********************************************************************/
/* say or ask stuff with wchar_t (Unicode: UTF-32) */
/*
* prints a L'\0' terminated string in the balloon
* if there is no balloon, it is drawn
* if there is no avatar, it is shown (not moved in)
* interprets control chars including overstrike-text
*/
AVT_API int avt_say (const wchar_t *txt);
/*
* writes string with given length in the balloon
* the string needn't be terminated and can contain binary zeros
* if there is no balloon, it is drawn
* if there is no avatar, it is shown (not moved in)
* interprets control characters including overstrike-text
*/
AVT_API int avt_say_len (const wchar_t *txt, const int len);
/*
* writes a single character in the balloon
* if there is no balloon, it is drawn
* if there is no avatar, it is shown (not moved in)
* interprets control characters, but not for overstrike-text
*/
AVT_API int avt_put_character (const wchar_t ch);
/*
* get string (just one line)
* the maximum length is LINELENGTH-1
* size is the size of s in bytes (not the length)
*
* (I don't use size_t for better compatiblity with other languages)
*/
AVT_API int avt_ask (wchar_t *s, const int size);
/*
* get a character from the keyboard
* only for printable characters, not for function keys
* (ch is a pointer to one character, not a string)
*/
AVT_API int avt_get_key (wchar_t *ch);
/***********************************************************************/
/* say or ask stuff with multy-byte encodings */
/* set encoding for mb functions */
AVT_API int avt_mb_encoding (const char *encoding);
/*
* prints a 0 terminated string in the balloon
* if there is no balloon, it is drawn
* if there is no avatar, it is shown (not moved in)
* interprets control chars including overstrike-text
*
* converts from a given charset encoding
* (see avt_mb_encoding)
*/
AVT_API int avt_say_mb (const char *txt);
/*
* the same with a given length
* the string needn't be terminated then
* and can contain binary zeros
*/
AVT_API int avt_say_mb_len (const char *txt, int len);
/*
* get string (just one line)
* converted to the given encoding
*
* for UTF-8 encoding s should have a capacity of 4 * LINELENGTH Bytes
*/
AVT_API int avt_ask_mb (char *s, const int size);
/*
* decode a string into wchar_t
* size in bytes
* returns number of characters in dest (without the termination zero)
* dest must be freed by caller with avt_free
*/
AVT_API int avt_mb_decode (wchar_t **dest, const char *src, const int size);
/*
* encode a string from wchar_t
* len is the length
* returns number of characters in dest (without the termination zero)
* dest must be freed by caller with avt_free
* (the size of dest may be much more than needed)
*/
AVT_API int avt_mb_encode (char **dest, const wchar_t *src, const int len);
/* free memory allocated by this library */
AVT_API void avt_free (void *ptr);
/***********************************************************************/
/* informational stuff */
/* is it initialized? */
AVT_API avt_bool_t avt_initialized (void);
/* 0 = normal; 1 = quit-request; -1 = error */
AVT_API int avt_get_status (void);
/* set status */
AVT_API void avt_set_status (int status);
/* get error message */
AVT_API char *avt_get_error (void);
/* which version of the linked library is used? */
AVT_API const char *avt_version (void);
/* get copyright information */
AVT_API const char *avt_copyright (void);
/* get license information */
AVT_API const char *avt_license (void);
/* get color name of given number, or NULL on error */
AVT_API const char *avt_get_color_name (int nr);
/*
* get the color definition
* returns the color name or NULL on error
*/
AVT_API const char *avt_get_color (int nr, int *red, int *green, int *blue);
/*
* get color values for a given color-name
* returns 0 on success or -1 on error
*/
AVT_API int avt_name_to_color (const char *name,
int *red, int *green, int *blue);
/***********************************************************************/
/* settings */
/*
* change the title and/or the icontitle
* use NULL for the unchanged part
* in newer SDL-versions it is to be encoded in UTF-8
* if possible stick to ASCII for compatibility
*/
AVT_API void avt_set_title (const char *title, const char *icontitle);
/*
* set name for the avatar
* set to NULL to clear the name
*/
AVT_API int avt_set_avatar_name (const wchar_t *name);
AVT_API int avt_set_avatar_name_mb (const char *name);
/* switch to fullscreen or window mode */
AVT_API void avt_switch_mode (int mode);
/* toggle fullscreen mode */
AVT_API void avt_toggle_fullscreen (void);
/* get mode */
AVT_API int avt_get_mode (void);
/*
* set the baloon width and height in number of characters
* 0 or less for maximum width
* if it's actually changed, the balloon is redrawn and emptied
* see also avt_get_max_x () and avt_get_max_y ()
*/
AVT_API void avt_set_balloon_size (int height, int width);
AVT_API void avt_set_balloon_width (int width);
AVT_API void avt_set_balloon_height (int height);
/* activate the text cursor? (default: no) */
AVT_API void avt_activate_cursor (avt_bool_t on);
/*
* define the background color
* values in the range 0x00 .. 0xFF
* can and should be called before avt_initialize
* if the balloon is visible, it is cleared
*/
AVT_API void avt_set_background_color (int red, int green, int blue);
AVT_API void avt_set_background_color_name (const char *name);
/*
* define the balloon color
* values in the range 0x00 .. 0xFF
* can be called before avt_initialize
* the text-background-color is set to the balloon-color too
* if the balloon is visible, it is cleared
*/
AVT_API void avt_set_balloon_color (int red, int green, int blue);
AVT_API void avt_set_balloon_color_name (const char *name);
/*
* change the text color
* values in the range 0x00 .. 0xFF
*/
AVT_API void avt_set_text_color (int red, int green, int blue);
AVT_API void avt_set_text_color_name (const char *name);
AVT_API void avt_set_text_background_color (int red, int green, int blue);
AVT_API void avt_set_text_background_color_name (const char *name);
/* set text background to balloon color */
AVT_API void avt_set_text_background_ballooncolor (void);
/*
* set text direction
* the cursor is moved to start of the line
* in a text, you might want to call avt_newline after that
*/
AVT_API void avt_text_direction (int direction);
/*
* delay time for text-writing
* default: AVT_DEFAULT_TEXT_DELAY
*/
AVT_API void avt_set_text_delay (int delay);
/*
* delay time for page flipping
* default: AVT_DEFAULT_FLIP_PAGE_DELAY
*/
AVT_API void avt_set_flip_page_delay (int delay);
/* set underlined mode on or off */
AVT_API void avt_underlined (avt_bool_t onoff);
/* get underlined mode */
AVT_API avt_bool_t avt_get_underlined (void);
/* set bold mode on or off (not recommended) */
AVT_API void avt_bold (avt_bool_t onoff);
/* get bold mode */
AVT_API avt_bool_t avt_get_bold (void);
/* set inverse mode on or off */
AVT_API void avt_inverse (avt_bool_t onoff);
/* get inverse mode */
AVT_API avt_bool_t avt_get_inverse (void);
/* set default color and switch off bold, underlined, inverse */
AVT_API void avt_normal_text (void);
/*
* set scroll mode
* -1 = off, 0 = page-flipping, 1 = normal
*/
AVT_API void avt_set_scroll_mode (int mode);
AVT_API int avt_get_scroll_mode (void);
/* set newline mode (default: on) */
AVT_API void avt_newline_mode (avt_bool_t mode);
/* set auto-margin mode (default: on) */
AVT_API void avt_auto_margin (avt_bool_t mode);
/*
* origin mode
* AVT_FALSE: origin (1,1) is always the top of the textarea
* AVT_TRUE: origin (1,1) is the top of the viewport
*/
AVT_API void avt_set_origin_mode (avt_bool_t mode);
AVT_API avt_bool_t avt_get_origin_mode (void);
/*
* with this you can switch the mouse pointer on or off
* use this after avt_register_mousehandler
*/
AVT_API void avt_set_mouse_visible (avt_bool_t visible);
/***********************************************************************/
/* handle coordinates inside the balloon */
/*
* the coordinates start with 1, 1 in the upper left corner
* and are independent from the text direction
*/
/* get position in the viewport */
AVT_API int avt_where_x (void);
AVT_API int avt_where_y (void);
/*
* is the cursor in the home position?
* (also works for right-to-left writing)
*/
AVT_API avt_bool_t avt_home_position (void);
/* maximum positions (whole text-field) */
AVT_API int avt_get_max_x (void);
AVT_API int avt_get_max_y (void);
/* put cusor to specified coordinates */
AVT_API void avt_move_x (int x);
AVT_API void avt_move_y (int y);
AVT_API void avt_move_xy (int x, int y);
/* save and restore current cursor position */
AVT_API void avt_save_position (void);
AVT_API void avt_restore_position (void);
/* set a viewport (sub-area of the textarea) */
AVT_API void avt_viewport (int x, int y, int width, int height);
/***********************************************************************/
/* activities inside the balloon */
/* new line - same as \n in avt_say */
AVT_API int avt_new_line (void);
/* wait a while and then clear the textfield - same as \f in avt_say */
AVT_API int avt_flip_page (void);
/*
* clears the viewport
* if there is no balloon yet, it is drawn
*/
AVT_API void avt_clear (void);
/*
* clears from cursor position down the viewport
* if there is no balloon yet, it is drawn
*/
AVT_API void avt_clear_down (void);
/*
* clears from cursor position up the viewport
* if there is no balloon yet, it is drawn
*/
AVT_API void avt_clear_up (void);
/*
* clear end of line
* depending on text direction
*/
AVT_API void avt_clear_eol (void);
/*
* clear beginning of line
* depending on text direction
*/
AVT_API void avt_clear_bol (void);
/* clear line */
AVT_API void avt_clear_line (void);
/*
* forward one character position
* ie. print a space
*/
AVT_API int avt_forward (void);
/* delete last caracter */
AVT_API void avt_backspace (void);
/* insert spaces at current position (move rest of line) */
AVT_API void avt_insert_spaces (int num);
/* delete num characters at current position (move rest of line) */
AVT_API void avt_delete_characters (int num);
/*
* erase num characters from current position
* don't move the cursor or the rest of the line
*/
AVT_API void avt_erase_characters (int num);
/* go to next or last tab stop */
AVT_API void avt_next_tab (void);
AVT_API void avt_last_tab (void);
/* reset tab stops to every eigth column */
AVT_API void avt_reset_tab_stops (void);
/* clear all tab stops */
AVT_API void avt_clear_tab_stops (void);
/* set or clear a tab in position x */
AVT_API void avt_set_tab (int x, avt_bool_t onoff);
/*
* delete num lines, starting from line
* the rest ist scrolled up
*/
AVT_API void avt_delete_lines (int line, int num);
/*
* insert num lines, starting at line
* the rest ist scrolled down
*/
AVT_API void avt_insert_lines (int line, int num);
/*
* lock or unlock updates of the balloon-content
* can be used for speedups
* when set to AVT_FALSE, the textarea gets updated
* when set to AVT_TRUE, the text_delay is set to 0
* use with care!
*/
AVT_API void avt_lock_updates (avt_bool_t lock);
/***********************************************************************/
/* showing images without the avatar */
/* you should call avt_wait or avt_waitkey thereafter */
/*
* X-Pixmaps (XPM), X Bitmaps (XBM) and uncompressed BMP are always supported
* other image formats are supported with SDL_image
*/
/*
* load image file and show it
* on error it returns AVT_ERROR without changing the status
*/
AVT_API int avt_show_image_file (const char *file);
/*
* load image from stream and show it
* on error it returns AVT_ERROR without changing the status
*/
AVT_API int avt_show_image_stream (avt_stream *stream);
/*
* show image from image data
* on error it returns AVT_ERROR without changing the status
*/
AVT_API int avt_show_image_data (void *img, int imgsize);
/*
* show image from XPM data
* on error it returns AVT_ERROR without changing the status
*/
AVT_API int avt_show_image_xpm (char **xpm);
/*
* show image from XBM data with a given color
* the background is transparent
* on error it returns AVT_ERROR without changing the status
*/
AVT_API int avt_show_image_xbm (const unsigned char *bits,
int width, int height,
const char *colorname);
/*
* show gimp image
* on error it returns AVT_ERROR without changing the status
*/
AVT_API int avt_show_gimp_image (void *gimp_image);
/***********************************************************************/
/* high-level functions */
/* wait for a keypress while displaying a button */
AVT_API int avt_wait_button (void);
/*
* show positive or negative buttons
* keys for positive: + 1 Enter
* keys for negative: - 0 Backspace
*
* returns the result as boolean
* on error or quit request AVT_FALSE is returned and the status is set
* you should check the status with avt_get_status()
*/
AVT_API avt_bool_t avt_decide (void);
/*
* navigation bar
*
* buttons is a string with the following characters
* 'l': left
* 'r': right (play)
* 'd': down
* 'u': up
* 'x': cancel
* 'f': (fast)forward
* 'b': (fast)backward
* 'p': pause
* 's': stop
* 'e': eject
* '*': circle (record)
* '+': plus (add)
* '-': minus (remove)
* '?': help
* ' ': spacer (no button)
*
* Pressing a key with one of those characters selects it.
* For the directions you can also use the arrow keys,
* The [Pause] key returns 'p'.
* The [Help] key or [F1] return '?'.
*
* the function returns the letter for the selected option
* or AVT_ERROR or AVT_QUIT
*
* example:
* r = avt_navigate ("lxr");
* if (r < 32) exit (0);
* select (r) ...
*/
AVT_API int avt_navigate (const char *buttons);
/*
* avt_choice - use for menus
* result: result code, first item is 1
* start_line: line, where choice begins
* items: number of items/lines
* key: first key, like '1' or 'a', 0 for no keys
* back, forward: whether first/last entry is a back/forward function
*
* returns AVT_ERROR and sets _avt_STATUS when it cannot get enough memory
*/
AVT_API int
avt_choice (int *result, int start_line, int items, int key,
avt_bool_t back, avt_bool_t forward);
/*
* show longer text with a text-viewer application
* if len is 0, assume 0-terminated string
* startline is only used, when it is greater than 1
*/
AVT_API int avt_pager (const wchar_t *txt, int len, int startline);
AVT_API int avt_pager_mb (const char *txt, int len, int startline);
/* show final credits */
AVT_API int avt_credits (const wchar_t *text, avt_bool_t centered);
AVT_API int avt_credits_mb (const char *text, avt_bool_t centered);
/***********************************************************************/
/* plumbing */
/*
* reserve single keys (Esc, F11)
* use this with avt_register_keyhandler
*/
AVT_API void avt_reserve_single_keys (avt_bool_t onoff);
/*
* type for keyhandler
* see avt_register_keyhandler
*/
typedef void (*avt_keyhandler) (int sym, int mod, int unicode);
/* register an external keyhandler */
AVT_API void avt_register_keyhandler (avt_keyhandler handler);
/*
* type for mousehandler
* see avt_register_mousehandler
*/
typedef void (*avt_mousehandler) (int button, avt_bool_t pressed,
int x, int y);
/* register an external mousehandler
*
* it is only called, when a mouse-button is pressed or released
* The coordinates are the character positions if it's inside of
* the balloon or -1, -1 otherwise.
*/
AVT_API void avt_register_mousehandler (avt_mousehandler handler);
/***********************************************************************/
/* audio stuff */
/* must be called AFTER avt_initialize! */
AVT_API int avt_initialize_audio (void);
/*
* supported audio formats:
* AU: linear PCM with up to 32Bit, mu-law, A-law
* WAV: linear PCM with up to 16Bit, MS-ADPCM, IMA-ADPCM
* Both: mono or stereo
*
* the current implementation can only play sounds with
* up to 16Bit precision, but AU-files with more Bits can
* be read.
*/
/*
* loads an audio file in AU or Wave format
* not for headerless formats
*/
AVT_API avt_audio_t *avt_load_audio_file (const char *filename);
/*
* loads audio in AU or Wave format from a stream
* not for headerless formats
*/
AVT_API avt_audio_t *avt_load_audio_stream (avt_stream *stream);
/*
* loads audio in AU or Wave format from memory
* must still be freed with avt_free_audio!
*/
AVT_API avt_audio_t *avt_load_audio_data (void *data, int datasize);
/* values for audio_type */
#define AVT_AUDIO_UNKNOWN 0 /* doesn't play */
#define AVT_AUDIO_U8 1 /* unsigned 8 Bit */
#define AVT_AUDIO_S8 2 /* signed 8 Bit */
#define AVT_AUDIO_U16LE 3 /* unsigned 16 Bit little endian */
#define AVT_AUDIO_U16BE 4 /* unsigned 16 Bit big endian */
#define AVT_AUDIO_U16SYS 5 /* unsigned 16 Bit system's endianess */
#define AVT_AUDIO_S16LE 6 /* signed 16 Bit little endian */
#define AVT_AUDIO_S16BE 7 /* signed 16 Bit big endian */
#define AVT_AUDIO_S16SYS 8 /* signed 16 Bit system's endianess */
#define AVT_AUDIO_MULAW 100 /* 8 Bit mu-law (u-law) */
#define AVT_AUDIO_ALAW 101 /* 8 Bit A-Law */
/* for channels */
#define AVT_AUDIO_MONO 1
#define AVT_AUDIO_STEREO 2
/*
* loads raw audio data from memory
* the data buffer is copied and can be freed immediately
*
* audio_type is one of the AVT_AUDIO_* constants
* channels is AVT_MONO or AVT_STEREO
*
* must be freed with avt_free_audio!
*/
AVT_API avt_audio_t *avt_load_raw_audio_data (void *data, int data_size,
int samplingrate, int audio_type, int channels);
/*
* frees memory of a loaded sound
*/
AVT_API void avt_free_audio (avt_audio_t *snd);
/*
* plays a sound
*/
AVT_API int avt_play_audio (avt_audio_t *snd, avt_bool_t doloop);
/*
* wait until the sound ends
* this stops a loop, but still plays to the end of the sound
*/
AVT_API int avt_wait_audio_end (void);
/* stops audio immediately */
AVT_API void avt_stop_audio (void);
/***********************************************************************/
/* deprecated functions - only for backward comatibility */
/* don't use them for new programs! */
/* macro for marking deprecated functions in this header */
#if defined (__GNUC__) && ! defined (_AVT_NO_DEPRECATED)
# define AVT_DEPRECATED __attribute__ ((__deprecated__))
#else
# define AVT_DEPRECATED
#endif /* __GNUC__ */
AVT_API void avt_set_delays (int text, int flip_page) AVT_DEPRECATED;
AVT_API void avt_stop_on_esc (avt_bool_t on) AVT_DEPRECATED;
AVT_API int avt_wait_key (const wchar_t *message) AVT_DEPRECATED;
AVT_API int avt_wait_key_mb (char *message) AVT_DEPRECATED;
AVT_API void avt_quit_audio (void) AVT_DEPRECATED;
AVT_API avt_audio_t *avt_load_wave_file (const char *file) AVT_DEPRECATED;
AVT_API avt_audio_t *avt_load_wave_data (void *data, int datasize)
AVT_DEPRECATED;
AVT_API int avt_menu (wchar_t *ch, int menu_start, int menu_end,
wchar_t start_code, avt_bool_t back,
avt_bool_t forward) AVT_DEPRECATED;
AVT_API int
avt_get_menu (wchar_t *ch, int menu_start, int menu_end, wchar_t start_code)
AVT_DEPRECATED;
AVT_API avt_image_t *avt_import_XPM (char **xpm) AVT_DEPRECATED;
AVT_API int avt_show_image_XPM (char **xpm) AVT_DEPRECATED;
AVT_END_DECLS
#endif /* _akfavatar_h */
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
Bei Farbnamen ist die Groß- und Kleinschreibung beliebig. Namen mit einem Leerzeichen dazwischen können nicht immer verwendet werden. Diese Namen können aber immer zu einem Wort zusammengeschrieben werden.
Andere Möglichkeiten Farben anzugeben werden in Dateiformate und andere Angaben erläutert.
Die folgenden Namen für Farben werden unterstützt:
snow, ghost white, GhostWhite, white smoke, WhiteSmoke, gainsboro, floral white, FloralWhite, old lace, OldLace, linen, antique white, AntiqueWhite, papaya whip, PapayaWhip, blanched almond, BlanchedAlmond, bisque, peach puff, PeachPuff, navajo white, NavajoWhite, moccasin, cornsilk, ivory, lemon chiffon, LemonChiffon, seashell, honeydew, mint cream, MintCream, azure, alice blue, AliceBlue, lavender, lavender blush, LavenderBlush, misty rose, MistyRose, white, black, dark slate gray, DarkSlateGray, dark slate grey, DarkSlateGrey, dim gray, DimGray, dim grey, DimGrey, slate gray, SlateGray, slate grey, SlateGrey, light slate gray, LightSlateGray, light slate grey, LightSlateGrey, gray, grey, light grey, LightGrey, light gray, LightGray, midnight blue, MidnightBlue, navy, navy blue, NavyBlue, cornflower blue, CornflowerBlue, dark slate blue, DarkSlateBlue, slate blue, SlateBlue, medium slate blue, MediumSlateBlue, light slate blue, LightSlateBlue, medium blue, MediumBlue, royal blue, RoyalBlue, blue, dodger blue, DodgerBlue, deep sky blue, DeepSkyBlue, sky blue, SkyBlue, light sky blue, LightSkyBlue, steel blue, SteelBlue, light steel blue, LightSteelBlue, light blue, LightBlue, powder blue, PowderBlue, pale turquoise, PaleTurquoise, dark turquoise, DarkTurquoise, medium turquoise, MediumTurquoise, turquoise, cyan, light cyan, LightCyan, cadet blue, CadetBlue, medium aquamarine, MediumAquamarine, aquamarine, dark green, DarkGreen, dark olive green, DarkOliveGreen, dark sea green, DarkSeaGreen, sea green, SeaGreen, medium sea green, MediumSeaGreen, light sea green, LightSeaGreen, pale green, PaleGreen, spring green, SpringGreen, lawn green, LawnGreen, green, chartreuse, medium spring green, MediumSpringGreen, green yellow, GreenYellow, lime green, LimeGreen, yellow green, YellowGreen, forest green, ForestGreen, olive drab, OliveDrab, dark khaki, DarkKhaki, khaki, pale goldenrod, PaleGoldenrod, light goldenrod yellow, LightGoldenrodYellow, light yellow, LightYellow, yellow, gold, light goldenrod, LightGoldenrod, goldenrod, dark goldenrod, DarkGoldenrod, rosy brown, RosyBrown, indian red, IndianRed, saddle brown, SaddleBrown, sienna, peru, burlywood, beige, wheat, sandy brown, SandyBrown, tan, chocolate, firebrick, brown, dark salmon, DarkSalmon, salmon, light salmon, LightSalmon, orange, dark orange, DarkOrange, coral, light coral, LightCoral, tomato, orange red, OrangeRed, red, hot pink, HotPink, deep pink, DeepPink, pink, light pink, LightPink, pale violet red, PaleVioletRed, maroon, medium violet red, MediumVioletRed, violet red, VioletRed, magenta, violet, plum, orchid, medium orchid, MediumOrchid, dark orchid, DarkOrchid, dark violet, DarkViolet, blue violet, BlueViolet, purple, medium purple, MediumPurple, thistle, snow1, snow2, snow3, snow4, seashell1, seashell2, seashell3, seashell4, AntiqueWhite1, AntiqueWhite2, AntiqueWhite3, AntiqueWhite4, bisque1, bisque2, bisque3, bisque4, PeachPuff1, PeachPuff2, PeachPuff3, PeachPuff4, NavajoWhite1, NavajoWhite2, NavajoWhite3, NavajoWhite4, LemonChiffon1, LemonChiffon2, LemonChiffon3, LemonChiffon4, cornsilk1, cornsilk2, cornsilk3, cornsilk4, ivory1, ivory2, ivory3, ivory4, honeydew1, honeydew2, honeydew3, honeydew4, LavenderBlush1, LavenderBlush2, LavenderBlush3, LavenderBlush4, MistyRose1, MistyRose2, MistyRose3, MistyRose4, azure1, azure2, azure3, azure4, SlateBlue1, SlateBlue2, SlateBlue3, SlateBlue4, RoyalBlue1, RoyalBlue2, RoyalBlue3, RoyalBlue4, blue1, blue2, blue3, blue4, DodgerBlue1, DodgerBlue2, DodgerBlue3, DodgerBlue4, SteelBlue1, SteelBlue2, SteelBlue3, SteelBlue4, DeepSkyBlue1, DeepSkyBlue2, DeepSkyBlue3, DeepSkyBlue4, SkyBlue1, SkyBlue2, SkyBlue3, SkyBlue4, LightSkyBlue1, LightSkyBlue2, LightSkyBlue3, LightSkyBlue4, SlateGray1, SlateGray2, SlateGray3, SlateGray4, LightSteelBlue1, LightSteelBlue2, LightSteelBlue3, LightSteelBlue4, LightBlue1, LightBlue2, LightBlue3, LightBlue4, LightCyan1, LightCyan2, LightCyan3, LightCyan4, PaleTurquoise1, PaleTurquoise2, PaleTurquoise3, PaleTurquoise4, CadetBlue1, CadetBlue2, CadetBlue3, CadetBlue4, turquoise1, turquoise2, turquoise3, turquoise4, cyan1, cyan2, cyan3, cyan4, DarkSlateGray1, DarkSlateGray2, DarkSlateGray3, DarkSlateGray4, aquamarine1, aquamarine2, aquamarine3, aquamarine4, DarkSeaGreen1, DarkSeaGreen2, DarkSeaGreen3, DarkSeaGreen4, SeaGreen1, SeaGreen2, SeaGreen3, SeaGreen4, PaleGreen1, PaleGreen2, PaleGreen3, PaleGreen4, SpringGreen1, SpringGreen2, SpringGreen3, SpringGreen4, green1, green2, green3, green4, chartreuse1, chartreuse2, chartreuse3, chartreuse4, OliveDrab1, OliveDrab2, OliveDrab3, OliveDrab4, DarkOliveGreen1, DarkOliveGreen2, DarkOliveGreen3, DarkOliveGreen4, khaki1, khaki2, khaki3, khaki4, LightGoldenrod1, LightGoldenrod2, LightGoldenrod3, LightGoldenrod4, LightYellow1, LightYellow2, LightYellow3, LightYellow4, yellow1, yellow2, yellow3, yellow4, gold1, gold2, gold3, gold4, goldenrod1, goldenrod2, goldenrod3, goldenrod4, DarkGoldenrod1, DarkGoldenrod2, DarkGoldenrod3, DarkGoldenrod4, RosyBrown1, RosyBrown2, RosyBrown3, RosyBrown4, IndianRed1, IndianRed2, IndianRed3, IndianRed4, sienna1, sienna2, sienna3, sienna4, burlywood1, burlywood2, burlywood3, burlywood4, wheat1, wheat2, wheat3, wheat4, tan1, tan2, tan3, tan4, chocolate1, chocolate2, chocolate3, chocolate4, firebrick1, firebrick2, firebrick3, firebrick4, brown1, brown2, brown3, brown4, salmon1, salmon2, salmon3, salmon4, LightSalmon1, LightSalmon2, LightSalmon3, LightSalmon4, orange1, orange2, orange3, orange4, DarkOrange1, DarkOrange2, DarkOrange3, DarkOrange4, coral1, coral2, coral3, coral4, tomato1, tomato2, tomato3, tomato4, OrangeRed1, OrangeRed2, OrangeRed3, OrangeRed4, red1, red2, red3, red4, DebianRed, DeepPink1, DeepPink2, DeepPink3, DeepPink4, HotPink1, HotPink2, HotPink3, HotPink4, pink1, pink2, pink3, pink4, LightPink1, LightPink2, LightPink3, LightPink4, PaleVioletRed1, PaleVioletRed2, PaleVioletRed3, PaleVioletRed4, maroon1, maroon2, maroon3, maroon4, VioletRed1, VioletRed2, VioletRed3, VioletRed4, magenta1, magenta2, magenta3, magenta4, orchid1, orchid2, orchid3, orchid4, plum1, plum2, plum3, plum4, MediumOrchid1, MediumOrchid2, MediumOrchid3, MediumOrchid4, DarkOrchid1, DarkOrchid2, DarkOrchid3, DarkOrchid4, purple1, purple2, purple3, purple4, MediumPurple1, MediumPurple2, MediumPurple3, MediumPurple4, thistle1, thistle2, thistle3, thistle4, gray0, grey0, gray1, grey1, gray2, grey2, gray3, grey3, gray4, grey4, gray5, grey5, gray6, grey6, gray7, grey7, gray8, grey8, gray9, grey9, gray10, grey10, gray11, grey11, gray12, grey12, gray13, grey13, gray14, grey14, gray15, grey15, gray16, grey16, gray17, grey17, gray18, grey18, gray19, grey19, gray20, grey20, gray21, grey21, gray22, grey22, gray23, grey23, gray24, grey24, gray25, grey25, gray26, grey26, gray27, grey27, gray28, grey28, gray29, grey29, gray30, grey30, gray31, grey31, gray32, grey32, gray33, grey33, gray34, grey34, gray35, grey35, gray36, grey36, gray37, grey37, gray38, grey38, gray39, grey39, gray40, grey40, gray41, grey41, gray42, grey42, gray43, grey43, gray44, grey44, gray45, grey45, gray46, grey46, gray47, grey47, gray48, grey48, gray49, grey49, gray50, grey50, gray51, grey51, gray52, grey52, gray53, grey53, gray54, grey54, gray55, grey55, gray56, grey56, gray57, grey57, gray58, grey58, gray59, grey59, gray60, grey60, gray61, grey61, gray62, grey62, gray63, grey63, gray64, grey64, gray65, grey65, gray66, grey66, gray67, grey67, gray68, grey68, gray69, grey69, gray70, grey70, gray71, grey71, gray72, grey72, gray73, grey73, gray74, grey74, gray75, grey75, gray76, grey76, gray77, grey77, gray78, grey78, gray79, grey79, gray80, grey80, gray81, grey81, gray82, grey82, gray83, grey83, gray84, grey84, gray85, grey85, gray86, grey86, gray87, grey87, gray88, grey88, gray89, grey89, gray90, grey90, gray91, grey91, gray92, grey92, gray93, grey93, gray94, grey94, gray95, grey95, gray96, grey96, gray97, grey97, gray98, grey98, gray99, grey99, gray100, grey100, dark grey, DarkGrey, dark gray, DarkGray, dark blue, DarkBlue, dark cyan, DarkCyan, dark magenta, DarkMagenta, dark red, DarkRed, light green, LightGreen |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
| Springe zu: | #
Ü
A B E F G H I K L M N O P R S T U V W |
|---|
| Springe zu: | #
Ü
A B E F G H I K L M N O P R S T U V W |
|---|
| [Anfang] | [Inhalt] | [Index] | [ ? ] |
avatarsay
avatarsay als lustiges Text-Terminal
avatarsay als lustiger Text-Betrachteravatarsay
avatarsay| [Anfang] | [Inhalt] | [Index] | [ ? ] |
Dieses Dokument wurde erzeugt von Andreas K. Foerster am 8. November 2009 durch texi2html 1.82.
Die Links in der Navigationsleiste haben die folgende Bedeutung:
| Button | Name | Gehe zu | Von 1.2.3 gehe zu |
|---|---|---|---|
| [ < ] | Zurück | Voriger Abschnitt in Lesereihenfolge | 1.2.2 |
| [ > ] | Nach vorne | Nächster Abschnitt in Lesereihenfolge | 1.2.4 |
| [ << ] | FastBack | Anfang dieses oder des letzten Kapitels | 1 |
| [ Nach oben ] | Nach oben | Abschnitt nach oben | 1.2 |
| [ >> ] | FastForward | Nächstes Kapitel | 2 |
| [Anfang] | Anfang | Titelseite des Dokuments | |
| [Inhalt] | Inhalt | Inhaltsverzeichnis | |
| [Index] | Index | Index | |
| [ ? ] | Über | Über (Hilfe) |
wobei das Beispiel annimmt, dass die aktuelle Position bei Unterabschnitt 1-2-3 in einem Dokument mit folgender Struktur liegt:
Dieses Dokument wurde erzeugt von Andreas K. Foerster am 8. November 2009 durch texi2html 1.82.