Hallo Besucher, der Thread wurde 182k mal aufgerufen und enthält 2775 Antworten

letzter Beitrag von GoDot am

Simons’ Basic/TSB: Farben, Zeichensätze, Sprites & Co.

  • Mir ist bei dem Befehl centre aufgefallen, dass der auch die nicht druckbaren Zeichen wie Farb- und Revers-Codes und andere Steuerzeichen wie CURSOR-LEFT/RIGHT usw. mitzählt.


    Wenn man z.B. schreibt centre"x" dann ist die Welt noch in Ordnung.

    Aber wenn ich vor dem x 10 mal den Farbcode für Rot eingebe (CONTROL + 3) dann rutscht mein X um 5 Zeichen zu weit nach links.


    Das ist zwar jetzt ein konstruiertes Beispiel. Aber es kann ja durchaus sein, dass in einem String mehrfach Farbcodes und REVERS ON/OFF vorkommt, um eine besonders bunte und hübsche Formatierung zu erzeugen. Und dann klappt das Zentrieren nicht richtig.


    Ist das so gewollt?


    Na, ja. Ändern kann man es ja sowieso nicht. Denn dann würde ja bei allen alten TSB-Programmen die Formatierung durcheinandergeraten. Ich frag nur mal so...


  • Nein, wenn du vorne Steuerzeichen drin hast, musst du die hinten ausgleichen (z.B. mit Leerzeichen oder CRSR-right). Der Einrückalgorithmus rechnet stumpf mit der Stringlänge, ohne zu wissen, was im String steht.


    Arndt


    Edit: Du kannst das ja auch als verstecktes Feature sehen, wenn dir eine Einrückung nicht zusagt, kannst du sie so manipulieren.

  • Ich hatte vor als Loader für meinen Zeichensatzeditor folgenden BASIC V2 Code zu benutzen.

    Code
    1. 10 if a=0 then a=1:load"tsb.obj",8,1
    2. 20 p=631:c=0
    3. 30 read v:if v=-1 thenpoke198,c:sys 33095
    4. 40 poke p+c,v:c=c+1:goto 30
    5. 100 data 76,111,34,80,42,34,44,56,58,131,-1

    Dieses Programm lädt erst TSB und startet es mit SYS33095.

    Dann schreibt es lO"z*",8 und den Code für Shift+Run/Stop (131) in den Tastaturpuffer.

    Das würde normalerweise auch funktionieren. Das Problem ist nur, dass TSB die Abkürzung L und Shift+O zum Laden nicht versteht (siehe Bild).


    Gibt es in TSB ein anderes Kürzel zum Laden, das auch nur aus zwei Zeichen besteht?

    Oder hast Du eine andere Idee?


  • Gibt es in TSB ein anderes Kürzel zum Laden, das auch nur aus zwei Zeichen besteht?

    Da der TSB-Tokenizer Vorrang vor dem V2-Tokenizer hat, wirkt sich das auch auf die Abkürzungen aus: Die TSB-Befehle, die mit gleichen Buchstaben anfangen wie V2-Befehle, kommen bei den Abkürzungen eher dran. Bei LOAD ist das dann "loA", weil "lO" zu LOOP wird.


    Uh! Da fällt mir ein, ich muss die Datei "tsb demo" von der TSB-Disk noch an den neuen Tokenizer anpassen! Oh, gut, dass du fragst! (Im TSB-Demo-Programm ist eine Abteilung, wo du zwei Anfangsbuchstaben eines Basic-Befehls eingeben kannst und du kriegst dann eine Liste mit allen Befehlen mit dem gleichen Anfangsbuchstaben und die mit beiden gleichen Anfangsbuchstaben sind zusätzlich hervorgehoben. Aus der Reihenfolge siehst du dann den Vorrang (wer weiter vorne steht, hat Vorrang)). Es gibt schon eine ganze Reihe von Umgewöhnungen... (RETURN jetzt mit "retU" abkürzen usw.)


    Ich korrigiere grade noch die Demo-Datei, dann kannst du das da direkt ablesen. Ich melde mich dann hier.


    Arndt

  • Die Datei "tsb.zip" ist aktualisiert, das "tsb demo" darauf funktioniert nun.


    Dort im Hauptmenü "L" wählen, danach werden alle 203 Befehlsworte eingelesen und du kannst einen gewünschten Befehl eingeben (bzw. die ersten Buchstaben davon). Du kriegst eine nach Vorrang geordnete Liste der Befehle, die genauso anfangen wie deine Eingabe. Die mit den gleichen beiden Anfangsbuchstaben sind zusätzlich hervorgehoben.


    Arndt

  • Da der TSB-Tokenizer Vorrang vor dem V2-Tokenizer hat, wirkt sich das auch auf die Abkürzungen aus: Die TSB-Befehle, die mit gleichen Buchstaben anfangen wie V2-Befehle, kommen bei den Abkürzungen eher dran. Bei LOAD ist das dann "loA", weil "lO" zu LOOP wird.

    Wäre es nicht "logischer", den BASIC V2-Befehlen den Vorrang zu geben und TSB als zusätzliche Erweiterung zu behandeln? Immerhin verlierst du insofern die Kompatibilität zu V2, da z.B. ein lO eben kein LOAD mehr ist.

  • Wäre es nicht "logischer", den BASIC V2-Befehlen den Vorrang zu geben und TSB als zusätzliche Erweiterung zu behandeln?

    Hätte ich auch lieber gehabt (David Simons sicher ebenfalls), aber die Software-"Mechanik" von Commodore bietet keinen sinnvollen (einfach zu beschreitenden) Weg, nach dem V2-Tokenisieren zur Erweiterung überzuwechseln und weiter zu tokenisieren. Die Kernal-Vektoren sind für den Anfang des Prozesses ausgerichtet, nicht für das Ende. Na ja, und man gewöhnt sich auch dran (man gewöhnt sich an allem...) ;-)


    Arndt

  • Bei LOAD ist das dann "loA", weil "lO" zu LOOP wird.

    Okay, danke. Diese Information habe ich gebraucht.

    Aus der Reihenfolge siehst du dann den Vorrang (wer weiter vorne steht, hat Vorrang)).

    Ich werde da nicht so ganz schlau draus.

    Wie soll man daraus ableiten können, welche Abkürzungen man für diese Befehle verwenden kann.

    Und warum heißen so viele Befehle ">"?


    Übrigens:

    Auf der Downloadseite steht bei mir schon seit geraumer Zeit Version ...805. Die aktuelle Version ist aber ...806.

    Ja, ja. Ich weiß. Du brauchst Zeit. Aber ich halte das einfach nicht aus wenn etwas nicht stimmt. :D

  • Ich werde da nicht so ganz schlau draus.

    Vielleicht tust du einfach, was da steht ("Please Press a Key.") :-)

    Aber ich halte das einfach nicht aus wenn etwas nicht stimmt.

    Das haben wir alle schon mitgekriegt! ;-)


    Arndt

  • Mal Spaß beiseite. Ich habe natürlich auch die Eingabeaufforderung am Ende gesehen und da "lo" eingegeben. Und dann zeigt mir das Programm passende Befehle mit den Suchkriterien an. Aber wie finde ich denn da nun heraus, wie die Befehle abgekürzt werden sollen?

    Gibt's da eine Geheimformel die jeder kennt? Nur ich nicht?

  • Gibt's da eine Geheimformel die jeder kennt? Nur ich nicht?

    Offensichtlich! Du kürzt beim ersten Buchstaben, der sich von den markierten Vorgängern unterscheidet. So einfach ist das.


    Arndt

  • In der Bedienungsanleitung von TSB stehen ja die Kürzel bei allen TSB-Befehlen drin. Wäre vielleicht ganz gut, wenn die Anleitung auch eine Tabelle enthalten würde, die Aufschluss darüber gibt, wie man die normalen BASIC Befehle in TSB abkürzt. Denn immerhin ist das ja eine TSB-spezifische Änderung gegenüber dem normalen BASIC. Und es soll ja Hans-Würste geben, die nicht zielstrebig die "TSB Demo" öffnen um da eine geheime Funktion zu benutzen, die auch nicht so ganz klarmacht wie die Befehle abgekürzt werden.

  • Die folgende bislang unbeantwortete Frage nehme ich hier, um zu zeigen, wie man in TSB eine Art "Bibliothek" mit Funktionen und Prozeduren mit MERGE nachladen kann.

    Für die oben gefragten Zwecke sieht die so aus:

    Die Namen der Funktionen und Prozeduren kann man natürlich den eigenen Bedürfnissen entsprechend anpassen. Ich habe hier bis zu vier Zeichen auch für die Funktionsnamen genommen, damit man sich die besser merken kann. Aber nur zwei Zeichen werden für den Variablennamen tatsächlich benutzt. Leider sind Funktionsnamen schwieriger zu definieren als Prozedurnamen, weil Schlüsselwörter nicht im Namen enthalten sein dürfen. Also z.B. "border" an Stelle von "brdr" scheitert am "or".

    Mit dem folgenden Demo-Programm kann man "funlib" testen. Nach dem Laden von "funlib-demo" führt man im Direktmodus <code>merge"funlib"</code> aus. Natürlich muss man bei MERGE darauf achten, dass das Programm keine Zeilennummern enthält, die in FUNLIB benutzt werden. Das Sprite ist aus MOB SET geklaut.

  • petrus: So ganz unbeantwortet war die Frage nicht. Immerhin hat GoDot einen ganzen Abschnitt in der Bedienungsanleitung hinzugefügt, um diese Fragen, die die Menschheit schon seit jeher beschäftigen, zu beantworten. Aber Deine Funktionsbibliothek ist auch sehr cool. Habe ich mir direkt mal heruntergeladen. Vielen Dank für die Mühe. :thumbsup:

  • Aber Deine Funktionsbibliothek ist auch sehr cool. Habe ich mir direkt mal heruntergeladen.

    Da war noch ein Fehler bei der Berechnung der Sprite X-Koordinate drin, der bei Werten >255 auftrat. Ist jetzt aktualisiert. Bitte die neue Version noch einmal herunterladen.