ColorCycling in Pascal Hier direkt alle ntigen Prozeduren, um das Colocycling in Pas- cal zu ermglichen: USES CRT; PROCEDURE GetPal(ErsteFarbe,LetzteFarbe : BYTE; VAR Pal); VAR Farbe,RGB : BYTE; PalPointer : ^BYTE; BEGIN PalPointer := @Pal; {PalPointer auf Pal setzen} FOR Farbe := ErsteFarbe TO LetzteFarbe DO BEGIN PORT[$3C7] := Farbe; FOR RGB := 1 TO 3 DO BEGIN PalPointer^ := PORT[$3C9]; Inc(PalPointer); {Aufs nchste Element zeigen} END; END; END; PROCEDURE SetPal(ErsteFarbe,LetzteFarbe : BYTE; VAR Pal); VAR Farbe,RGB : BYTE; PalPointer : ^BYTE; BEGIN WHILE PORT[$3DA] AND 8 = 0 DO; {Vertikalen Retrace abwarten} PalPointer := @Pal; {PalPointer auf Pal setzen} FOR Farbe := ErsteFarbe TO LetzteFarbe DO BEGIN PORT[$3C8] := Farbe; FOR RGB := 1 TO 3 DO BEGIN PORT[$3C9] := PalPointer^; Inc(PalPointer); END; END; END; PROCEDURE CyclePalette(ErsteFarbe,LetzteFarbe : BYTE); VAR Pal : ARRAY[1..768] OF BYTE; Hilfe : ARRAY[1..3] OF BYTE; Farbe : WORD; BEGIN WHILE NOT KeyPressed DO BEGIN GetPal(ErsteFarbe,LetzteFarbe,Pal); Hilfe[1] := Pal[ErsteFarbe]; Hilfe[2] := Pal[ErsteFarbe+1]; Hilfe[3] := Pal[ErsteFarbe+2]; FOR Farbe := ErsteFarbe+1 TO (LetzteFarbe+1)*3 DO Pal[Farbe-3] := Pal[Farbe]; Pal[(LetzteFarbe+1)*3-2] := Hilfe[1]; Pal[(LetzteFarbe+1)*3-1] := Hilfe[2]; Pal[(LetzteFarbe+1)*3 ] := Hilfe[3]; SetPal(ErsteFarbe,LetzteFarbe,Pal); END; END; Mit diesen Prozeduren kann man die Palette beliebig rotieren lassen, allerdings nur linksherum. Es drfte aber nicht schwer fallen, das ganze auch auf rechts umzustellen. Man kann auch nur 'Ausschnitte' der Farbpalette rotieren lassen. Also nur die Farben von 100-200 zum Beispiel. Die Farbpalette wird in der Variablen Pal gespeichert - einem 768 Byte groem Puffer. In Pascal ist es mglich, Referenzpara- meter zu bergeben (Procedure xy(VAR Referenzparameter);), ohne den Typ anzugeben. So kann man auch Felder bergeben (in TP7 ist dies ohnehin mglich). Allerdings kann man dann spter nicht mehr mit FELD[xy] auf bestimmte Feldelemente zugreifen. Macht aber nichts. Ich benutze dann einfach einen Zeiger, der das Feld fr mich adressiert. Daher setze ich erst den Zeiger auf die Adresse der Palette (mit PalPointer = @Pal) und erhhe danach dann immer die Adresse des Zeigers, wenn ich das nchste Element haben will. Naja, der Rest drfte klar sein. In SetPal verfahre ich genauso, nur, da ich die RGB-Werte halt eintrage und nicht auslese. Auerdem frage ich hier noch den vertikalen Strahlenrcklauf ab (sonst gibt's Schnee!). Wahrscheinlich geht das Ganze noch einfacher (zumindest in TP7). Aber so funktioniert es schlielich auch. Solltet Ihr allerdings eine wesentlich einfachere Mglichkeit gefunden haben: immer her damit! Kemil