IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Problem mit Verwendung von Menus.h
AntwortenNeues ThemaNeue Umfrage

Problem mit Verwendung von Menus.h

Geschrieben um 18:58 am 16.09.2002 | Zitat | Editieren | Löschen
Christoph
Mitglied
Student Gumby
Beiträge: 37

Hallo!

Ich habe da seit einiger Zeit Probleme mit dem erstellen von (Hilfe-) Menus für Inform-Spiele. Ich habe das schon einmal über die Liste geschildert, aber damals gab es irgendwie keine Reaktion.

Ich habe mir die Menus.h von ifarchive.org runtergeladen und sowohl die beigefügten Informationen als auch die entsprechende Stelle im Inform Designer's Manual angesehen.

Das Problem: Das Spiel an sich lässt sich ohne Probleme kompilieren, bis auf den Hinweis, dass die Routine 'SwitchOption' nicht benutzt wird. Im Spiel treten beim aktivieren des Menus seltsame Fragemente einer Fehlermeldung auf. Das Ganze sieht dann so aus:

Bild 1

Bild 2

Ich habe mal ein kleines Beispiel geschrieben, das mein Problem verdeutlicht - die Datei gibt's hier

Wäre nett, wenn jemand mal einen Blick darauf werfen könnte. Das verrückte ist, dass ich irgendwann schon einmal funktionierende Menus hatte. Das trägt nicht eben zu meiner Selbstsicherheit bei. :(

Irgendeine Idee, was ich falsch mache?

Geschrieben um 20:12 am 16.09.2002 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Die Fehlermeldungen tauchen natürlich nur in Fragmenten auf, weil sie durch andere Formatierungen wieder überschrieben werden. Ich bin mir nicht hundertprozentig sicher, aber ich tippe auf


[** Programming Error: Tried to write to ->0 in the array

ForUseByOptions which has entries 1 up to 128 **]

da die Grenzen für dieses Feld gut passen. In der aktuellen Menus.h findet sich die Zeile


Array ForUseByOptions string 128;

Dieses Feld hat 129 Byte-Einträge, von denen man nur in ->1 bis ->128 schreiben kann. Die Länge des Strings ist nach Inform-Logik fix, also immer 128, und kann nicht überschrieben werden.

Menus.h wird in Kapitel 44 des Inform Desoigner's Manual, 4th Edition hergeleitet. Dort heißt diese Zeile


Array ForUseByOptions -> 129;

Das scheint mir richtiger, da nun der Eintrag ->0 (oder -->0, wie es eigentlich im Code heißt) überschrieben werden kann. Versuche das doch einmal, und sage Bescheid, wenn es der richtige Tipp war. (Ich bin mir, wie gesagt, nicht sicher, ob es wirklich nur daran liegt.)

SwitchOption ist eine Klasse für Einstellungen, die Dein Spiel nicht benutzt. Da Menus.h kein System_file ist, kommt die Warnung, dass sie nicht benutzt wird, was ja korrekt, wenn auch etwas übereifrig ist.

Um die Fehlermeldungen zu umgehen könntest Du natürlich immer die Direktive


Switches -~S;

benutzen, die den Strikten Modus, der für das Gemeckere verantwortlich ist, ausschaltet. (Das wird Graham allerdings nicht gerne sehen, bei all der Arbeit die er in diesen Modus gesteckt hat)

Geschrieben um 21:09 am 16.09.2002 | Zitat | Editieren | Löschen
kairo
Mitglied
Dr Gumby
Beiträge: 284

Hallo Christoph,

ich habe Deinen Quellcode unverändert kompiliert und habe den Fehler dann nicht in der z5-Datei gehabt. Ich weiß also nicht, woran es liegen kann. Vielleicht ein Fehler in Deinen Bibliotheken?

Hier ist die z5-Datei aus Deinem Code:

http://www.textabenteuer.de/verz.z5

Die Kopfzeile nach 'nimm hilfe' sieht völlig intakt aus.

Kai

Geschrieben um 21:34 am 16.09.2002 | Zitat | Editieren | Löschen
Gast
Gast

Martin: Vielen Dank, dein Tip war goldrichtig!

Nachdem ich die Zeile verändert habe, klappt jetzt alles wunderbar. Die aktuelle Version von Menus.h, die im IF-Archiv liegt, scheint also fehlerhaft zu sein. Hat jemand Zugang zu diesem Teil des Archivs und kann die 'bereinigte' Datei hochladen? Anderen könnte man dieses Problem ja ersparen.

Kai: Danke dir für's neukompilieren. Du hast wohl eine fehlerfreie Menus.h, bei mir lief das 'Spiel' dann auch problemlos. Das ist es ja auch, was die Z-Machine verspricht: Läufts bei einem, läuft's auch überall sonst.

Danke nochmals - ihr habt mir wirklich sehr geholfen!

Geschrieben um 21:37 am 16.09.2002 | Zitat | Editieren | Löschen
Christoph
Mitglied
Student Gumby
Beiträge: 37

Hrmpf - hatten wir das nicht heute schonmal? Schon wieder der 'Einloggen vergessen'-Trick. Das kommt davon, wenn man zwei Browser parallel benutzt um die Schnelligkeit des einen und die Lesezeichen des anderen nutzen zu können...

Kurz und gut: Der Beitrag da oben war von mir.

Geschrieben um 22:13 am 16.09.2002 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Gast Christoph:

Nachdem ich die Zeile verändert habe, klappt jetzt alles wunderbar. Die aktuelle Version von Menus.h, die im IF-Archiv liegt, scheint also fehlerhaft zu sein. Hat jemand Zugang zu diesem Teil des Archivs und kann die 'bereinigte' Datei hochladen? Anderen könnte man dieses Problem ja ersparen.

Schön, dass es jetzt funktioniert!

Von uns hat keiner Zugang zum Archiv. Der offizielle Weg ist: Einer von uns müsste dem Autor von Menus.h über das Problem berichten, der dann den Fehler hoffentlich behebt und die korrigierte Lib ins Archiv hochladen lässt. Auf diese Weise ist der Autor auch benachrichtigt und kann Versionen von Menus.h, die woanders liegen, ebenfalls korrigieren.

Allerdings ist das nicht gerade einfach, denn es ist Graham Nelson selbst, den man auf einen Fehler aufmerksam machen müsste.

Bevor wir aber wild Korrekturen versenden, sollten wir sicher stellen, dass Kais Version von Menus.h die fehlerhafte Zeile nicht verwendet. Ich habe Menus.h heute erst heruntergeladen und besitze keine ältere Version. Kai hat gewiss noch eine ältere, die er für Seite 3 verwendet hat.

Geschrieben um 22:16 am 16.09.2002 | Zitat | Editieren | Löschen
kairo
Mitglied
Dr Gumby
Beiträge: 284

Martin:

Kai hat gewiss noch eine ältere, die er für Seite 3 verwendet hat.

So ist es!

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

Kairo:

So ist es!

Bezieht sich das nur auf die ältere Lib oder auch auf die fehlerhafte

Zeile?

Hmm, trotzdem komisch. Ich habe die Menus.h gestern über http://www.inform-fiction.org heruntergeladen. Der Link geht direkt ins Archiv, und die Menus.h, die dort liegt, hat das Datum 27.06.1997. Länger als fünf Jahre hast Du Deine Version von Menus.h wohl nicht, oder, Kai?

Geschrieben um 11:01 am 17.09.2002 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

Meine menus.h ist mit Sicherheit schon mind. ein Jahr alt, trotzdem habe ich die fragliche Zeile drin.

Dass es diesen Fehler gibt, ist mir bisher entgangen, da ich die vorgefertige ICL-Datei aus dem Jump-Start-Kit verwende, in der der strikte Modus standardmäßig ausgeschaltet ist. Hab ihn eingeschaltet. Und prompt taucht der Fehler auch bei mir auf.

Die Fehlermeldung aus Christophs zweitem Bild, "... (string) on something not a string **]", wie hieße die vollständig?

Das Datum der menus.h im Archiv ist natürlich auch deshalb interessant, weil das DM4 ja deutlich jüngeren Datums ist. Wahrscheinlich ist die Version auf www.inform-fiction.org gar nicht mehr die aktuelle.

Geschrieben um 12:16 am 17.09.2002 | Zitat | Editieren | Löschen
kairo
Mitglied
Dr Gumby
Beiträge: 284

Martin:

Kairo:

So ist es!

Bezieht sich das nur auf die ältere Lib oder auch auf die fehlerhafte

Zeile?

Hmm, trotzdem komisch. Ich habe die Menus.h gestern über http://www.inform-fiction.org heruntergeladen. Der Link geht direkt ins Archiv, und die Menus.h, die dort liegt, hat das Datum 27.06.1997. Länger als fünf Jahre hast Du Deine Version von Menus.h wohl nicht, oder, Kai?

Nein, sicherlich nicht! Ich habe sie Ende letzen, Anfang dieses Jahres heruntergeladen. Den Fehler habe ich in meiner Version nicht gefunden.

Geschrieben um 12:20 am 17.09.2002 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

ChrW:

*Meine menus.h ist mit Sicherheit schon mind. ein Jahr alt, trotzdem habe ich die fragliche Zeile drin.

Das Datum der menus.h im Archiv ist natürlich auch deshalb interessant, weil das DM4 ja deutlich jüngeren Datums ist. Wahrscheinlich ist die Version auf www.inform-fiction.org gar nicht mehr die aktuelle.*

Das scheint mir die Lösung unseres Problems zu sein: Die menus.h im Archiv ist veraltet und im DM4 verbessert, aber nicht aktualisiert worden.

ChrW:

Dass es diesen Fehler gibt, ist mir bisher entgangen, da ich die vorgefertige ICL-Datei aus dem Jump-Start-Kit verwende, in der der strikte Modus standardmäßig ausgeschaltet ist. Hab ihn eingeschaltet. Und prompt taucht der Fehler auch bei mir auf.

Ist das eine gute Idee, den Strict Mode bei einer Lib, die sich an Einsteiger richtet, auszuschalten? Er erzeugt natürlich Code und man sollte ihn vor dem Veröffentlichen eines Spiels herausnehmen. Aber er hilft, typische Programmierfehler, die man normalerweise nur mit viel Mühe debuggen kann, zu erkennen. Während der Entwicklung und der Beta-Phase sollte man ihn wohl besser aktivieren.

Außerdem ist der Strict Mode in Inform standardmäßig aktiviert. Max, was denkst Du?

ChrW:

*Die Fehlermeldung aus Christophs zweitem Bild, "... (string) on something not a string *]", wie hieße die vollständig?

Hmm, vielleicht etwas wie:


[** Programming Error: Tried to print (string)

on something not a string **]

(Die printing rule string benutzt den Opcode @print_paddr, dessen Argument eine Packed Address ist, eine durch vier oder acht teilbare Adresse innerhalb der z-Datei, an der ein verschlüsselter Text liegt. Der Strict Mode prüft, ob diese Adresse innerhalb des gültigen Bereichs der z-Datei liegt, und wenn nicht, gibt es diese Fehlermeldung. Du müsstest sie mit etwas wie


x = -1;

print (string) x;

erzeugen können.)

Geschrieben um 17:06 am 17.09.2002 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

Martin:

ChrW:

Dass es diesen Fehler gibt, ist mir bisher entgangen, da ich die vorgefertige ICL-Datei aus dem Jump-Start-Kit verwende...

Ist das eine gute Idee, den Strict Mode bei einer Lib, die sich an Einsteiger richtet, auszuschalten?

Naja, in der ICL stehen drei Varianten, zwischen denen man durch Auskommentieren wechseln kann:

  1. Standard (-d2sxE1e~S)

  2. Debug (-d2sxE1e)

  3. Abbrevations berechnen (-d2sxE1u~S).

Da der Sinn und Zweck dieser Varianten sehr gut kommentiert ist, sollte das reichen. Wenn jemand wie ich dann trotzdem während der Entwicklung nicht in den Debug-Modus schaltet - selbst schuld.

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

ChrW:

Naja, in der ICL stehen drei Varianten, zwischen denen man durch Auskommentieren wechseln kann...

OK, das wusste ich nicht. Ich arbeite nicht mit Inform und dem Jump-Kit. Ich sollte es mir aber wenigstens erst einmal anschauen, bevor ich Dinge anzweifle.

Aber wieso setzt Debug den Strict Mode, aktiviert aber nicht den Inform-Debugger (-D), der den Strict Mode beinhaltet?

Na, egal. Einsteigern sollte man wohl die Debug-Variante empfehlen. Letztendlich wird sowieso jeder seine eigene Standard-ICL-Datei für seine Projekte benutzen.

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

Martin:

Aber wieso setzt Debug den Strict Mode, aktiviert aber nicht den Inform-Debugger (-D), der den Strict Mode beinhaltet?

Verhält es sich nicht genau anders herum? S.96 des DM4 scheint das jedenfalls zu behaupten. Demnach schließt der Strict Mode den Debug Mode ein, nicht jedoch umgekehrt.

Geschrieben um 00:26 am 18.09.2002 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Du hast recht, Strict Mode schließt Debug ein, aber nicht umgekehrt.

Ich hatte es nur anders in Erinnerung, und es macht meines Erachtens so auch nicht viel Sinn. Und wieder einmal habe ich im Brustton der Überzeugung das Falsche behauptet...

Geschrieben um 22:33 am 18.09.2002 | Zitat | Editieren | Löschen
ChrisW
Mitglied
Dr Gumby
Beiträge: 275

Martin:

Ich hatte es nur anders in Erinnerung, und es macht meines Erachtens so auch nicht viel Sinn.

Sollte sich Inform besonders durch Logik und Nachvollziehbarkeit auszeichnen, ist mir das bisher entgangen. 8)

Zitat:

Und wieder einmal habe ich im Brustton der Überzeugung das Falsche behauptet...

Hey, das passiert mir auch dauernd!

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