&&
------------------------------------------------------------------------------
                CURSUS AMIGABASIC  -  SUBROUTINES  -  RGB-Swap
------------------------------------------------------------------------------

Deze routine verwisselt twee kleuren uit de palette. Daarmee kunt u b.v. een
kleur laten knipperen. U hoeft daarbij niet de waarden van de kleuren te
weten. De routine zoekt zelf wat de waarden zijn.

Het programma is als een SUB geschreven en heeft 2 parameters nodig. Hieronder
staat de sub met een demo waar kleuren worden verwisseld.

SYNTAX :

CALL RGBSwap (n%,m%)

n% = Het nummer van kleur 1.
m% = Het nummer van kleur 2.

Er zijn twee libraries nodig, en dus ook twee BMap-files.

VOORBEELD :

   DECLARE FUNCTION viewportaddress& LIBRARY
   DECLARE FUNCTION getrgb4& LIBRARY
   LIBRARY "graphics.library"
   LIBRARY "intuition.library"
&&
   REM Demo

   LINE (100,100)-(150,200),1,bf              :REM Een vlak tekenen.
   LINE (150,100)-(200,200),3,bf              :REM Nog een vlak.
   n%=1                                       :REM Kleur 1.
   m%=3                                       :REM Kleur 3
   PRINT "Ik ga nu 10 keer verwisselen."
   FOR I=1 TO 10                              :REM 10 Keer in een lus.
       CALL RGBSwap (n%,m%)                   :REM Verwissel de kleuren.
       FOR J=1 TO 2500 : NEXT J               :REM Wachtlus.
   NEXT I
   END                                        :REM Einde demo.

DE EIGENLIJKE SUB :

   SUB RGBSwap (n%,m%) STATIC

We moeten testen of de opgegeven kleuren niet negatief zijn en niet groter dan
het aantal kleuren dat het scherm heeft.

       IF n%<0 OR n%>WINDOW(6) THEN EXIT SUB
       IF m%<0 OR m%>WINDOW(6) THEN EXIT SUB 

Om de kleuren te kunnen vinden moeten we de kleuren-map van het scherm zien te
vinden. Deze vinden we met een ingewikkelde PEEK in het geheugen.

       cm&=PEEKL(viewportaddress&(WINDOW(7))+4)
&&
Nu kunnen we de routine GETRGB4 gebruiken om de kleuren op te zoeken. Deze ko-
men als 2 bytes met als hex-waarde 0XXX. De drie X-en staan voor de waardes
Rood, Groen en Blauw. We moeten die uit de bytes halen met wat kommando's.

       rgb=getrgb4&(cm&,n%)                   :REM Pak de kleuren.
       r1%=INT(rgb/2^8)                       :REM De ROOD-waarde.
       rgb=rgb MOD 2^8
       g1%=INT(rgb/2^4)                       :REM De GROEN-waarde.
       b1%=rgb MOD 2^4                        :REM De BLAUW-waarde.

Dit moeten we natuurlijk herhalen voor de tweede kleur.

       rgb=getrgb4&(cm&,m%)
       r2%=INT(rgb/2^8)
       rgb=rgb MOD 2^8
       g2%=INT(rgb/2^4)
       b2%=rgb MOD 2^4

Nu de twee palette-kommando's de de kleuren verwisselen.

       PALETTE n%,r2%/15,g2%/15,b2%/15
       PALETTE m%,r1%/15,g1%/15,b1%/15
   END SUB

Het programma staat op diskette onder de naam RGBSwap in de Basic-directory.

- EINDE ----------------------------------------------------------------------
&&
