<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.tuxbox-neutrino.org/w/index.php?action=history&amp;feed=atom&amp;title=DBOX2-Modul</id>
	<title>DBOX2-Modul - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tuxbox-neutrino.org/w/index.php?action=history&amp;feed=atom&amp;title=DBOX2-Modul"/>
	<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;action=history"/>
	<updated>2026-04-21T20:32:27Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in TuxBoxWIKI</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=14900&amp;oldid=prev</id>
		<title>WikiBot: Bot: Fixing redirects</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=14900&amp;oldid=prev"/>
		<updated>2011-08-24T09:00:17Z</updated>

		<summary type="html">&lt;p&gt;Bot: Fixing redirects&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Register]]&lt;br /&gt;
__TOC__ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{DoppelterArtikel|Plugins:Tutorial}}&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Um nicht zu viel zu sagen: Ein Plugin ist eine Erweiterung zu einem&lt;br /&gt;
vorhandenen Programm und hat folgende Attribute:&lt;br /&gt;
&lt;br /&gt;
* Erweiterung&lt;br /&gt;
* dynamisch ladbar/entladbar&lt;br /&gt;
* Plugins können/werden unabhängig vom Ladeprogramm (Hauptprogramm) produziert&lt;br /&gt;
* Plugins sind abhängig vom Hauptprogramm&lt;br /&gt;
* durch bestimmte bereitgestellte Funktionen (Schnittstellen) können Plugins untereinander kommunizieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins können durch bestimmte Mechanismen in das Programm eingebunden (verbunden) werden (auch als linken bezeichnet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor ein Plugin (wie oben schon erwähnt) eingebunden werden kann, wird durch bestimmte Mechanismen versucht alle nicht gebundenen (nicht gelinkten) Symbole zu binden.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei [[Unix]]-System haben Module/Plugins oftmals die Erweiterung '''so''' (shared object) und bei Windows '''dll''' (dynamic linked library).&lt;br /&gt;
Beide Systeme können Plugins dynamisch laden und entladen. Es gibt kein einheitliches Aussehen eines Plugins. Eintrittspunkte, Funktionen die bei bestimmten Events aufgerufen werden, sind oftmals in den Programmen nicht gleich.&lt;br /&gt;
Fehler, die in Plugins vorkommen, können zu Abstürzen führen (Programm, OS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Implementierung eines Plugins=&lt;br /&gt;
Die Implementierung eines Plugins sollte erst nach einer ausführlichen Planung kommen. Die Planung beschreibt das Aussehen des Plugins, bzw. die verwendeten Funktionen und deren späteren Programmierung. Während dieser Phase sollten alle wichtigen Eigenschaften des Hostes Hauptprogramm eingeholt bzw. berücksichtigt werden.&lt;br /&gt;
Fehlerhafte Planungen können spätere Fehler in den Programmen bedeuten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interface eines Modules=&lt;br /&gt;
Jedes Programm, das erweiterbar ist, benutzt eine Schnittstelle (oder mehrere), auch als Interface bezeichnet. Es gibt nur wenige Standards, z.B. VST (Musikbranche). Man sollte mit diesen Schnittstellen arbeiten, um einen Ablauf ohne Fehler zu garantieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ein Plugin=&lt;br /&gt;
'''(ergänzen bzw. ändern)'''&lt;br /&gt;
Ein C-Programm hat einen Eintrittspunkt und zwar main. Main ist sozusagen die Hauptfunktion eines C-Programmes. Jedes mal wenn man ein Programm aufrufen, das in C geschrieben wurde, dann wird diese Funktion aufgerufen. Wenn man die Funktion beenden, wird auch das Programm beendet. Der Unterschied zu Plugins dabei ist, dass diese meistens keine Hauptfunktion haben, sondern nur Funktionen, die bei bestimmten Events gerufen werden. Stellt man sich das Plugin als einen Stecker vor, den man in eine Buchse steckt, dann verbindet man dabei die Kontakte der Buchse mit dem Stecker und es besteht eine Verbindung. Bei Plugins ist das genauso, der Stecker ist dabei sozusagen das Plugin und die Buchse die Schnittstelle.&lt;br /&gt;
Bei der [[Hardware:dbox2|DBox2]] hat ein Plugin eine Methode/Funktion die vom Lader aufgerufen wird, wenn man es lädt. Diese Funktion heißt plugin_exec.&lt;br /&gt;
Der Funktion wird zusätzlich ein Argument übergeben, und zwar eine Struktur: Sie ist vom Typ _PluginParam.&lt;br /&gt;
Eine Struktur hat mehrere Felder, die man während des Programmierens/Laufzeit ansprechen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Struktur PluginParam hat folgende Elemente:&lt;br /&gt;
*id: &lt;br /&gt;
:ist ein Character-Pointer und wird verwendet, um den Wert in val zu identifizieren.&lt;br /&gt;
&lt;br /&gt;
*val: &lt;br /&gt;
:ist ein Character-Pointer. val beinhaltet den Wert. Er kann z.B. ein FD (File Descriptor, Handles) für eine Datei, z.B. lcd oder fb (frame buffer) sein. Achtung, bevor man den Character-Pointer verwenden kann, muss man ihn in ein Integer umwandeln.&lt;br /&gt;
&lt;br /&gt;
*next: &lt;br /&gt;
:next ist vom Typ PluginParam. Er kann weitere der oben genannten Informationen enthalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die DBox2 bietet folgende Interfaces=&lt;br /&gt;
==FX2==&lt;br /&gt;
FX2 (nach dem Author) ist eine Bibliothek (Library, kurz. lib, deshalb wird diese Bibliothek auch als libfx2 genannt) mit der man graphische Operationen durchführen können. Ein weiteres Feature der&lt;br /&gt;
Library sind Remote-Control-Operationen.&lt;br /&gt;
&lt;br /&gt;
Folgende graphische Operationen werden verwendet:&lt;br /&gt;
&lt;br /&gt;
* Zeichnen von horizontalen und vertikalen Linien&lt;br /&gt;
* Zeichnen von Buchstaben&lt;br /&gt;
* Verschieben von Bildinhalten&lt;br /&gt;
* Kopieren von Bildinhalten&lt;br /&gt;
* Zeichnen von ungefüllten und gefüllten Rechtecken&lt;br /&gt;
* Pixel-Operationen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enigma-Widgets==&lt;br /&gt;
Enigma bietet [[Widget|Widgets]] für Programme an.&lt;br /&gt;
&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Module können genauso auf Schnittstellen zugreifen, wie andere Programme.&lt;br /&gt;
Sie sind also nicht auf die bereitgestellten Funktionen des Hauptprogrammes eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wie erstellt man denn nun Plugins ? (Aufbauhase)=&lt;br /&gt;
''Der Absatz befindet sich noch im Aufbau, bitte verwenden Sie [[Plugins:Tutorial]], statt diesem Abschnitt.''&lt;br /&gt;
&lt;br /&gt;
Voraussetzung für dieses Tutorial sollten Kentnisse in C/C++ sein. Ein CDK, welches funktioniert, ist klar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==VT==&lt;br /&gt;
Als erstes fangen wir mit den Grundlagen an.  Der nachfolgende Code gibt lediglich eine Hallo-Welt! Message aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Der Quelltext===&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;plugin.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 plugin_exec (PluginParam * strc)&lt;br /&gt;
 {&lt;br /&gt;
    printf (&amp;quot;Hallo-Welt!&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aufbau des Quelltextes ===&lt;br /&gt;
In Zeile 4 implementieren wir die Funktion plugin_exec.&lt;br /&gt;
In dieser Funktion wird mittels printf ein String &amp;quot;Hallo-Welt!&amp;quot; ausgegeben. In Zeile 6 wird die Funktion beendet und das Plugin wird entladen.&lt;br /&gt;
&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
TODO: Erstellung einer Makefile.am, Modifizieren der Makefile.am bzw. configure.ac.&lt;br /&gt;
&lt;br /&gt;
TODO: Testen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LIBFX2 ==&lt;br /&gt;
Als nächstes widmen wir uns der LIBFX2. Mit ihr wollen wir ein Beispielprogramm erzeugen, das lediglich eine horizontale Linie&lt;br /&gt;
mit einem Rechteck darunter und einer vertikalen Line daneben (mittels FB) ausgibt.&lt;br /&gt;
&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enigma==&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{review}}&lt;br /&gt;
&lt;br /&gt;
{{body}}&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5413&amp;oldid=prev</id>
		<title>Mash4077: Typos</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5413&amp;oldid=prev"/>
		<updated>2005-06-30T16:26:27Z</updated>

		<summary type="html">&lt;p&gt;Typos&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 30. Juni 2005, 18:26 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot;&gt;Zeile 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Ein Plugin=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Ein Plugin=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''(ergänzen bzw. ändern)'''&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''(ergänzen bzw. ändern)'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ein C-Programm hat einen Eintrittspunkt und zwar main. Main ist sozusagen die Hauptfunktion eines C-Programmes. Jedes mal wenn man ein Programm aufrufen, das in C geschrieben wurde, dann wird diese Funktion aufgerufen. Wenn man die Funktion beenden, wird auch das Programm beendet. Der Unterschied zu Plugins dabei ist, dass diese meistens keine Hauptfunktion haben, sondern nur Funktionen, die bei bestimmten Events gerufen werden. Stellt man sich das Plugin als einen Stecker vor, den man in eine Buchse steckt, dann verbindet man dabei die Kontakte der Buchse mit dem Stecker und es besteht eine Verbindung&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, bei &lt;/del&gt;Plugins ist das genauso&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Der &lt;/del&gt;Stecker ist dabei sozusagen das Plugin und die Buchse die Schnittstelle.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ein C-Programm hat einen Eintrittspunkt und zwar main. Main ist sozusagen die Hauptfunktion eines C-Programmes. Jedes mal wenn man ein Programm aufrufen, das in C geschrieben wurde, dann wird diese Funktion aufgerufen. Wenn man die Funktion beenden, wird auch das Programm beendet. Der Unterschied zu Plugins dabei ist, dass diese meistens keine Hauptfunktion haben, sondern nur Funktionen, die bei bestimmten Events gerufen werden. Stellt man sich das Plugin als einen Stecker vor, den man in eine Buchse steckt, dann verbindet man dabei die Kontakte der Buchse mit dem Stecker und es besteht eine Verbindung&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Bei &lt;/ins&gt;Plugins ist das genauso&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, der &lt;/ins&gt;Stecker ist dabei sozusagen das Plugin und die Buchse die Schnittstelle.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Bei der [[DBox2]] hat ein Plugin eine Methode/Funktion die vom Lader aufgerufen wird, wenn man es lädt. Diese Funktion heißt plugin_exec.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Bei der [[DBox2]] hat ein Plugin eine Methode/Funktion die vom Lader aufgerufen wird, wenn man es lädt. Diese Funktion heißt plugin_exec.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der Funktion wird zusätzlich ein Argument übergeben, und zwar eine Struktur: Sie ist vom Typ _PluginParam.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der Funktion wird zusätzlich ein Argument übergeben, und zwar eine Struktur: Sie ist vom Typ _PluginParam.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l112&quot;&gt;Zeile 112:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 112:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== LIBFX2 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== LIBFX2 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Als nächstes widmen wir uns der LIBFX2. Mit ihr wollen wir ein Beispielprogramm erzeugen, das lediglich eine horizontale &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Line&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Als nächstes widmen wir uns der LIBFX2. Mit ihr wollen wir ein Beispielprogramm erzeugen, das lediglich eine horizontale &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Linie&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;mit einem Rechteck darunter und einer vertikalen Line daneben (mittels FB) ausgibt.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;mit einem Rechteck darunter und einer vertikalen Line daneben (mittels FB) ausgibt.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mash4077</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5412&amp;oldid=prev</id>
		<title>Mash4077: Typos, Links, Konventionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5412&amp;oldid=prev"/>
		<updated>2005-06-30T16:23:07Z</updated>

		<summary type="html">&lt;p&gt;Typos, Links, Konventionen&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Register]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Um nicht zu viel zu sagen: Ein Plugin ist eine Erweiterung zu einem&lt;br /&gt;
vorhandenen Programm und hat folgende Attribute:&lt;br /&gt;
&lt;br /&gt;
* Erweiterung&lt;br /&gt;
* dynamisch ladbar/entladbar&lt;br /&gt;
* Plugins können/werden unabhängig vom Ladeprogramm (Hauptprogramm) produziert&lt;br /&gt;
* Plugins sind abhängig vom Hauptprogramm&lt;br /&gt;
* durch bestimmte bereitgestellte Funktionen (Schnittstellen) können Plugins untereinander kommunizieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins können durch bestimmte Mechanismen in das Programm eingebunden (verbunden) werden (auch als linken bezeichnet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor ein Plugin (wie oben schon erwähnt) eingebunden werden kann, wird durch bestimmte Mechanismen versucht alle nicht gebundenen (nicht gelinkten) Symbole zu binden.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei [[Unix]]-System haben Module/Plugins oftmals die Erweiterung '''so''' (shared object) und bei Windows '''dll''' (dynamic linked library).&lt;br /&gt;
Beide Systeme können Plugins dynamisch laden und entladen. Es gibt kein einheitliches Aussehen eines Plugins. Eintrittspunkte, Funktionen die bei bestimmten Events aufgerufen werden, sind oftmals in den Programmen nicht gleich.&lt;br /&gt;
Fehler, die in Plugins vorkommen, können zu Abstürzen führen (Programm, OS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Implementierung eines Plugins=&lt;br /&gt;
Die Implementierung eines Plugins sollte erst nach einer ausführlichen Planung kommen. Die Planung beschreibt das Aussehen des Plugins, bzw. die verwendeten Funktionen und deren späteren Programmierung. Während dieser Phase sollten alle wichtigen Eigenschaften des Hostes Hauptprogramm eingeholt bzw. berücksichtigt werden.&lt;br /&gt;
Fehlerhafte Planungen können spätere Fehler in den Programmen bedeuten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interface eines Modules=&lt;br /&gt;
Jedes Programm, das erweiterbar ist, benutzt eine Schnittstelle (oder mehrere), auch als Interface bezeichnet. Es gibt nur wenige Standards, z.B. VST (Musikbranche). Man sollte mit diesen Schnittstellen arbeiten, um einen Ablauf ohne Fehler zu garantieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ein Plugin=&lt;br /&gt;
'''(ergänzen bzw. ändern)'''&lt;br /&gt;
Ein C-Programm hat einen Eintrittspunkt und zwar main. Main ist sozusagen die Hauptfunktion eines C-Programmes. Jedes mal wenn man ein Programm aufrufen, das in C geschrieben wurde, dann wird diese Funktion aufgerufen. Wenn man die Funktion beenden, wird auch das Programm beendet. Der Unterschied zu Plugins dabei ist, dass diese meistens keine Hauptfunktion haben, sondern nur Funktionen, die bei bestimmten Events gerufen werden. Stellt man sich das Plugin als einen Stecker vor, den man in eine Buchse steckt, dann verbindet man dabei die Kontakte der Buchse mit dem Stecker und es besteht eine Verbindung, bei Plugins ist das genauso. Der Stecker ist dabei sozusagen das Plugin und die Buchse die Schnittstelle.&lt;br /&gt;
Bei der [[DBox2]] hat ein Plugin eine Methode/Funktion die vom Lader aufgerufen wird, wenn man es lädt. Diese Funktion heißt plugin_exec.&lt;br /&gt;
Der Funktion wird zusätzlich ein Argument übergeben, und zwar eine Struktur: Sie ist vom Typ _PluginParam.&lt;br /&gt;
Eine Struktur hat mehrere Felder, die man während des Programmierens/Laufzeit ansprechen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Struktur PluginParam hat folgende Elemente:&lt;br /&gt;
*id: &lt;br /&gt;
:ist ein Character-Pointer und wird verwendet, um den Wert in val zu identifizieren.&lt;br /&gt;
&lt;br /&gt;
*val: &lt;br /&gt;
:ist ein Character-Pointer. val beinhaltet den Wert. Er kann z.B. ein FD (File Descriptor, Handles) für eine Datei, z.B. lcd oder fb (frame buffer) sein. Achtung, bevor man den Character-Pointer verwenden kann, muss man ihn in ein Integer umwandeln.&lt;br /&gt;
&lt;br /&gt;
*next: &lt;br /&gt;
:next ist vom Typ PluginParam. Er kann weitere der oben genannten Informationen enthalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die DBox2 bietet folgende Interfaces=&lt;br /&gt;
==FX2==&lt;br /&gt;
FX2 (nach dem Author) ist eine Bibliothek (Library, kurz. lib, deshalb wird diese Bibliothek auch als libfx2 genannt) mit der man graphische Operationen durchführen können. Ein weiteres Feature der&lt;br /&gt;
Library sind Remote-Control-Operationen.&lt;br /&gt;
&lt;br /&gt;
Folgende graphische Operationen werden verwendet:&lt;br /&gt;
&lt;br /&gt;
* Zeichnen von horizontalen und vertikalen Linien&lt;br /&gt;
* Zeichnen von Buchstaben&lt;br /&gt;
* Verschieben von Bildinhalten&lt;br /&gt;
* Kopieren von Bildinhalten&lt;br /&gt;
* Zeichnen von ungefüllten und gefüllten Rechtecken&lt;br /&gt;
* Pixel-Operationen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enigma-Widgets==&lt;br /&gt;
Enigma bietet Widgets für Programme an. Das ist der Unterschied zu anderen GUI, wie z.B. Neutrino/LCARS.&lt;br /&gt;
Widgets:&lt;br /&gt;
&lt;br /&gt;
* Listbox&lt;br /&gt;
* Button&lt;br /&gt;
&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Module können genauso auf Schnittstellen zugreifen, wie andere Programme.&lt;br /&gt;
Sie sind also nicht auf die bereitgestellten Funktionen des Hauptprogrammes eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wie erstellt man denn nun Plugins ?=&lt;br /&gt;
Voraussetzung für dieses Tutorial sollten Kentnisse in C/C++ sein. Ein CDK, welches funktioniert, ist klar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==VT==&lt;br /&gt;
Als erstes fangen wir mit den Grundlagen an.  Der nachfolgende Code gibt lediglich eine Hallo-Welt! Message aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Der Quelltext===&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;plugin.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 plugin_exec (PluginParam * strc)&lt;br /&gt;
 {&lt;br /&gt;
    printf (&amp;quot;Hallo-Welt!&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aufbau des Quelltextes ===&lt;br /&gt;
In Zeile 4 implementieren wir die Funktion plugin_exec.&lt;br /&gt;
In dieser Funktion wird mittels printf ein String &amp;quot;Hallo-Welt!&amp;quot; ausgegeben. In Zeile 6 wird die Funktion beendet und das Plugin wird entladen.&lt;br /&gt;
&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
TODO: Erstellung einer Makefile.am, Modifizieren der Makefile.am bzw. configure.ac.&lt;br /&gt;
&lt;br /&gt;
TODO: Testen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LIBFX2 ==&lt;br /&gt;
Als nächstes widmen wir uns der LIBFX2. Mit ihr wollen wir ein Beispielprogramm erzeugen, das lediglich eine horizontale Line&lt;br /&gt;
mit einem Rechteck darunter und einer vertikalen Line daneben (mittels FB) ausgibt.&lt;br /&gt;
&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enigma==&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{review}}&lt;br /&gt;
&lt;br /&gt;
{{body}}&lt;/div&gt;</summary>
		<author><name>Mash4077</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5407&amp;oldid=prev</id>
		<title>Sat Man am 30. Juni 2005 um 12:58 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5407&amp;oldid=prev"/>
		<updated>2005-06-30T12:58:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 30. Juni 2005, 14:58 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot;&gt;Zeile 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Allgemeines=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Allgemeines=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Um nicht zu viel zu sagen: Ein Plugin ist eine Erweiterung zu einem&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Um nicht zu viel zu sagen: Ein Plugin ist eine Erweiterung zu einem&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vorhandeneb &lt;/del&gt;Programm und hat folgende Attribute:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vorhandenen &lt;/ins&gt;Programm und hat folgende Attribute:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Erweiterung&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Erweiterung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l72&quot;&gt;Zeile 72:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 72:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Wie erstelle ich denn nun Plugins ?=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Wie erstelle ich denn nun Plugins?=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==VT==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==VT==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==LIBFX2==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==LIBFX2==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Enigma=={{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Enigma==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{missingText}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{review}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{review}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{body}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{body}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sat Man</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5406&amp;oldid=prev</id>
		<title>Sat Man: viele typo fixes</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxbox-neutrino.org/w/index.php?title=DBOX2-Modul&amp;diff=5406&amp;oldid=prev"/>
		<updated>2005-06-30T12:57:02Z</updated>

		<summary type="html">&lt;p&gt;viele typo fixes&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Register]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Allgemeines=&lt;br /&gt;
Um nicht zu viel zu sagen: Ein Plugin ist eine Erweiterung zu einem&lt;br /&gt;
vorhandeneb Programm und hat folgende Attribute:&lt;br /&gt;
&lt;br /&gt;
* Erweiterung&lt;br /&gt;
* dynamisch ladbar/entladbar&lt;br /&gt;
* Plugins können/werden unabhängig vom Ladeprogramm (Hauptprogramm) produziert bzw. werden&lt;br /&gt;
* Plugins sind abhängig vom Hauptprogramm&lt;br /&gt;
* durch bestimmte bereitgestellte Funktionen (Schnittstellen) können Plugins untereinander kommunizieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins können durch bestimmte Mechanismen in das Programm eingebunden (verbunden) werden (auch als linken bezeichnet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor ein Plugin (wie oben schon erwähnt) eingebunden werden kann, wird durch bestimmte Mechanismen versucht alle nicht gebundenen (nicht gelinkten) Symbole zu binden.&amp;lt;br&amp;gt;&lt;br /&gt;
Bei Unix-System haben Module/Plugins oftmals die Erweiterung '''so''' (shared object) und bei Windows '''dll'''.&lt;br /&gt;
Beide Systeme können Plugins dynamisch laden und entladen. Es gibt kein einheitliches Aussehen eines Plugins, Eintrittspunkt, Funktionen die bei bestimmten Events aufgerufen werden, sind oftmals in den Programmen nicht gleich.&lt;br /&gt;
Fehler die in Plugins vorkommen, können zu Abstürzen führen (Programm, OS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die Implementation eines Plugins=&lt;br /&gt;
Die Implementation eines Plugins sollte erst nach der ausführlichen Planung kommen. Die Planung beschreibt das Aussehen des Plugins, bzw. die verwendeten Funktionen und deren späteren Programmierung. Während dieser Phase sollten alle wichtigen Eigenschaften des Hostes Hauptprogramm eingeholt bzw. berücksichtigt werden.&lt;br /&gt;
Fehlerhafte Planungen können spätere Fehler in den Programmen bedeuten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interface eines Modules=&lt;br /&gt;
Jedes Programm, das erweiterbar ist, benutzt eine andere Schnittstelle (oder mehrere), auch als Interface bezeichnet. Es gibt nur wenige Standards, z.B. VST (Musikbranche). Man sollte mit diesen Schnittstellen arbeiten, um einen Ablauf ohne Fehler zu garantieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ein Plugin=&lt;br /&gt;
'''(ergänzen bzw. ändern)'''&lt;br /&gt;
Ein C-Programm hat einen Eintrittspunkt und zwar main. Main ist sozusagen die Hauptfunktion eines C-Programmes. Jedes mal, wenn Sie ein Programm aufrufen das in C geschrieben wurde, dann wird diese Funktion aufgerufen. Wenn Sie die Funktion beenden, wird auch das Programm beendet. Der Unterschied zu Plugins dabei ist, dass diese meistens keine Hauptfunktion haben, sondern nur Funktionen die bei bestimmten Abläufen aufgerufen werden. Stellen Sie sich das Plugin als ein Stecker vor, diesen stecken Sie in die Buchse, dabei verbinden Sie die Kontakte der Buchse mit dem Stecker und es besteht eine Verbindung, bei Plugins ist das genauso. Stecker ist das Plugin und die Buchse die Schnittstellen.&lt;br /&gt;
Bei der [[DBox2]] hat ein Plugin eine Methode/Funktion die vom Lader aufgerufen wird, wenn Sie es laden. Diese Funktion heißt plugin_exec.&lt;br /&gt;
Der Funktion wird zusätzlich ein Argument übergeben und zwar eine Struktur: Sie ist vom Typ _PluginParam.&lt;br /&gt;
Eine Struktur hat mehrere Felder, die Sie während des Programmierens/Laufzeit ansprechen können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Struktur PluginParam hat folgende Elemente:&lt;br /&gt;
*id: &lt;br /&gt;
:ist ein Character-Pointer und wird verwendet, um den Wert in val zu identifizieren.&lt;br /&gt;
&lt;br /&gt;
*val: &lt;br /&gt;
:ist ein Characterpointer. val beinhaltet den Wert. Er kann z.B. ein FD (File Descriptor, Handles) für eine Datei, z.B. lcd oder fb (frame buffer). Achtung, bevor Sie den Character-Pointer verwenden können, müssen Sie ihn in ein Integer umwandeln.&lt;br /&gt;
&lt;br /&gt;
*next: &lt;br /&gt;
:next ist vom Typ PluginParam. Er kann weitere der oben genannten Informationen enthalten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Die DBox2 bietet folgende Interfaces=&lt;br /&gt;
==FX2==&lt;br /&gt;
FX2 (nach dem Author) ist eine Bibliothek (Library, kurz. lib, deshalb wird diese Bibliothek auch als libfx2 genannt) mit der Sie graphische Operationen durchführen können. Ein weiteres Feature der Library sind die Remote-Control-Operationen.&lt;br /&gt;
&lt;br /&gt;
Folgende graphische Operationen werden verwendet:&lt;br /&gt;
&lt;br /&gt;
* Zeichnen von horizontalen und vertikalen Linien&lt;br /&gt;
* Zeichnen von Buchstaben&lt;br /&gt;
* Verschieben von Bildinhalten&lt;br /&gt;
* Kopieren von Bildinhalten&lt;br /&gt;
* Zeichnen von ungefüllten und gefüllten Rechtecken&lt;br /&gt;
* Pixel-Operationen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Enigma-Widgets==&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
{{missingText}}&lt;br /&gt;
&lt;br /&gt;
=Wie erstelle ich denn nun Plugins ?=&lt;br /&gt;
{{missingText}}&lt;br /&gt;
==VT==&lt;br /&gt;
{{missingText}}&lt;br /&gt;
==LIBFX2==&lt;br /&gt;
{{missingText}}&lt;br /&gt;
==Enigma=={{missingText}}&lt;br /&gt;
{{review}}&lt;br /&gt;
&lt;br /&gt;
{{body}}&lt;/div&gt;</summary>
		<author><name>Sat Man</name></author>
	</entry>
</feed>