MOVE

Aus C64-Wiki
Zur Navigation springenZur Suche springen
MOVE
Syntax: MOVE <zl>,<sp>,<bt>,<ho>,<zz>,<zs>
Parameter
zl: Bildschirmzeile (0..24)
sp: Bildschirmspalte (0..39)
bt: Breite (1..40)
ho: Höhe (1..25)
zz: Zielzeile (0..24)
zs: Zielspalte (0..39)
Einordnung
Typ: Anweisung
Kontext: Bildschirmkontrolle
Aufgabe: Umkopieren eines Bildschirmbereichs
Abkürzung: keine (TSB: mO)
Token: $64 $0f (100 15)
Verwandte Befehle
FCHR - FILL - FCOL - INV - COLOUR


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort MOVE.

Typ: Anweisung
Syntax: MOVE <zl>,<sp>,<bt>,<ho>,<zz>,<zs>

MOVE dient dazu, Bereiche des Textbildschirms inklusive der Farben an eine andere Stelle des Textbildschirms (definiert durch <zz> und <zs>) zu kopieren.

Nützlich, um ohne großen Aufwand eine symmetrische Bildschirmgestaltung zu erzeugen.

Bei Über- oder Unterschreitung der zulässigen Werte (siehe Box) meldet der Interpreter die Fehlermeldung ?BAD MODE ERROR.

Beachten: Die beiden letzten Parameter des Befehls (Zielzeile und Zielspalte) dürfen nur durch Konstanten angegeben werden. Der Interpreter wertet Variablen an dieser Stelle falsch aus, so dass unvorhersehbare Werte entstehen. Dieser Mangel ist unter TSB behoben.

Problem bei überlappendem Quell- und Zielbereich[Bearbeiten | Quelltext bearbeiten]

Liegt der Zielbereich tiefer als der Quellbereich und überlappt ihn gleichzeitig, so erhält man eine fehlerhafte Ausgabe. Dies liegt daran, dass die MOVE-Routine den Bildschirmbereich zeilenweise von oben nach unten abarbeitet, so dass in diesem Problemfall ein Teil des Quellbereiches vom Zielbereich überschrieben wird. Die Ausgabe des Beispiels "Move-Problem" zeigt einen solchen Fall, wobei der fehlerhafte Bereich durch invertierte Anzeige markiert wird.

Die Lösung des Problems besteht darin, dass die Zeilen einzeln von unten nach oben kopiert werden. Das Beispiel "Move-Problem mit TSB gelöst" benutzt die Möglichkeit, die Zielparameter in Variablen anzugeben und ist daher nur in TSB lauffähig.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Demonstration[Bearbeiten | Quelltext bearbeiten]

100 PRINT CHR$(147)
110 COLOUR 0,13: X=14: RV$=CHR$(18): SC$=CHR$(144): GR$=CHR$(152)
115 ST$=RV$+SC$+":"+GR$+"{11*space}"+SC$+":": RR=39-LEN(ST$)+4
120 FILL 0,0,40,1,160,5: MOVE 0,0,40,1,24,0
125 FILL 0,0,1,25,160,5: MOVE 0,0,1,25,0,39
130 REPEAT: X=X+RND(1)*2-1: GET X$
140 IF X<1 THEN X=1
150 IF X>RR THEN X=R
160 DOWNB 1,1,38,23
170 PRINT AT(X,1) ST$
180 UNTIL X$>""

Erzeugt eine sich windende Straße, Abbruch per Tastendruck. MOVE vervollständigt hier den Rahmen ums Bild.

Move-Problem[Bearbeiten | Quelltext bearbeiten]

Fehlerhafte Ausgabe

100 COLOUR 14,15:POKE646,0
110 PRINTCHR$(147);CSET 0
120 B$=CHR$(194):S$=DUP(CHR$(192),12)
130 O$=CHR$(213)+S$+CHR$(201):U$=CHR$(202)+S$+CHR$(203)
140 X=5:Y=5:B=14:H=6:F=1
150 PRINT"MOVE PROBLEM MIT SICH UEBERLAPPENDEM"
160 PRINT"QUELL- UND ZIELBEREICH."
170 PAUSE1
180 EXEC FENSTER
190 PAUSE2
200 MOVE Y,X,B,H,7,10
210 FOR I=0 TO 5
220 INV 9,15,9,4:PAUSE2
230 NEXT
240 PRINT:END
250 REM **********
260 PROC FENSTER
270 REM **********
280 POKE646,F:REM WEISSE SCHRIFT
290 PRINTAT(X,Y)O$
300 PRINTAT(X,Y+1)B$"DIES IST EIN"B$
310 PRINTAT(X,Y+2)B$"TEXTFENSTER."B$
320 PRINTAT(X,Y+3)B$"GLEICH WIRD "B$
330 PRINTAT(X,Y+4)B$"ES KOPIERT. "B$
340 PRINTAT(X,Y+5)U$
350 PAUSE1:POKE646,0
360 END PROC

Move-Problem mit TSB gelöst

100 COLOUR 14,15:POKE646,0
110 CLS: CSET 0
120 B$=CHR$(194):S$=DUP(CHR$(192),12)
130 O$=CHR$(213)+S$+CHR$(201):U$=CHR$(202)+S$+CHR$(203)
140 X=5:Y=5:B=14:H=6:X1=7:Y1=10:F=1
150 XB=X+H:DX=X1-X
160 PRINT"MOVE PROBLEM MIT SICH UEBERLAPPENDEM"
170 PRINT"QUELL- UND ZIELBEREICH IN TSB."
180 PAUSE1
190 FENSTER
200 PAUSE2
210 ROWMOVE
220 PAUSE2:PRINT:END
230 REM **********
240 PROC FENSTER
250 REM **********
260 POKE646,F:REM WEISSE SCHRIFT
270 PRINTAT(X,Y)O$
280 PRINTAT(X,Y+1)B$"DIES IST EIN"B$
290 PRINTAT(X,Y+2)B$"TEXTFENSTER."B$
300 PRINTAT(X,Y+3)B$"GLEICH WIRD "B$
310 PRINTAT(X,Y+4)B$"ES KOPIERT. "B$
320 PRINTAT(X,Y+5)U$
330 PAUSE1:POKE646,0
340 END PROC
350 REM **********
360 PROC ROWMOVE
370 REM **********
380 FOR I=XB TO H-1 STEP -1
390 MOVE I,Y,B,1,DX+I,Y1
400 NEXT
410 END PROC 

Weblinks[Bearbeiten | Quelltext bearbeiten]