PAUSE (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
PAUSE (TSB)
Syntax: PAUSE [<string>,] <sek> [ ; ] [<Ausdruck>] [ [ ";" ¦ "," ]<Ausdruck>...]
Parameter
<string>: Kommentarstring
<sek>: 0..255 (Sekunden)
Einordnung
Typ: Anweisung
Kontext: Bildschirmkontrolle
Aufgabe: Programm für eine festgelegte Zeit anhalten
Abkürzung: paU
Token: $64 $66 (100 102)
Verwandte Befehle
keine


Dieser Artikel beschreibt das TSB-Schlüsselwort PAUSE (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls PAUSE.

Typ: Anweisung
Syntax: PAUSE [<string>,] <sek>

PAUSE ist dazu gedacht, einen Bildschirm für eine bestimmte Anzahl von Sekunden auf jeden Fall sichtbar zu halten. Der Befehl hält ein laufendes Programmm also zeitkontrolliert an. Um eine einfache Möglichkeit zu haben, dem Benutzer ein solches Anhalten zu signalisieren, bietet PAUSE den optionalen <string>-Parameter an. Der String wird an der aktuellen Cursorposition ausgegeben. Nach der Ausgabe steht der Cursor dann hinter dem letzten Zeichen des Strings.

Eine Angabe von 0 als Wartezeit ist erlaubt, der Interpreter setzt dann seine Arbeit unverzüglich fort.

Die Wartezeit kann durch Betätigen einer beliebigen Taste (außer Shift, C= oder CTRL) abgebrochen werden.

Hinweise:

  • Wenn man das aus Simons' Basic gewohnte Verhalten des Befehls bevorzugt (PAUSE reagiert nur auf Return ), gibt man in der Initialisierungsroutine seines Programms einmalig POKE $B90E,$24 ein. Das in TSB normale Verhalten von PAUSE wird mit POKE $B90E,$D0 wiederhergestellt (ab v2.31.113, vorher $A806).
  • Hat man PAUSE auf das Verhalten von Simons' BASIC umgestellt, ist es möglich, die Abbruchtaste anders als mit CHR$(13) zu belegen, ähnlich wie im PAUSE Beispiel 2 gezeigt. Nur muss man jetzt einen POKE in $B911 benutzen (früher $A809).

Beachten:

  • Werte über 255 für <sek> werden akzeptiert, aber auf Byteformat reduziert. Der Interpreter führt intern ein (<sek> AND 255) durch.
  • In TSB muss der Ausdruck für <sek> immer mit einer Ziffer beginnen, wenn kein Hinweis-String verwendet wird. Anders als bei PAUSE von Simons' Basic führen Zeichen mit einem PETSCII-Code kleiner als 48 ("0") oder größer als 57 ("9"), wie zum Beispiel ".", "+","$" bzw. "a" als Variablenname, sonst zu einem TYPE MISMATCH ERROR. Um dies zu vermeiden, gibt man PAUSE 0 + <ausdruck> ein.


Beispiele[Bearbeiten | Quelltext bearbeiten]

Beispiel 1[Bearbeiten | Quelltext bearbeiten]

90 a$="Bitte warten": b$="Danke       "
100 PRINT AT(23,23)"";: PAUSE a$,5
110 PRINT AT(23,23)"";: PAUSE b$,2
120 CLS

(in den Zeilen 100 und 110 wird in Simons'-Basic-Syntax ein Hinweis ausgegeben, nach einer Wartezeit von 5 Sekunden und schließlich nach 2 Sekunden der Screen gelöscht)

Beispiel 2[Bearbeiten | Quelltext bearbeiten]

Der Wert für die Pausenzeit wird immer auf eine Ganzzahl abgerundet. Deshalb macht es keinen Sinn, etwa PAUSE 0.9 einzugeben.
Tipp: Um Zeitspannen zu bemessen, die kürzer sind als eine Sekunde, verwendet man die Speicherstelle $C516. Sie wird von (T)SB 60-mal in der Sekunde erhöht, zählt also 60tel Sekunden. Will man z.B. zur Aufmerksamkeitssteigerung den Bildschirmrahmen kurz flackern lassen, geht man so vor:

1000 x=0: REPEAT: x=x+1: UNTIL x=100
1010 POKE $C516,0: BFLASH 5,2,11
1020 REPEAT: UNTIL PEEK($C516)>15: BFLASH OFF

Das Programm lässt den Rahmen für etwa eine Viertelsekunde mit schneller Frequenz zwischen Rot und Dunkel-grau blinken, nachdem die Variable X den Wert 100 erreicht hat.

Beispiel 3[Bearbeiten | Quelltext bearbeiten]

In TSB v230122 ist der PAUSE-Befehl erweitert worden: die Pause kann nun mit einer beliebigen Eingabetaste statt nur mit <RETURN> abgebrochen werden. Das folgende Programm zeigt, wie dies dazu benutzt werden kann, eine Diashow zu erstellen. Nach PAUSE wird aus der Speicherstelle $C5 = 197 (letzte gedrückte Taste) der Tastaturcode der Abbruchtaste ermittelt. Davon abhängig können nun ähnlich wie nach GET Aktionen ausgeführt werden. Hier wird mit der Abfrage nach "d" der Diashow-Modus ein- bzw. ausgeschaltet oder das Programm mit "x" beendet.

100 B=0:.INIT
110 LOOP
120 PRINT AT(6,2+3*D)"   ---   "
130 USE AT(11,23)"BILD ##",B+1
140 IF D=0 THEN .GETKEY:ELSE .DIASHOW
150 END LOOP
160 END
180 REM ---
190 PROC .INIT
200 CLS
210 INSERT "+-+! !+-+",2,17,20,20,0
220 PRINTAT(1,1)"DIASHOW"
230 PRINTAT(4,1)"D = DIASHOW"
240 PRINTAT(5,1)"    OFF/ON"
250 PRINTAT(7,1)"X = EXIT"
260 END PROC
270 REM ---
280 PROC .GETKEY
290 KEYGET A$
300 IF A$="X" THEN CLS: END
310 IF A$="D" THEN DO
320 D=1
330 ELSE
340 B=(B+1)AND15
350 DONE
360 END PROC
370 REM ---
380 PROC .DIASHOW
390 PAUSE 3: G=PEEK(197)
400 IF G=23 THEN CLS:END
410 IF G=18 THEN DO
420 D=0
430 ELSE
440 B=(B+1)AND15:
450 DONE
460 END PROC