IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Geschlechtsumwandlung gescheitert
AntwortenNeues ThemaNeue Umfrage

Geschlechtsumwandlung gescheitert

Geschrieben um 21:57 am 04.07.2005 | Zitat | Editieren | Löschen
Eike
Mitglied
Baby Gumby
Beiträge: 8

Hallo mal wieder!

Mit dieser Library...

Release 1 / Serial number 050703 / Inform v6.30 Library 6/11 SX

Standard interpreter 1.0 (1F) / Library serial number 040227

Offizielle deutsche Inform-Library, Release 22, Serial 050212

...diesem Compiler...

Inform 6.30 for Linux (27th Feb 2004)

...und diesem Sourcecode...


Constant DEATH_MENTION_UNDO 0;! verlangt die Lib anscheinend?

Constant AMUSING__WD 0;      ! verlangt die Lib anscheinend?

Include "Parser";

Include "VerbLib";

[ Initialise;

   location = Cockpit;

];

Object Cockpit "Pilotenkanzel"

   with description "Cockpit",

   has light neuter;

Object -> "Tür"

   with name 'tuer' 'tor' neuter 'grausam' 'schrecken',

   changing_gender,

   dekl 9,

   has female static openable;

Include "germang.h";

...bekomm ich folgende Ausgabe:

Zitat:

Release 1 / Serial number 050703 / Inform v6.30 Library 6/11 SX

Pilotenkanzel

Cockpit

Du siehst hier eine Tür.

zieh tuer

Sie bewegt sich keinen Millimeter.

zieh tor

Sie bewegt sich keinen Millimeter.

Mach ich was falsch?

Ciao,

Eike

Geschrieben um 08:19 am 05.07.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Die Lib:

Inform v6.30 Library 6/11

6/11? Sieh an, sieh an.

Constant DEATH_MENTION_UNDO 0;! verlangt die Lib anscheinend?

Diese Konstante bestimmt, ob die Möglichkeit, den letzten Zug ungeschehen zu machen im Abspann erwähnt wird. Ist sie mit dem Wert Null definiert, so lautet ie Frage nach dem Erreichen des Spielendes:

339900

Ob dieser Zusatz ausgegeben wird oder nicht - das Rückgängigmachen funktioniert auf jeden Fall. Du musst diese Konstante auch nicht unbedingt definieren - wenn du es nicht tust definiert die Lib sie mit einem Wert von 1.

In der deutschen Lib 22 muss man diese Konstante auf einen Wert setzten. In der Original-Lib muss man diese Konstante (mit irgendeinem Wert) definieren, damit Undo erwähnt wird. Wieso ist das geändert worden? Und wieso bedeutet DEATH_MENTION_UNDO == 0 (also gleich falsch), dass Undo erwähnt wird?

Constant AMUSING__WD 0;      ! verlangt die Lib anscheinend?

Das verlangt die Lib meines Erachtens nicht. Statt dem nicht in der Lib definierten AMUSINGWD werden nun AMUSING1WD und AMUSING2__WD verwendet, die beide in german.h definiert werden.

Eike:

Mach ich was falsch?

Edit: Hier stand eben noch was anderes. Ich habe gerade erst aus dem Titel ersehen, was du eigentlich wolltest und keine schlaue Antwort aus der Hüfte darauf :-(

Nochmal Edit: Bei mir funktioniert dein Code, wie er soll:```

Release 1 / Serial number 050705 / Inform v6.30 Library 6/10 (deutsch) SX

Pilotenkanzel

Cockpit

Du siehst hier eine Tür.

u tuer

Du entdeckst an der Tür nichts Spezielles.

zieh tuer

Sie bewegt sich keinen Millimeter.

zieh tor

Es bewegt sich keinen Millimeter.

version

Release 1 / Serial number 050705 / Inform v6.30 Library 6/10 (deutsch) SX

Standard interpreter 1.0 (4F) / Library serial number 991120(bp)

Offizielle deutsche Inform-Library, Release 22, Serial 050212



Allerdings ist meine Lib wohl eine andere. Die Release-Daten sind dieselben, aber ich habe die Biplattform-Lib verwendet. (Die eine Seriennummer von 1999 hat.) Es ist die letzte offizielle, Release 22 , die ich in Februar von [http://www.textfire.de/archiv](http://www.textfire.de/archiv) heruntergeladen habe.
Geschrieben um 10:07 am 05.07.2005 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

Zitat:

Release 1 / Serial number 050703 / Inform v6.30 Library 6/11 SX

Standard interpreter 1.0 (1F) / Library serial number 040227

Offizielle deutsche Inform-Library, Release 22, Serial 050212

Entschuldige, aber das ist NICHT die offizielle deutsche Library. Die ist nämlich immer noch auf dem Stand von 6/10, nicht 6/11. Ich tippe mal ganz stark, dass du deine deutsche Library mit der aktuellen englischen Library überschrieben hast, dann kommt nämlich genau das dabei raus.

Leider, leider enthält die deutsche Library auch erhebliche Änderungen an der parserm.h und anderen internationalen Teilen der Library, sonst wäre dieses ganze changing_gender-Zeug nämlich kaum umzusetzen gewesen.

Wenn du die originale parserm.h der deutschen Library also mit der parserm.h der Library 6/11 ersetzt, dann funktioniert changing_gender logischerweise nicht mehr, weil du den meisten Code dafür praktisch gelöscht hast.

Ich kann von sowas nur abraten, changing_gender wird nicht das Einzige sein, was dann nicht mehr funktioniert...

Geschrieben um 10:37 am 05.07.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

ChrisW:

Ich tippe mal ganz stark, dass du deine deutsche Library mit der aktuellen englischen Library überschrieben hast, dann kommt nämlich genau das dabei raus.

Aha, daher also die verlockende Aussicht auf 6/11 (de).

Dieses Problem ist ja bereits öfters aufgetreten. Natürlich sollte man die englischen und die deutschen Libs (und deren Versionen) getrennt lagern, aber es ist vielen wohl nicht bewusst, dass sich von Deutsch zu Englisch mehr ändert als die Definitionen in German.h/English.h und GermanG.h/Grammar.h. Letzten Endes war es wohl eine Illusion von Graham Nelson, zu denken, dass man allen sprachspezifischen Code in zwei der zehn Dateien packen kann und dann jeder Sprache den erweiterten englischen Parser überstülpen kann. Und da jede Lib wohl Änderungen in den anderen, vermeintlich gemeinsamen Dateien macht, ist die Entscheidung, die Lib-Dateien wie im Original zu nennen, unglücklich.

Um dieses Problem zu vermeiden sehe ich im Moment zwei Möglichkeiten:

Umbenennen der Dateien der deutschen Lib. Jede der Dateien würde einen eigenen Namen bekommen, der sie von der englischen Lib unterscheidet, etwa


parser.h        -> de_pars.h

  linkpla.h     ->   de_link.h

  parserm.h     ->   de_parsm.h

    english.h   ->    de_text.h

verblib.h       -> de_verb.h

  verblibm.h    ->  de_verbm.h

grammar.h       -> de_gram.h

  infix.h       ->   de_infix.h

oder so. Aus jedem Dateinamen wäre nun ersichtlich, dass die Datei zur deutschen Lib gehört, es gibt keine Überschneidungen mit den englischen Libs 6/10 oder 6/11 und schlampige Autoren können so alle dateien gefahrlos in einem Verzeichnis ablegen. Quelltexte müssen nur die drei Include-Statements ändern. Eine ähnliche Nomenklatur könnte für übersetzte Library Contributions verwendet werden. Weiterer Vorteil: Man müsste beim Aufruf von Inform +language_name=German nicht setzen.

Prüfung, welche Lib eingebunden wurde. Dazu wird in jeder eingelesenen Datei eine Konstante definiert, die es nur in der deutschen Lib gibt und die idealerweise auch noch die Release angibt, etwa ganz oben in parser.h:


Constant DE_LIB_610_22_PARSER;

Ähnlichen Code gibt es in jeder der eingebundenen Dateien. Die letzte Datei, die eingebunden wird, ist GermanG.h, also eine sprachspezifische Datei. Dort würde man die Konstanten prüfen, etwa so:


Ifndef DE_LIB_610_22_PARSER;

Message Error "Es wurde nicht die korrekte datei parser.h

    eingebunden. Bitte überprüfen, dass die Datei parser.h zur

    deutschen Lib 6/10, Release 22 gehört.";

EndIf;

So bliebe alles beim alten, aber fehlerhafte Programme mit falsch eingebundenen Libs würden gar nicht erst erzeugt.

Geschrieben um 11:49 am 05.07.2005 | Zitat | Editieren | Löschen
Eike
Mitglied
Baby Gumby
Beiträge: 8

Hallo!

Martin:

Die Lib:

Inform v6.30 Library 6/11

6/11? Sieh an, sieh an.

Ich weiss nicht, wie ich es geschafft hatte, das nochmal zu verbocken (ein ähnliches Problem hatte ich ja schon mal). Ich hab also nochmal die Library runtergeladen, mal wieder in ein leeres Verzeichnis entpackt, und siehe da: Es klappt!

[DEATH_MENTION_UNDO]

Martin:

In der deutschen Lib 22 muss man diese Konstante auf einen Wert setzten.

Genau. Das meinte ich. Ich muss diese Konstante (mit irgendeinem Wert) definieren, sonst schlägt das Kompilieren fehl.

Constant AMUSING__WD 0;      ! verlangt die Lib anscheinend?

...das war wohl ein Problem meines Englisch-Deutsch-Gemisches, da musste ich die auch definieren, um kompilieren zu können.

[raus-editiert]

Ciao,

Eike

Geschrieben um 12:02 am 05.07.2005 | Zitat | Editieren | Löschen
Eike
Mitglied
Baby Gumby
Beiträge: 8

Hallo!

ChrisW:

Entschuldige, aber das ist NICHT die offizielle deutsche Library. Die ist nämlich immer noch auf dem Stand von 6/10, nicht 6/11. Ich tippe mal ganz stark, dass du deine deutsche Library mit der aktuellen englischen Library überschrieben hast, dann kommt nämlich genau das dabei raus.

Darauf kann ich mit einem klaren Jein antworten...

Das Problem ist wohl ein Linux-/Unix-spezifisches:

Ich habe mir ein Verzeichnis angelegt, und nur die Dateien der deutschen Library reingelegt. Das Problem war, dass die Dateinamen (zumindest in der tgz-Verpackung) durchgehend klein geschrieben sind. Ich habe in meinen Versuchen aber immer

"Parser" und "VerbLib" eingebunden. Da Linux (im Gegensatz zu Windows) zwischen Gross- und Kleinbuchstaben in Dateinamen unterscheidet, wurden nicht die deutschen Dateien eingebunden, sondern die (mit dem Compiler in einem Standard-Verzeichnis mitinstallierten) englischen.

Die Dateien der deutschen Lib sollten (wenn man sie nicht wie oben vorgeschlagen vollständig anders benennt) exakt dieselben Namen haben wie die der Original-Library.

Ciao,

Eike

Geschrieben um 13:23 am 05.07.2005 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

Eike:

Die Dateien der deutschen Lib sollten (wenn man sie nicht wie oben vorgeschlagen vollständig anders benennt) exakt dieselben Namen haben wie die der Original-Library.

Oh. Also daran lags. Das stimmt natürlich, auch wenn ich mich frage, warum in der englischen Lib ausgerechnet diese beiden Dateinamen groß geschrieben sind und alle anderen konsequent klein...

Tschuldige, dass ich dir da solche Library-Rumpfriemelei unterstellt habe. Das Szenario kam mir nur so bekannt vor, weil ich das tatsächlich mal ausprobiert habe, einfach mal um zu schauen, wieviel dann noch funktioniert. :)

Martins zweite Idee, mit den Konstanten, gefällt mir ausgesprochen gut. Und dürfte ja auch nicht schwer sein, sowas einzubauen.

Geschrieben um 09:30 am 06.07.2005 | Zitat | Editieren | Löschen
mkalus
Mitglied
Master Gumby
Beiträge: 93

Martin:

Aha, daher also die verlockende Aussicht auf 6/11 (de).

Ja, das wäre schon was - die einzelnen Änderungen sind jedoch sehr aufwändig und erfordern wahrscheinlich, dass man den gesamten Code per Hand durchgeht und vergleicht. Viel Arbeit. Ich habe mir das vor einiger Zeit angesehen und bin doch erschrocken, wie viel sich in den letzten Jahren in der deutschen Lib geändert (=weiterentwickelt) hat.

Aber: Das Ziel ist noch gesteckt - die Lib 6/11 (de) wird eines Tages kommen!

Ciao,

Max.

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz