MOVE
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]
- Programmbeschreibung von TSB ByPixx, einem Spiel von Arndt Dettke, mit einem Trick, der MOVE auf beliebige Speicherbereiche umlenken kann.
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE
$$ | %% | AT | CALL | CENTER | CHECK | COLD | COLOR | COPY | CLS | CSET | D! | D!PEEK | D!POKE | DIR | DISK | DISPLAY | DIV | DO | DO NULL | DRAW TO | DUMP | DUP | ELSE | ERROR | EXEC | FETCH | FIND | GRAPHICS | INSERT | INST | JOY | KEY | KEYGET | LIN | MAP | MEMCLR | MEMCONT | MEMDEF | MEMLEN | MEMLOAD | MEMOR | MEMPEEK | MEMPOS | MEMREAD | MEMRESTORE | MEMSAVE | MERGE | MOB ON/OFF | MOBCOL | MOD | MOVE | MULTI | NRM | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PLACE | RENUMBER | RESUME | RETRACE | SCRLD | SCRSV | SOUND | TEXT | TRACE | USE | WAVE | X!