Beiträge von BIF im Thema „Scroll- und Type-Routinen in BASIC V2“

    Was natürlich von der Anwendung abhängt.

    Auch mein Programm hat natürlich seine Vorteile:
    -kein Stringmüll,
    -keine GarbageCollection,
    -es werden keine CLR´s benötigt.
    -es wird kein externer Speicherplatz verwendet,
    -es wird kein Maschinenprogramm benötigt.

    -Abgesehen davon kann man natürlich auch bei meiner Methode den Text in Datazeilen ablegen und einlesen, muß man aber nicht.
    -Als weiteren Vorteil könnte man ansehen, daß auch meine Lösung mit 3 Zeilen relativ kurz ist. Aber auch da kann man vermutlich noch was kürzen.

    Schönen Gruß.

    Äh ja, ich könnte die Geschwindigkeit ja noch steigern, wenn ich z.B. die Doppelpunkte am Anfang weglasse.
    Also, was ich sagen wollte, ist, daß auch mein Programm noch nicht völlig optimiert ist, aber dennoch, finde ich, schon zeigt, wie man es mit der Methode machen kann.

    Schönen Gruß.

    Für die Freunde der Garbage-Collection-Vermeidung:

    Der Kenner hat sicherlich erkannt, daß die Stringaddition in Zeile.5 zu einer GBC führen kann.
    Daher kann man bei dem b$-Ausdruck noch das chr$(20) entfernen und durch ein Leerzeichen ersetzen.
    Selbes Leerzeichen kann man dann mit einem reversen-t + Return überschreiben.
    Das ersetzt dann das chr$(20).
    Damit spart man dann gleich dreifach:
    1. an Programmcode
    2. den Stringmüll+String im Stringram
    3. einen eventuellen Zeitverlust durch die GBC

    Schönen Gruß.

    Hier noch einmal ein Code auf der Basis der Stringadresse, der durch die Arbeit mit peek, keine GBC und keine Data-Zeilen benötigt.

    Code
    5 ::b=50:print"[clr]z-roll:":print::b$="[hoch,rechts]"+chr$(20)+"[runter,links]"
    10 :a$="hallo, wie geht es euch ? ":gosub20
    11 :a$="und so weiter und so fort. ":gosub20:goto10
    19 :
    20 :fora=peek(34+0*len(a$))+peek(35+0*len(a$))*256toa+len(a$)-1:fori=0tob:next
    21 :printb$chr$(peek(a));:next:return


    Schönen Gruß.

    Wenn man mehrere Strings hat, kann man das Unterprogramm mehrmals aufrufen.
    -Oder man kann die Strings, die sich ja innerhalb des Programms befinden in den Stringram-Bereich kopieren.
    Mit a$=a$+"":
    -Oder man addiert einfach mehrere Strings zusammen. Ein String kann ja bis zu 255 Zeichen erhalten, was immerhin über 6 Zeilen x 40 Zeichen Scrolltext sind.
    Pro String versteht sich.

    Schönen Gruß.

    Bytebreaker:
    Die Funktion holt einfach nur die Stringadresse aus 34/35. Der Rest sorgt dafür, daß die Adresse in 34/35 auftaucht.
    (a$..) ist immer Null, so daß peek(34/35) nicht geändert wird, sorgt aber dafür, daß die Stringadresse in 34/35 auftaucht.
    Ansonsten denke ich, daß peek schneller ist als read oder asc(mid .
    Außerdem macht es keine GBC.

    Schönen Gruß.

    Bytebreaker:

    Man muß nicht immer mit Datas arbeiten. Wenn man Strings ausgibt, dann kann man auch mit Strings arbeiten.
    Hier noch einmal die Funktion zur Ermittlung der Stringadresse.
    Das heißt praktisch, daß man alle Stringzeichen nun mit peek lesen kann.

    Code
    5 :a$="hallo, wie geht es euch"
    10 :a=peek(34+(a$<""))+peek(35+(a$<""))*256
    11 :printpeek(a),chr$(peek(a))

    Natürlich läßt sich der Ausdruck auch in eine Funktion packen.

    Schönen Gruß.