Autor |
Nachricht |
< Problem bei Antwort auf "Was meinst du, den....." |
|
Verfasst am:
So, 16 Jan 2005 - 14:01
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
Martin hat folgendes geschrieben: | Edit: Es sollten in LanguageVerb und PrintVerb auch alle Verben mit Umlauten und Eszett (öffne, schließe) umschrieben werden sowie Verben, die länger sind als neun Buchstaben und daher abgeschnitten werden (zerschneide, konsultiere, zerquetsche). |
Stimmt natürlich. Aber das Ergebnis sieht dann etwa so wie unten aus. Vielleicht sollte ich mir noch was ausdenken, um Umlaute automatisiert zu ersetzen. :)
Code: | [ LanguageVerb i;
switch(i) {
'l//': print "schaue"; rtrue;
'z//': print "warte"; rtrue;
'j//': print "ja"; rtrue;
'x//','u//','b//': print "betrachte"; rtrue;
'v//': print "verlasse"; rtrue;
'i//','inv','inventory': print "Inventar"; rtrue;
'schuett': print "schütte"; rtrue;
'giess': print "gieße"; rtrue;
'uebertrag': print "übertrage"; rtrue;
'uebergib': print "übergib"; rtrue;
'ueberreich': print "überreiche"; rtrue;
'fuetter': print "füttere"; rtrue;
'praesentier': print "präsentiere"; rtrue;
'fuehr': print "führe"; rtrue;
'fluecht': print "flüchte"; rtrue;
'konsultier': print "konsultiere"; rtrue;
'oeffn': print "öffne"; rtrue;
'durchquer': print "durchquere"; rtrue;
'begutacht': print "begutachte"; rtrue;
'durchsuch', 'durchwühl', 'durchstoeber':
print "durchsuche"; rtrue;
'spuere', 'stoeber', 'wuehl': print "suche"; rtrue;
'schmueck': print "schmücke"; rtrue;
'drueck': print "drücke"; rtrue;
'schliess': print "schließe"; rtrue;
'verschliess': print "verschließe"; rtrue;
'verriegel': print "verriegle"; rtrue;
'zerstoer': print "zerstöre"; rtrue;
'zertruemmer': print "zertrümmere"; rtrue;
'kaempf', 'bekaempf': print "bekämpfe"; rtrue;
'toet': print "töte"; rtrue;
'quael': print "quäle"; rtrue;
'pruegel': print "prügele"; rtrue;
'schwaetz': print "schwätze"; rtrue;
'erzaehl': print "erzähle"; rtrue;
'erklaer': print "erkläre"; rtrue;
'unterricht': print "unterrichte"; rtrue;
'does': print "döse"; rtrue;
'traeller': print "trällere"; rtrue;
'zerdrueck': print "zerdrücke"; rtrue;
'zerquetsch': print "zerquetsche"; rtrue;
'kuess': print "küsse"; rtrue;
'schnueffl', 'schnueffel': print "schnüffle"; rtrue;
'hoer': print "höre"; rtrue;
'beruehr': print "berühre": rtrue;
'fuehl': print "fühle"; rtrue;
'befuehl': print "befühle"; rtrue;
'saeuber': print "säubere"; rtrue;
'glaett': print "glätte"; rtrue;
'buerst': print "bürste"; rtrue;
'zuend','entzuend': print "entzünde"; rtrue;
'schluerf': print "schlürf"; rtrue;
'fuell': print "fülle"; rtrue;
'durchschneid': print "durchschneide"; rtrue;
'zerschneid': print "zerschneide"; rtrue;
'huepf': print "hüpfe"; rtrue;
'betritt','tritt','nimm','gib','wirf','brich','zerbrich',
'iss','friss', 'sprich', 'sieh', 'lies',
'erklimm', 'erwirb' : print (address)i; rtrue;
default: if(PrintVerb(i) == 0)
print (address)i, "e";
rtrue;
};
]; |
_________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
Mo, 17 Jan 2005 - 18:13
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
ChrisW hat folgendes geschrieben: | Stimmt natürlich. Aber das Ergebnis sieht dann etwa so wie unten aus. |
Wow, das ist lang! Aber mit Glulx hast du ja keine Größenbeschränkung und ein wenig Ausgabekosmetik steht der Lib gut zu Gesicht. Die meisten Einträge sind aber tatsächlich nur Umlaut-Umwandlungen.
Chris hat folgendes geschrieben: | Vielleicht sollte ich mir noch was ausdenken, um Umlaute automatisiert zu ersetzen. |
Das ist gewiss keine schlechte Idee, obwohl (address) in der Lib eigentlich nur für Pronomen (die keine Umlaute haben) und zum Debuggen ausgegeben werden. Und natürlich in PrintCommand, wo es neben den Verben auch für einige Präpositionen ('über', 'für') nützlich sein könnte.
T.A.G. legt seine Vokabeln übrigens in der Form mit Umlaut ab, und in der Eingabe werden 'ae', 'oe', 'ue' dann ersetzt. Das habe ich mir nicht sehr gut überlegt und würde es jetzt auch andersherum machen, denn bei Wörtern wie "Feuer" oder "Quelle" gibt es beim Ersetzen ziemlichen Murks, die Regel lautet (in T.A.G.): 'ue' nicht ersetzen, wenn ein 'q', 'ä' oder 'e' vorangeht. Das klappt einigermaßen. Das Problem, dass man das scharfe s nicht automatisch erstzen kann, bleibt natürlich - und T.A.G. löst es zugunsten des Doppel-s.
Vielleicht ein wenig Overkill, aber hier eine Routine, die zu funktionieren scheint:
Code: |
Array UmlautAux -> 12;
[ UmlautAddress i letter next last skip uml;
! Das spart uns Tipparbeit und Warnungen
uml = UmlautAux;
! Vokabel auf Hilfsfeld schreiben
@output_stream 3 UmlautAux;
print (address) i;
@output_stream -3;
! Vokabel mit ersetzten Umlauten ausgeben
for (i=0 : i < uml-->0 : i++) {
letter = uml->(i+2);
if (i + 1 >= uml-->0) next = 0;
else next = uml->(i+3);
if (letter == 'a' && next == 'e') {
print "@:a"; skip = true;
} else if (letter == 'o' && next == 'e') {
print "@:o"; skip = true;
} else if (letter == 'u'
&& next == 'e' && last ~= 'q' or 'e') {
print "@:u"; skip = true;
} else if (skip) skip = false;
else print (char) letter;
last = letter;
}
]; |
_________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mo, 17 Jan 2005 - 23:03
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
Schick! Ich werd das in den nächsten Tagen mal gründlich testen. Momentan bisschen viel Arbeit hier. :)
Martin hat folgendes geschrieben: | Code: |
@output_stream 3 UmlautAux;
print (address) i;
@output_stream -3; |
|
Eine Frage: Was passiert hier, wenn der Inhalt von i länger als die Länge von UmlautAux ist? Hab im DM4 leider keine Antwort darauf gefunden.
In Glulx erledigt sich die Frage glücklicherweise. Da ersetze ich die drei Zeilen einfach durch PrintAnyToArray. _________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
Di, 18 Jan 2005 - 8:58
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
ChrisW hat folgendes geschrieben: | Eine Frage: Was passiert hier, wenn der Inhalt von i länger als die Länge von UmlautAux ist? Hab im DM4 leider keine Antwort darauf gefunden. |
Dann würde die Ausgabe die nach UmlautAux liegenden Daten korrumpieren. Beim Umleiten muss man daher darauf achten, dass das Feld groß genug ist, beziehungsweise dass der ausgegebene Text kurz ist. Hilfsfelder werden daher immer recht großzügig dimensioniert.
(Im Strict Mode wird das übrigens nicht überprüft, auch nicht, wenn man print_to_array auf einen String anwendet.)
Vokabeln sind im z-Code aber maximal neun Zeichen lang, plus zwei Bytes für die Länge, plus ein Byte Sicherheit macht zwölf. In diesem Beispiel sollte also nichts passieren. Wie das genau unter Glulx ist, weiß ich aber nicht.
ChrisW hat folgendes geschrieben: | In Glulx erledigt sich die Frage glücklicherweise. |
Ja, in Glulx ist dieses Problem gut gelöst, man kann das Schreiben auf ein Feld auch gut zum Ermitteln der Länge eines Strings verwenden.
Und der Code oben ist z-Code mit den typischen Opcodes. Das müsste man noch einglulxen oder biplattformisieren.
Für z-Code könnte man folgende (oder ähnliche) Print-Regeln schreiben:
Code: |
[ print_array_check str arr len;
arr->(len+2) = 0;
@output_stream 3 arr;
print (string) str;
@ output_stream -3;
if (arr->(len+2))
print "^[** Error: Buffer overflow. Exceeded maximum length ",
len, " while printing the string ~", (string) str, "~ of length ",
arr-->0, " to the buffer at ", arr, ". **]^";
];
|
Das würde das Problem zwar nicht umgehen - wenn der Fehler ausgegeben wird, ist das nachfolgende Feld bereits korrupt - aber zumindest aufzeigen. Und das Feld müsste drei, nicht bloß zwei Zeichen länger sein als die maximale Textlänge. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mi, 19 Jan 2005 - 17:01
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
(Leider immer noch nicht dazu gekommen, das zu testen und eine Glulx-Version zu schreiben, das wird erst am Wochenende.)
Martin hat folgendes geschrieben: | Vokabeln sind im z-Code aber maximal neun Zeichen lang, plus zwei Bytes für die Länge, plus ein Byte Sicherheit macht zwölf. In diesem Beispiel sollte also nichts passieren. Wie das genau unter Glulx ist, weiß ich aber nicht. |
Stimmt, daran habe ich nicht gedacht. Wenngleich diese Beschränkung in der Library-Version nach 6/11 fallen soll, laut den http://www.inform-fiction.org/suggestions/accept.html. In der Liste finden sich übrigens noch diverse andere schicke Sachen. So z.B., dass der Inform-Compiler künftig auch "blorbifizieren" können soll, also kompilierte Glulx-Dateien mit Bildern, Sound usw. automatisch zu einer Blorb-Datei zusammenfassen. Die Unterstützung für double-v8, also Z-Code-Dateien mit 1024KByte, ist nett, wenngleich im deutschsprachigen Raum auch noch niemand am aktuellen 512er-Limit gescheitert ist. In der Library endlich ein intelligentes UNLOCK, welches, wenn der Spieler den benötigten Schlüssel mit sich führt, automatisch diesen zum Aufschließen auswählt. usw. usf. *träum*
In Glulx gilt die 9-Zeichen-Beschränkung im Dictionary standardmäßig ebenfalls, kann allerdings per Compiler-Switch DICT_WORD_SIZE angehoben werden. _________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
Sa, 22 Jan 2005 - 15:20
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
So, hab das jetzt mal in einer Glulx+ZCode-Fassung umgesetzt, die zumindest bei mir bisher den Tests standgehalten hat. Wäre aber sehr dankbar, wenn sich das nochmal jemand anders anschauen oder es ausprobieren könnte. (Kris, du könntest es vielleicht mal testweise in deinem Projekt versuchen. Sicherheitskopie der german.h anlegen, die paar Änderungen hier durchführen und schauen, ob alles wie gewohnt läuft.)
Den Längencheck für UmlautAux im ZCode habe ich rausgelassen, weil die Gefahr eines Überlaufes aktuell ja nicht besteht. Ab 6/11 gibts im Rahmen der Glulx/ZCode-Angleichung dann endlich ne Library-Routine dafür.
In der german.h ab Zeile 824 eingefügt:
Code: | array UmlautAux -> 12;
[UmlautAddress i letter next last skip start length;
! Vokabel auf Hilfsfeld schreiben
#ifdef TARGET_GLULX;
length = PrintAnyToArray(UmlautAux,9,i);
start = 0;
#ifnot;
@output_stream 3 UmlautAux;
print (address) i;
@output_stream -3;
length = UmlautAux-->0;
start = 2;
#endif;
! Vokabel mit ersetzten Umlauten ausgeben
for (i=0 : i < length : i++) {
letter = UmlautAux->(i+start);
if(i+1 >= length)
next = 0;
else next = UmlautAux ->(i+start+1);
if(letter == 'a' && next == 'e') {
print "ä"; skip = true; }
else if(letter == 'o' && next == 'e') {
print "ö"; skip = true; }
else if(letter == 'u' && next == 'e' &&
last ~= 'q' or 'e') {
print "ü"; skip = true; }
else if(skip)
skip = false;
else
print (char)letter;
last = letter;
};
]; |
LanguageVerb ab Zeile 957 ersetzt durch diese Variante:
Code: | [ LanguageVerb i;
switch(i) {
'l//': print "schaue"; rtrue;
'z//': print "warte"; rtrue;
'j//': print "ja"; rtrue;
'x//','u//','b//': print "betrachte"; rtrue;
'v//': print "verlasse"; rtrue;
'i//','inv','inventory': print "Inventar"; rtrue;
'giess': print "gieße"; rtrue;
'uebertrag': print "übertrage"; rtrue;
'ueberreich': print "überreiche"; rtrue;
'praesentier': print "präsentiere"; rtrue;
'konsultier': print "konsultiere"; rtrue;
'durchquer': print "durchquere"; rtrue;
'begutacht': print "begutachte"; rtrue;
'durchsuch', 'durchwuehl', 'durchstoeber':
print "durchsuche"; rtrue;
'schliess': print "schließe"; rtrue;
'verschliess': print "verschließe"; rtrue;
'verriegel': print "verriegle"; rtrue;
'zertruemmer': print "zertrümmere"; rtrue;
'unterricht': print "unterrichte"; rtrue;
'zerdrueck': print "zerdrücke"; rtrue;
'zerquetsch': print "zerquetsche"; rtrue;
'durchschneid': print "durchschneide"; rtrue;
'zerschneid': print "zerschneide"; rtrue;
'betritt','tritt','nimm','gib','wirf','brich','zerbrich',
'iss','friss', 'sprich', 'sieh', 'lies',
'erklimm', 'erwirb' : print (UmlautAddress)i; rtrue;
default: if(PrintVerb(i) == 0)
print (UmlautAddress)i, "e";
rtrue;
};
]; |
Die unterschiedlichen Startpunkte für Glulx und ZCode sind nötig, weil PrintAnyToArray nicht die Arraylänge nach Array-->0 kopiert. _________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
Sa, 22 Jan 2005 - 17:46
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
ChrisW hat folgendes geschrieben: | So, hab das jetzt mal in einer Glulx+ZCode-Fassung umgesetzt, ... |
Sehr schön!
Du könntest die LanguageVerb noch etwas abkürzen, wenn du 'übertrag', 'durchquer', 'begutacht', 'durchsuch', 'zerdrück' und wenn dich die etwas holprige Endung nicht stört auch 'verriegel' rausschmeißt.
ChrisW hat folgendes geschrieben: | Die Unterstützung für double-v8, also Z-Code-Dateien mit 1024KByte, ist nett, wenngleich im deutschsprachigen Raum auch noch niemand am aktuellen 512er-Limit gescheitert ist. |
Double v8 wäre nicht schlecht, obwohl bei richtig großen Spielen dann wahrscheinlich eher die 64k-Begrenzung für den lesbaren Speicher ein Problem wäre.
Clever wäre ein "Variable v8", so dass der packing factor im Header festgelegt würde und nicht durch die Versionsnummer. (z5 und z8 unterscheiden sich ja allein durch diesen Faktor.) Die Länge der Vokabeln könnte man auch dort festlegen.
ChrisW hat folgendes geschrieben: | In der Library endlich ein intelligentes UNLOCK, welches, wenn der Spieler den benötigten Schlüssel mit sich führt, automatisch diesen zum Aufschließen auswählt. usw. usf. *träum* |
So etwas wäre wohl besser in einer Library Extension aufgehoben, denke ich, denn nicht jedes Adventure hat viele Schlüssel. Grundsätzlich sind solche Erleichterungen für den Spieler aber eine tolle Sache. (Und leider für meinen Alltags-Schlüsselbund noch nicht implementiert.)
ChrisW hat folgendes geschrieben: | In Glulx gilt die 9-Zeichen-Beschränkung im Dictionary standardmäßig ebenfalls, kann allerdings per Compiler-Switch DICT_WORD_SIZE angehoben werden. |
Die Z-Maschine erlaubt es, die Größe der Dictionary-Einträge zu modifizieren. Allerdings sind die Vokabeln selbst immer neun Zeichen lang, die in sechs Bytes abgelegt werden. Die darauf folgenden Bytes enthalten lediglich Flaggen. In Inform werden meines Wissens Sieben-Byte-Einträge benutzt, im letzten Byte ist die Information enthalten, ob ein Wort ein Verb ist, oder ob es mit '...//p' als Plural definiert wurde. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Sa, 22 Jan 2005 - 17:52
|
|
|
Kompassleser
Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
Ich habe das erstmal auf neutralem Boden getestet (erstmal nur Glulx), und es funktioniert.
Allerdings habe ich den Code (also beide Teile) in einer separaten LangVerb.h gespeichert.
Dann folgendes:
Code: | Replace LanguageVerb;
Include "Parser.h";
Include "LangVerb.h"; |
Damit bleibt die german.h erstmal unverändert, außerdem kann man der Extension jederzeit noch Verben hinzufügen wenn einem etwas einfällt ohne in die german.h eingreifen zu müssen.
Ich werde die LangVerb.h ab sofort in mein Spiel einbauen, sollte mir (oder den Testern) etwas auffallen, melde ich mich.
Sollte sie so laufen, würde ich sie mal ins Archiv hochladen, es sieht doch wirklich netter aus bei der Ausgabe :-)
Danke für die Mühe und Gruß
Kris
NACHTRAG:
ChrisW:
Mit "würde ich sie mal ins Archiv hochladen" meine ich natürlich dich, falls das falsch verstanden wurde :-) |
|
|
|
|
|
Verfasst am:
Sa, 22 Jan 2005 - 19:49
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
Martin hat folgendes geschrieben: | Du könntest die LanguageVerb noch etwas abkürzen... |
Argh, stimmt. Diese Verben haben ja nur neun Zeichen. :)
Martin hat folgendes geschrieben: | So etwas (intelligentes UNLOCK) wäre wohl besser in einer Library Extension aufgehoben, denke ich.... |
Schon richtig. Viele Änderungen in der 6/11 und der geplanten darauffolgenden Version sind Dinge, die schon vorher in Extensions existierten. So bspw. die Möglichkeit mit LOOK TO THE NORTH usw. in verschiedene Himmelsrichtungen zu schauen. Ob das in die Standardlibrary muss, darüber kann man streiten.
Zitat: | Die Z-Maschine erlaubt es, die Größe der Dictionary-Einträge zu modifizieren. Allerdings sind die Vokabeln selbst immer neun Zeichen lang, die in sechs Bytes abgelegt werden. |
Eben das wird in Glulx nur vom Compiler festgelegt, laut Glulx Technical Reference, die Vokabeln können dort also auch länger sein:
Glulx TR hat folgendes geschrieben: | * The Dictionary
This structure is generated by the compiler, and used by the library.
long: number of words
...each word: {
byte: 60 (type identifier for dict words)
bytes[9]: nine bytes of lower-case text, zero-padded
short: flags
short: verb number
short: unused (zero)
}
...
The nine-character word length is actually variable, controlled by the
$DICT_WORD_SIZE memory setting.
... |
Kris hat folgendes geschrieben: | Allerdings habe ich den Code (also beide Teile) in einer separaten LangVerb.h gespeichert. ... Damit bleibt die german.h erstmal unverändert, außerdem kann man der Extension jederzeit noch Verben hinzufügen wenn einem etwas einfällt ohne in die german.h eingreifen zu müssen. |
Schöne Variante. Und toll, dass du es gleich ausprobiert hast. Allerdings finde ich schon, dass die neue Variante, so wir sie denn ausführlich getestet haben, in die offizielle german.h sollte.
Trotzdem kannst du sie noch im Quellcode deines Spiels erweitern: Dazu wird am Ende die Routine PrintVerb aufgerufen, so sie denn vorhanden ist. Wenn du in deinem eigenen Quellcode diese Routine anlegst, kannst du dort nach Lust und Laune noch Ersetzungen hinzufügen, ohne irgend etwas an der german.h ändern zu müssen. _________________ "Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.) |
|
|
|
|
|
Verfasst am:
So, 23 Jan 2005 - 8:26
|
|
|
Kompassleser
Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
ChrisW hat folgendes geschrieben: | Allerdings finde ich schon, dass die neue Variante, so wir sie denn ausführlich getestet haben, in die offizielle german.h sollte. |
Klar, keine Frage.
Nur so lange es keine neue offizielle german.h gibt, arbeite ich lieber mit Extensions. Ich habe schon eine Liste von Änderungen (wie z.B. der Akk-Nom Fehler in der WritListFrom) die ich direkt in der lib vorgenommen habe.
Damit ich nicht den Überblick verliere, wenn es eine neue lib gibt, halte ich die Liste lieber so klein wie möglich :-)
Gruß
Kris |
|
|
|
|
|
Verfasst am:
Fr, 25 März 2005 - 13:14
|
|
|
Kompassleser
Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
Hallo,
ich habe mich jetzt nochmal mit der Thematik beschäftigt (also parse_name - nicht die Sache mit LanguageVerb):
Martin hat folgendes geschrieben: | Wenn dir parse_name gefällt, interessiert dich vielleicht dieser Link zu Zarfs Parse-Name-Variationen..
|
Vielen Dank, das ist genau das, was man dafür brauchen kann, und zwar das dritte Beispiel (hier angepasst und der Einfachheithalber auf Synonyme verzichtet):
Code: | name 'gestein' 'vom' 'mars',
parse_name [ wd num gotit;
wd = NextWord();
while (WordInProperty(wd, self, name)) {
if (wd == 'gestein')
gotit = true;
num++;
wd = NextWord();
}
if (~~gotit)
return 0;
return num;
],
name 'gestein' 'vom' 'mond',
parse_name [ wd num gotit;
wd = NextWord();
while (WordInProperty(wd, self, name)) {
if (wd == 'gestein')
gotit = true;
num++;
wd = NextWord();
}
if (~~gotit)
return 0;
return num;
],
|
Es wird auf jedenfall das Wort 'gestein' benötigt, um zu reagieren:
>untersuche gestein
Was meinst du, das Gestein vom Mars oder das Gestein vom Mond?
... und nun wird alles akzeptiert:
>vom mond
>mond
>gestein vom mond
Und gibt man folgendes ein:
>untersuche mond
könnte die Beschreibung des Obtektes Mond erscheinen, da 'gestein' nicht vorkam - wirklich klasse!
Es sind halt doch oft die kleinen Codefragmente, die ungklaubliche Wirkung haben.
Vielen Dank nochmal für den Hinweis.
Gruß
Christof |
|
|
|
|
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|