PRINT

Aus C64-Wiki
(Weitergeleitet von Print)
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen finden sich unter PRINT (Begriffsklärung).
PRINT
Syntax: PRINT [<Ausdruck>] [ [ ";" ¦ "," ]<Ausdruck>...]
Parameter
<Ausdruck>: numerischer oder Zeichenkettenausdruck
Einordnung
Typ: Anweisung
Kontext: Ein/Ausgabe
Aufgabe: Ausgabe von Daten auf den Bildschirm
Abkürzung: ?
Token: $99 (153)
Verwandte Befehle
CMD, PRINT#, TAB, SPC

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl PRINT unter BASIC V2 des Commodore 64.


Der BASIC-Befehl PRINT dient zur Ausgabe von Daten auf den Bildschirm oder einen mit CMD festgelegten Ausgabekanal. Es können beliebige Ausdrücke, die Variablen, (Zeichenketten- oder Zahlenvariablen), Operatoren oder BASIC-Funktionen enthalten, mit einem optionalen Separatorzeichen getrennt vorkommen, wobei gilt, dass Zeichenketten und auch Grafik- und Sonderzeichen, wie z.B. ! oder (, stets wie für String-Konstanten üblich in Anführungszeichen (" ") stehen müssen, ansonsten kommt es mitunter zur BASIC-Fehlermeldung ?SYNTAX ERROR.

Folgende Eigenschaften und Besonderheiten weist PRINT auf:

  • Wird Text ohne Anführungszeichen eingegeben, wird dieser als Ausdruck interpretiert, wobei häufig eine Zahlenvariable (falls mit einem Buchstaben beginnend) oder ein numerischer Wert (falls mit einer Ziffer beginnend) vorliegt.
  • Der PRINT-Befehl schließt die Ausgaben immer mit einem Zeilenwechsel ab, es sei denn, der Ausdruck endet mit einem Semikolon (;) oder Komma (,). Der PRINT-Befehl ohne Parameterangabe bewirkt nur ein Zeilenwechsel.
  • Steht hinter dem letzten Ausdrücken ein Semikolon (;), so erfolgt die nächste Bildschirmausgabe direkt hinter dem ausgegebenen Ausdruck. Für die Ausgabe von Zahlen (als Ergebnis eines numerischen Ausdrucks) gilt dabei:
  1. Bei positiven Werten erscheint ein führendes Leerzeichen (als Platzhalter für das Vorzeichen).
  2. Der Zahl folgt eine Leerstelle (bei Bildschirmausgabe genaugenommen ein {CRSR RIGHT}-Zeichen, siehe $AAC5, sonst ein normales Leerzeichen).
  • Mit einem Komma (,) kann jeweils die nächste Tabulatorposition (alle 10 Zeichen) angesprungen werden. Beispielsweise wird der Cursor auf Spalte 10 gesetzt, wenn er sich vorher in Spalte 0-9 befand. Es gelten die gleichen Aussagen bei den Zahlenausdrücken wie beim Semikolon.
  • Das Setzen von Komma (,) oder Semikolon (;) ist nicht erforderlich, um Ausdrücke abzutrennen. Der BASIC-Interpreter verlangt diese im Zusammenhang mit PRINT nicht. Bei fehlendem Trennzeichen tritt das Verhalten eines Semikolons (;) ein.
    Jedoch werden Leerzeichen außerhalb von Anführungszeichen (" ") durch den BASIC-Interpreter (siehe CHRGET) ignoriert, weshalb aufeinander folgende Zahlenvariablen oder numerische Werte auf jeden Fall mit einem Trennzeichen getrennt werden müssen. Geschieht dies nicht, werden die Zeichen jeweils als einziger Variablenname bzw. numerischer Wert interpretiert.
  • Die speziellen Funktionen SPC und TAB (Ausgabefunktionen) können nur hier (und bei den verwandten Kommandos PRINT# und CMD) verwendet werden. Sie haben am Ende der Ausgabe, abgesehen ihrer eigenen Funktion, das gleiche Verhalten wie ein Semikolon (;), d.h. sie unterdrücken den Zeilenwechsel.
  • Mittels BASIC-Befehl CMD kann die Bildschirmausgabe mit PRINT auch auf ein anderes Gerät umgeleitet werden.

PRINT ist relativ langsam. Die Ausgabe einer Bildschirmzeile (40 Zeichen) aus einer Konstante benötigt etwa 15 Millisekunden. Entsprechend benötigt PRINT zum Beschreiben des gesamten Bildschirms (25 Zeilen) inklusive weiterem Overhead durch den Interpreter insgesamt fast eine halbe Sekunde.

Beispiele[Bearbeiten | Quelltext bearbeiten]

PRINT 12+2
PRINT 12-1
PRINT 12*2
PRINT 12/2
PRINT COS(2)LOG(1)

Direkte mathematische Berechnungen sind so möglich, auch aufeinander folgende Ausdrücke.

PRINT "VORHER"SPC(0)
PRINT "NACHHER"

verhält sich so wie

PRINT "VORHER";
PRINT "NACHHER"

SPC() wie TAB() am Ende unterdrücken den Zeilenwechsel und in beiden Fällen wird folgendes ausgegeben:

VORHERNACHHER
ABC=123: A=4: B=5: C=6 
PRINT A B C: PRINT "AUSGEGEBEN WURDE:  123" 
PRINT A,B,C: PRINT "AUSGEGEBEN WURDE:  4         5         6"
PRINT 4 5 6 + 1: PRINT "AUSGEGEBEN WURDE:  457"

Der Interpreter ignoriert Leerzeichen außerhalb von Anführungszeichen: Im ersten PRINT wird der Inhalt der Zahlenvariable ABC ausgegeben, im letzten PRINT wird "4 5 6" als die Zahl 456 interpretiert.

PRINT "{CTRL9}INVERTIERT";
PRINT "IMMER NOCH INVERTIERT"
PRINT "NICHT MEHR INVERTIERT"

Ein Zeilenumbruch setzt automatisch das Invertiert-Flag zurück.

PRINT "{INST}{INST}{DOWN}{DOWN}{DOWN}TEST"

Jedes Insert bewirkt das Verschieben der auf den Cursor in der Zeile folgenden Zeichen um ein Zeichen nach rechts. Außerdem bewirken Inserts, dass die gleiche Anzahl nachfolgender Steuerzeichen uninterpretiert ausgegeben werden. Im Beispiel werden die ersten zwei der drei "Down"-Steuerzeichen nicht als "Cursor abwärts" ausgeführt, sondern als Zeichen ausgegeben. Erst das dritte "Down"-Steuerzeichen wird auch als "Cursor abwärts" ausgeführt.

10 A$="HALLO ": B$="WIE HEISST DU": D$="C64"
20 PRINT A$"? "B$; :INPUT C$
30 PRINT: PRINT, :PRINT A$C$
40 PRINT: PRINT "ICH HEISSE ";D$

Kombination von Ein- und Ausgabe.

10 INPUT "NAME";N$
20 PRINT "IHR NAME IST " CHR$(34) N$ CHR$(34) "!"

Für die Ausgabe des Zeichens (") muss man sich mit der Funktion CHR$() behelfen.


PRINT AT

Das bei anderen BASIC-Varianten bekannte PRINT AT (Ausgabe an einer bestimmten Position am Bildschirm) gibt es in BASIC 2.0 nicht direkt, lässt sich aber "nachbauen":

PRINT LEFT$("{HOME}{25 × CRSR DOWN}",Y) SPC(X);

Dabei ist der Wertebereich für X (Spalte) von 0 bis 39 und für Y (Zeile) von 1 bis 25.
Die letzte Bildschirmposition für X=39 und Y=25 bewirkt bei Ausgabe auch nur eines einzelnen druckbaren Zeichens das Scrollen des gesamten Bildschirminhalts um eine Zeile nach oben.

Bei häufigerer Nutzung bietet sich folgendes kleines Maschinensprache-basierte Hilfsprogramm an, das auch kompatibel mit Paradoxon-Basic ist und bei Gold Quest 6 genutzt wurde:

1 q=830:fori=qtoq+42:readb:pokei,b:next
2 data173,225,244,201,201,240,14,32,155,183,134,211,32,155,183
3 data32,140,232,76,19,171,32,121,0,32,155,231,134,211,32,121
4 data0,32,155,231,134,214,32,121,0,76,8,245
5 sysq,5,6,"* <- spalte 5, zeile 6"

Ebenso lässt sich diese Funktion unter Verwendung der PLOT-KERNAL-Routinen bewerkstelligen.