POS

Aus C64-Wiki
Zur Navigation springenZur Suche springen
POS
Syntax: POS(<Hilfsargument>)
Parameter
<Hilfsargument>: beliebiger Ausdruck, ohne weitere Bedeutung
Einordnung
Typ: Ganzzahlige Funktion
Kontext: Ein/Ausgabe
Aufgabe: Ermittelt die aktuelle Spaltenposition des Cursors am Bildschirm
Abkürzung: -
Token: $b9 (185)
Verwandte Befehle

Anmerkung: Dieser Artikel beschreibt die Funktion POS unter BASIC V2 des Commodore 64.


Die BASIC-Funktion POS() gibt die aktuelle Spaltenposition des Cursors am Bildschirm zurück.

Die Funktion liefert einen Wert im Bereich von 0 (erste Spalte) bis 79 (letzte Spalte der 2. logischen Zeile).
Typ und Wert des im Hilfsargument angegebenen Ausdrucks werden ignoriert aber vom BASIC-Interpreter ausgewertet (muss also syntaktisch korrekt sein). Typischerweise wird POS(0) oder für ein optimiertes Laufzeitverhalten POS(π) benutzt.

Der Parameter Hilfsargument muss zwingend vorhanden sein, andernfalls wird die BASIC-Fehlermeldung ?SYNTAX ERROR ausgegeben.

Ein Fehler des BASIC-Interpreters offenbart sich, wenn in einem Programm (auch im Direktmodus) als Hilfsargument ein Wert vom Typ Zeichenkette verwendet wird (siehe Beispiele). Z.B. bewirkt eine konstante Zeichenkette als Parameter der POS()-Funktion beim dritten Aufruf, dass der String-Descriptor-Stack (für temporär erstellte Zeichenketten) voll ist, was nicht mehr bereinigt werden kann. Infolgedessen meldet der Interpreter diesen Zustand mit der Fehlermeldung ?FORMULA TOO COMPLEX ERROR. Die FRE()-Funktion, die ebenfalls mit einem Scheinparameter arbeitet, weist dieses Problem nicht auf.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Erst die Schreibposition auf Spalte 30 (die 31.) setzen, die Position abfragen und im Anschluss gleich dort ausgeben:

PRINT TAB(30);POS(0)
                               30


Die Position in einer logischen Zeile (aus Sicht der Bildschirmorganisation), die auch jenseits von 39 ergeben kann, wenn eine Zeile über die Position 39 hinaus "gefüllt" wird:

PRINT "01234567890ABCDEFGHIJ01234567890ABCDEFGHIJ1234";POS(0)
01234567890ABCDEFGHIJ01234567890ABCDEFGHIJ
1234 44


Da POS() das anzugebende Argument verlangt, dieses aber nicht verwendet, kann es so gewählt werden, dass die Laufzeit optimal ist (falls die Funktion intensiver bzw. iterativ zum Einsatz kommt):

100 DIM X
110 T=TI
120 FOR I=1 TO 1000
130 X=POS(π)
140 NEXT
150 PRINT (TI-T)/60;"SEKUNDEN"

Der Ausdruck im Argument von POS() evaluiert am schnellsten mit der Konstanten π (Pi), gefolgt von . (Dezimalpunkt, entspricht dem Wert 0), einer Variable (sofern sie früh definiert ist, wie etwa oben das "X") und am langsamsten mit einer Konstante wie z.B. "0". Das angeführte Beispiel lässt sich so von der langsamsten Variante um 20 % beschleunigen.


Fehler des Interpreters mit Zeichenkettenkonstanten als Hilfsargument:

PRINT POS("")POS("")POS("")

bricht mit der Fehlermeldung ?FORMULA TOO COMPLEX ERROR ab!