# Tingeltangel - Handbuch

## Inhalt

Grundlagen zu IDs
Beispiel: Eigenes Buch erstellen
Objekt Eintrag
Rechte Fensterseite
Menü
Skripte

## Grundlagen zu IDs

Um sich in Tingeltangel zurechtzufinden, sind ein paar wenige Grundkenntnisse n&oouml;tig. Voraussetzung zum Verstehen der Grundlagen ist, dass man schon einmal ein Ting-Buch ausprobiert hat.
Es gibt in Ting-Büchern verschiedene Codes, die von dem Stift ausgelesen werden können. Sie unterteilen sich im wesentlichen in zwei Gruppen:

- Media-IDs:
  Das sind die Buch-IDs bzw. die Aktivierungscodes, die sich normalerweise auf der Vorderseite des Buches befinden
- Objekt-IDs:
  IDs bzw. Codes der einzelnen Objekte im Buch selbst

Gleiche Objekt-IDs können somit in verschiedenen Büchern vorkommen.
Nicht von jeder ID ist der Code bekannt, d.h. für einige IDs kann keine Code erzeugt werden. Bekannt sind im Moment die IDs 0-1134 und 4716-19443. Diese IDs sollten für die meisten Zwecke ausreichend sein.
Media-IDs
Media-IDs liegen in dem Bereich 1-10000 wobei nicht jede beliebige ID genutzt werden kann, da sie u.U. schon von einem offiziellen Ting-Buch genutzt wird. Tingeltangel unterstützt Dich dabei eine freie Media-ID für ein eigenes Buch zu finden.
Objekt-IDs
Objekt-IDs liegen in dem Bereich 15001-65535. Von einigen offiziellen Büchern wird auch die ID 15000 "genutzt". Das ist nicht zu empfehlen und kann zu unerwünschtem Verhalten führen.

## Beispiel: Eigenes Buch erstellen

Wähle im Menü "Buch"->"Neu" aus. Wähle eine der angezeigten IDs aus und klicke auf "OK". Im rechten Teil des Bildschirms können einige Meta-Daten zu dem Buch angegeben werden.

ID | Die Buch-ID (MID) (kann mit einem Klick geändert werden)
Name | Buchname
Verleger | Verleger
Autor | Autor
Version | Versionsnummer (für eigene Bücher kann hier immer eine 1 stehen)
URL | Eine beliebige Webadresse
? | Unbekannter Zahlwert (sollte auf 11 stehen)
Datum | Erstellungsdatum des Buchs (kann nicht geändert werden)

Desweiteren kann das Buchcover mit einem Klick auf "Sample" ausgewechselt werden. Das Cover muss als PNG-Datei vorliegen und sollte eine Größe von 140 mal 193 Pixel haben.
Nun fügen wir ein paar Tracks, also Objekt-IDs hinzu. Hierzu muss man rechts oben die Anzahl der gewünschten IDs eintragen (z.B. 3) und die Start ID angeben. Der Vorausgewählte Wert von 15001 (erste nutzbare Objekt-ID) genügt. Danach klickt man auf "hinzufügen".
Füge nun für die Einträge unterschiedliche MP3s durch Klicks auf das "Eject" Symbol () hinzu. Nun ist es Zeit das Buch mit der Menüauswahl "Buch"->"Speichern" zu speichern. Jetzt kann man den Ting-Stift mit dem Rechner verbinden und warten bis rechts der Button "deployen" anwählbar ist. Bei einem Klick auf "deployen" wird das Buch generiert und auf den Stift kopiert. Der Stift kann nun wieder entfernt werden (Vorsicht: Der Stift muss "sicher" entfernt werden).
Jetzt wählt man im Menü unter "Buch"->"Booklet generieren" aus und speichert das Booklet ab. Das resultierende PostScript File (.ps) kann nun auf einem Drucker mit mindestens 600dpi ausgedruckt werden.

## Objekt Eintrag

MP3 Skript Skript (Unterroutine) TTS (Text-To-Speach) | Zeigt den Typ des Eintrags an. Mit einem Klick aus das Symbol kann er geändert werden
| Löscht diesen Eintrag
| Spielt diesen Eintrag ab
| Ändert das MP3 zu diesem Eintrag
| Kompiliert diesen Eintrag
| Speichert den Ting-Code als PNG
| Kopiert den Ting-Code in die Zwischenablage
| speichert das MP3
Code | gibt an, ob ein Code für diesen eintrag erstellt werden soll

Die Textbox unter den Icons hat je nach Typ des Eintrags eine andere Bedeutung.

MP3 | Frei wäbarer Text (z.B. Traskript des MP3s)
Skript / Unterroutine | Der Code
TTS | Der vorzulesende Text

## Rechte Fensterseite

Skip | Überspringt diesen Track
Stop | Beendet das Playback

## Menü

Buch

Neu | Erstellt ein neues Buch
Laden | Lädt ein Buch
Importieren |
manuell | Importieren von ouf/src Dateien
Repository | Importieren von offiziellen Ting-Servern
yaml (tiptoi) |
Wimmelbuch | wimmelbuch import (siehe https://www.ting-el-tangel.de/doku.php?id=wimmelbuch_import)
Speichern | Speichert das aktuelle Buch
Generieren | Generiert das aktuelle Buch zum mauellen kopieren auf den Ting-stift
alle MP3s als zip herunterladen | speichert alle MP3s des aktuellen Buches
Alle Codes generieren | speichert alle Codes des aktuellen Buches
Beenden | beendet das Tingeltangel-Tool

Aktionen

Bücherliste aktualisieren | sucht nach neuen/unbekannten Büchern auf den Ting-Servern
Bücher aktualisieren | aktualisiert heruntergeladene Bucher
Buch löschen | löscht ein Buch
Bücherliste aufräumen | löscht heruntergeladene Bücher um Speicherplatz zu sparen
CLI Skript ausführen | führt ein CLI Skript aus

Einstellungen

externe Programme | Konfiguration externer Programme (espeak, lame, avconv). Diese externen Programme werden nur benötigt wenn TTS (Text-to-Speach) oder der yaml Import genutzt werden soll.
TTS | Text-to-Speach konfiguration (siehe https://www.ting-el-tangel.de/ext/install.html)
Codes | Konfiguration der Codes für einen bestimmten drucker (siehe https://www.ting-el-tangel.de/doku.php?id=drucken)

Codes

Ting-IDs |
Media IDs (MIDs) | Erstellen von Test-Codes
Commercial IDs (CIDs) | Erstellen von Test-Codes
Object IDs (OIDs) | Erstellen von Test-Codes
Code-IDs |
Tabelle Erstellen |
Ting-ID -> Code-ID | Erstellt eine Übersetzungstabelle von Ting-IDs nach Code-IDs
Code-ID -> Ting-ID | Erstellt eine Übersetzungstabelle von Code-IDs nach Ting-IDs

Informationen

Handbuch | öffnet dieses Handbuch
Kontakt | Kontaktdaten
Lizenz | Die Lizenz

## Skripte

offizielle Befehle

end | Beendet das Skript
clearver | Löscht alle Register
set [Register] [Value|Register] | arg1 := arg2
cmp [Register] [Value|Register] | Vergleich zweier Werte
and [Register] [Value|Register] | arg1 := arg1 & arg2 (Binäres-Und)
or [Register] [Value|Register] | arg1 := arg1 | arg2 (Binäres-Oder)
not [Register] | arg1 := ^arg1 (Binäres-Nicht)
jmp [Label] | Sprung ohne Bedingung
je [Label] | Sprung, wenn letzter cmd Vergleich: arg1 == arg2
jne [Label] | Sprung, wenn letzter cmd Vergleich: arg1 != arg2
jg [Label] | Sprung, wenn letzter cmd Vergleich: arg1 > arg2
jge [Label] | Sprung, wenn letzter cmd Vergleich: arg1 >= arg2
jb [Label] | Sprung, wenn letzter cmd Vergleich: arg1 < arg2
jbe [Label] | Sprung, wenn letzter cmd Vergleich: arg1 <= arg2
add [Register] [Value|Register] | arg1 := arg1 + arg2
sub [Register] [Value|Register] | arg1 := arg1 - arg2
playoid [Value|Register] | Spielt das MP3 mit der gegebenen OID ab
pause [Value|Register] | Pausiert für n zehntel Sekunden
call [Value] | Ruft eine subroutine auf
return | Rückkehr von einer Subroutine

inoffizielle Befehle

callid [Value] | Entspricht einer Auswahl der Ting-ID mit dem Stift. Wenn man hier eine MID angibt, kann man auch das aktuelle Buch wechseln.
mul [Register] [Register|Value] | arg1 := arg1 * arg2
div [Register] [Register|Value] | arg1 := arg1 / arg2
mod [Register] [Register|Value] | arg1 := arg1 mod arg2
divmod [Register] [Register] | help := arg1 arg1 := arg1 / arg2 arg2 := help mod arg2
min [Register] [Register|Value] | arg1 := min(arg1, arg2)
max [Register] [Register|Value] | arg1 := max(arg1, arg2)
exp2 [Register] | arg1 := 2 ^ arg1
rnd [Register] [Register|Value] | arg1 wird auf einen zufälligen Wert zw. 0 (inclusive) und arg1 (inclusive) gesetzt
volume [Register|Value] | setzt die Stiftlautstärke (1-20)
lastid [Register] | arg1 = "letzte angewählte Ting-OID"
lang [Register] | arg1 = "Sprachcode"
setbit [Register] [Register|Value] | setzt das arg2-te Bit im Register arg1 auf 1
unsetbit [Register] [Register|Value] | setzt das arg2-te Bit im Register arg1 auf 0
getbit [Register] [Register|Value] [Register|Value] | arg1 = 1 wenn das arg3-te Bit von arg2 auf 1 gesetzt ist, ansonsten 0
lock | Sperrt die Auswahl neuer Codes während ein Tack abspielt
unlock | Erlaubt die Auswahl neuer Codes während ein Tack abspielt. Der aktuelle Track wird dann abgebrochen.

Alle "Value"-Parameter sind in den offiziellen Büchern als Dezimalzahlen angegeben. Bei Tingeltangel ist es alternativ möglich diese Werte als Hexadezimalzahlen anzugeben. Hierzu muss dem Wert ein 0x vorangestellt werden.
Register

V0 - V91 | Speicherregister (read + write)
V92 | lock ?
V93 | Sprachcode (siehe unten) (read)
V94 | Volume (2-20) (write)
V95 | Lezter mit dem Stift angewählter Code (read)
V96 | ?
V97 | ? (Interrupt)
V98 | zufälliger Wert (0 bis 0x7FFF) (read)
V99 | ?
V100 - ? | ?

Sprachcodes

20 | englisch ?
33 | französisch
34 | ?
35 | ?
44 | englisch
49 | deutsch
55 | ?
86 | chinesisch
90 | ?
99 | ?