Forum moved to if-forum.org
Autor Nachricht
<  Problem mit Verwendung von Menus.h
Christoph
BeitragVerfasst am: Mo, 16 Sep 2002 - 17:58  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 26.08.2002
Beiträge: 40

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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mo, 16 Sep 2002 - 19:12  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

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
Code:

[** 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
Code:

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
Code:

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
Code:

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)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
kairo
BeitragVerfasst am: Mo, 16 Sep 2002 - 20:09  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 298

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Gast
BeitragVerfasst am: Mo, 16 Sep 2002 - 20:34  Antworten mit Zitat






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!
Nach oben
Christoph
BeitragVerfasst am: Mo, 16 Sep 2002 - 20:37  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 26.08.2002
Beiträge: 40

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mo, 16 Sep 2002 - 21:13  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Gast Christoph hat folgendes geschrieben:
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.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
kairo
BeitragVerfasst am: Mo, 16 Sep 2002 - 21:16  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 298

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

So ist es!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Martin
BeitragVerfasst am: Di, 17 Sep 2002 - 7:55  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Kairo hat folgendes geschrieben:
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?
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChrisW
BeitragVerfasst am: Di, 17 Sep 2002 - 10:01  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig

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.
_________________
"Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
kairo
BeitragVerfasst am: Di, 17 Sep 2002 - 11:16  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 298

Martin hat folgendes geschrieben:
Kairo hat folgendes geschrieben:
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Martin
BeitragVerfasst am: Di, 17 Sep 2002 - 11:20  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

ChrW hat folgendes geschrieben:
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 hat folgendes geschrieben:
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 hat folgendes geschrieben:
Die Fehlermeldung aus Christophs zweitem Bild, "... (string) on something not a string **]", wie hieße die vollständig?

Hmm, vielleicht etwas wie:
Code:

[** 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
Code:

x = -1;
print (string) x;

erzeugen können.)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChrisW
BeitragVerfasst am: Di, 17 Sep 2002 - 16:06  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig

Martin hat folgendes geschrieben:
ChrW hat folgendes geschrieben:
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.
_________________
"Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Di, 17 Sep 2002 - 18:14  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

ChrW hat folgendes geschrieben:
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.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChrisW
BeitragVerfasst am: Di, 17 Sep 2002 - 22:12  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig

Martin hat folgendes geschrieben:
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.
_________________
"Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Di, 17 Sep 2002 - 23:26  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

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...
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 2
Gehe zu Seite 1, 2  Weiter
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
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.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05