Geschrieben um 12:20 am 25.06.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Hallo, kann mir biiiitte jemand sagen, wie man eine Texteingabe in einen String bringt? Ich bin ehrlich am Verzweifeln. Ich habe DM4 auf den Kopf gestellt, parserm und verblibm auf Hinweise durchforstet und habe nichts gefunden. Mit read_char hatte ich wenigstens Teilerfolge, (größtes Problem ist, dass bei print des eingelesenen chars kein [delete] u.a. möglich sind.) Mit aread komme gar ich nicht weiter, bei KeyboardPrimitive und "Konsorten" weiss ich nicht, ob ich überhaupt richtig liege... (Beim C64-Basic hätte ich einfach Input T$ verwendet ;-) Es soll ein Text (es genügt ein Wort, also ohne Leerzeichen oder Komma) eingegeben werden, der nicht über den Parser laufen soll. Diesen String möchte ich dann weiter verarbeiten. Noch ein Nacht verkrafte ich nicht.... Tausend Dank schon mal Kris |
Geschrieben um 15:12 am 25.06.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Das Problem bei @read_char ist, dass immer nur ein Zeichen gelesen wird. Das kann zwar wieder ausgegeben werden, aber der Backspace kann nicht benutzt werden, weil einmal Ausgegebenes nicht wieder gelöscht werden kann. (Es sei denn, die Nachfrage findet im oberen, dem Statusfnster statt, aber wir wollen die Sache hier nicht verkomplizieren.) Eine ganze Zeile wird eingelesen mit der Direktive
die in Kapitel 2.5 des DM4 beschrieben wird. buffer ist ein Byte-Feld, das die eingegebenen Zeichen enthält, das Mischfeld parse enthält Informationen über die gefundenen Wörter, wie genau die Information abgelegt wird, steht ebenfalls in Kapitel 2.5. Anstelle des zweiten Feldes kann auch Null stehen, dann wird die Eingabe nicht lexikalisch analysiert. (Es gibt weitere, optionale Parameter, die den Input nach einer gewissen Zeit abbrechen können (Interrupt Request) und oft benutzt werden, um Echtzeiteffekte zu programmieren. Again, let's not complicate things.) Praktischerweise gibt es in der Lib bereits die beiden Felder buffer und parse für die normale Eingabe, sie sind auch schon groß genug dimensioniert. Diese kann man benutzen, wenn der Parser zum Zeitpunkt der Nachfrage bereits seine Arbeit erledigt hat, was im Normalfall so sein dürfte. Ein Nachteil von read ist, dass die Eingabe im Gegensatz zu @read_char immer in reinen Kleinbuchstaben vorliegt, man kann hier nicht zwischen Groß- und Kleinschreibung unterscheiden. Die Lib-Routine KeyboardPrimitive macht eigentlich nichts anderes als ein read mit den übergebenen Parametern durchzuführen - wenn z-Code erzeugt werden soll. Für Glulx ist die Sache komplizierter, so dass du vielleicht diese Routine verwenden solltest, um den Code allgemein gültig zu halten, falls du hinterher auf Glulx umschwenken möchtest. Und zum Schluss noch ein gut gemeinter Ratschlag für das Design des Zwischenprompts: |