/*****************
 **  LISTING 2  **
 *****************
 *
 * $VER: Render_Amiga_Lock.ifx.pre 2.5 (26.02.96)
 *
 * Autor:       Thomas Krehbiel
 * Modyfikacje: Tadeusz Talar          (2.08.96)
 *
 * Generowanie w wybranym trybie graficznym Amigi.
 *
 * MODYFIKACJA:
 * Opcjonalne "zablokowanie" wskazanego zakresu kolorów w generowanej
 * palecie barw dla obrazków generowanych w trybie 2-256 kolorów.
 *
 * Parametry wejôciowe:
 *    Word(Arg(1),1) = Numer klatki w sekwencji [ Sequence number ]
 *    Word(Arg(1),2) = Iloôę klatek w sekwencji [ Total number of frames (N) ]
 *
 * Wartoôci zwracene przez makrodefinicjë:
 *    0		jeôli wszystko jest O.K.
 *  inna		w przypadku wystâpienia bîëdu
 *
 */

OPTIONS RESULTS

base = 'Autofx_Lock_'

dithtype = GETCLIP(base||'DithType')
dithdir  = GETCLIP(base||'DithDir')
ditherr  = GETCLIP(base||'DithErr')
ncolors  = GETCLIP(base||'Colors')
monitor  = GETCLIP(base||'Monitor')
horiz	   = GETCLIP(base||'Horiz')
vert	   = GETCLIP(base||'Vert')


/* Pobranie z CLIP'u Arexx'a liczby okreôlajâcej rodzaj
 * blokowania kolorów.
 */

lockpal  = GETCLIP(base||'LockPal')


/* Pobranie z odpowiednich CLIP'ów Arexx'a numeru pierwszej
 * i ostatniej pozycji zakresu kolorów blokowanych w palecie
 */

lockfcol = GETCLIP(base||'LockFCol')
locklcol = GETCLIP(base||'LockLCol')


IF dithtype = "" THEN dithtype = 1
IF dithdir  = "" THEN dithdir  = 2
IF ditherr  = "" THEN ditherr  = 0
IF ncolors  = "" THEN ncolors  = 7
IF monitor  = "" THEN monitor  = 0
IF horiz    = "" THEN horiz    = 1
IF vert     = "" THEN vert     = 1

IF lockpal  = "" THEN lockpal  = 0
IF lockfcol = "" THEN lockfcol = 0
IF locklcol = "" THEN locklcol = 0

Gadget.1 = 'CYCLE 100  5 90 12 "Dither:"' dithtype '"None/Floyd/FloydR/EDD/Order"'
Gadget.2 = 'CYCLE 200  5 90 12 " "' dithdir '"L-to-R/R-to-L/ZigZag"'
Gadget.3 = 'CYCLE 300  5 90 12 " "' ditherr '"None/Low/Medium/High"'
Gadget.4 = 'CYCLE 300 20 90 12 "Colors:"' ncolors '"2/4/8/16/32/64/128/256/HAM/HAM8"'
Gadget.5 = 'CYCLE 100 34 90 12 "Mode:"' monitor '"Default/NTSC/PAL/VGA/Euro36/Euro72/Super72/DBLNTSC/DBLPAL"'
Gadget.6 = 'CYCLE 200 34 90 12 " "' horiz '"Lores/Hires/S-Hires"'
Gadget.7 = 'CYCLE 300 34 90 12 " "' vert '"No Lace/Lace"'
Gadget.8 = 'CYCLE 200 50 90 12 "Lock Colors:"' lockpal '"None/Palette/Range"'
Gadget.9 = 'END'

NewComplexRequest '"Amiga Render Module Settings"' Gadget 410 70
IF rc ~= 0 THEN EXIT rc

dithtype = result.1
dithdir  = result.2
ditherr  = result.3
ncolors  = result.4
monitor  = result.5
horiz	 = result.6
vert	 = result.7
lockpal  = result.8

colorarray.0 = 2
colorarray.1 = 4
colorarray.2 = 8
colorarray.3 = 16
colorarray.4 = 32
colorarray.5 = 64
colorarray.6 = 128
colorarray.7 = 256
colorarray.8 = 'HAM'
colorarray.9 = 'HAM8'

monarray.0 = 'DEFAULT'
monarray.1 = 'NTSC'
monarray.2 = 'PAL'
monarray.3 = 'VGA'
monarray.4 = 'EURO36'
monarray.5 = 'EURO72'
monarray.6 = 'SUPER72'
monarray.7 = 'DBLNTSC'
monarray.8 = 'DBLPAL'

horzarray.0 = 'LORES'
horzarray.1 = 'HIRES'
horzarray.2 = 'SUPERHI'

vertarray.0 = 'NOLACE'
vertarray.1 = 'LACE'


/* Sprawdzenie czy wybrano blokowanie zakresu kolorów oraz czy tryb
 * renderowania nie jest typu HAM lub HAM8, jeôli obydwa warunki sâ
 * speînione wyôwietlony jest panel deklaracji zakresu blokowanych
 * kolorów.
 */

IF (lockpal=2)&(~((ncolors=8)|(ncolors=9))) THEN
 DO
  limit=colorarray.ncolors-1
  Gadget.1 = 'SLIDER 100 5 256 15 "FirstColor ?"' lockfcol 0 limit '%-3ld'
  Gadget.2 = 'SLIDER 100 25 256 15 " LastColor ?"' locklcol 0 limit '%-3ld'
  Gadget.3 = 'END'

  NewComplexRequest '"Specify range of locked colors"' Gadget 410 50
  IF rc ~= 0 THEN EXIT rc

  lockfcol = result.1
  locklcol = result.2
  IF lockfcol>locklcol THEN
		DO
		 s=lockfcol
		 lockfcol=locklcol
		 locklcol=s
		END
  END
/* ------------------------------------------------------------------- */


origcolors = ncolors

IF ncolors = 8 THEN DO
   ncolors = 3
   hname = 'HAM'
   END
ELSE IF ncolors = 9 THEN DO
   ncolors = 5
   hname = 'HAM'
   END
ELSE
   hname = horzarray.horiz

SetRender Amiga
IF rc ~= 0 THEN EXIT rc

Render 'Colors' colorarray.ncolors
Render 'Dither' dithtype dithdir ditherr
Render 'Mode' hname vertarray.vert monarray.monitor

CALL SETCLIP(base||'DithType', dithtype)
CALL SETCLIP(base||'DithDir', dithdir)
CALL SETCLIP(base||'DithErr', ditherr)
CALL SETCLIP(base||'Colors', origcolors)
CALL SETCLIP(base||'Monitor', monitor)
CALL SETCLIP(base||'Horiz', horiz)
CALL SETCLIP(base||'Vert', vert)


/* Zapis w CLIP'ie Arexx'a liczby okreôlajâcej rodzaj blokowania kolorów */

CALL SETCLIP(base||'LockPal', lockpal)


/* Zapis w odpowiednich CLIP'ach Arexx'a numeru pierwszej
   i ostatniej pozycji zakresu kolorów blokowanych w palecie */

CALL SETCLIP(base||'LockFCol', lockfcol)
CALL SETCLIP(base||'LockLCol', locklcol)

EXIT
