/*
                          Visual FX Arexx Script
                           Written By J.L. White
                         (C)1997 Merlin's Software
*/

Options Results
address "IMAGEFX.1"
ScreenToFront
Undo Off
if exists("libs:flyer.library") then do
	TOASTERLIB="ToasterARexx.port"
	call remlib('ToasterARexx.port')
	call remlib('PROJECT_REXX_PORT')
	call addlib('PROJECT_REXX_PORT' , 0)
	call addlib(TOASTERLIB,0)
	end
call Settings()
call open TempFile,"VFXIFX:TempDrawer/"FXNum".txt",R
line = readln(TempFile)
Type = strip(line)
line = readln(TempFile)
MType = strip(line)
call close (TempFile)
j=0

TFrames = Frames
if Field = 1 then TFrames = Frames*2
do i = 1 to Frames
	call open TempFile,"RAM:VFXNums",W
	call writeln TempFile,right(i,5,'0')
	call writeln TempFile,right(Frames,5,'0')
	call close TempFile
	f=0
	Redraw Off
	FieldSet = 0
	if Padding ~= -1 & i = 1 then call PadIt(1)
	call LoadB()
	call LoadA()
	j = j+ 1
	call DoIt()
	Redraw On
	call SaveIt()
		if Field = 1 then do
			Redraw Off
			FieldSet = 1
			call LoadB()
			call LoadA()
			j = j + 1
			call DoIt()
			Redraw On
			call SaveIt()
			end 
	if Padding ~= -1 & i = Frames then call PadIt(2)
	end
	if SaveType = 0 then do
		if Padding = -1 then
			call MakeIcon(SaveName,(Frames-10))
		else
			call MakeIcon(SaveName,(Padding+(Frames-10)))
		end
	Undo On
exit


PadIt:
arg PadNum
	if (POS('FLY_1',SHOW('Ports')) = 0) then do
		Undo On
		exit
		end
     	if PadNum = 1 then do
	   if IAType = 0 then do
		do Pad = Padding to 1 by -1
			LoadBuffer PicAName Force StartA-(Pad-1)
			call Switcher(TOSW)
			call Switcher(MDV1)
			Render Go
	        	call RecordAdd(SaveName,2,6,Compression)
			end
		end
	   if IAType = 1 then do
		LoadBuffer PicAName Force 1
		call Switcher(TOSW)
		call Switcher(MDV1)
		Render Go
        	call RecordAdd(SaveName,2*Padding,6,Compression)
		end
	   if IAType = 2 then do
		LoadBuffer PicAName Force
		call Switcher(TOSW)
		call Switcher(MDV1)
		Render Go
        	call RecordAdd(SaveName,2*Padding,6,Compression)
		end
	   if IAType = 3 then do
		do Pad = Padding to 1 by -1
			LoadBuffer PicAName""right(StartA-(Pad-1),3,'0') Force
			call Switcher(TOSW)
			call Switcher(MDV1)
			Render Go
	        	call RecordAdd(SaveName,2,6,Compression)
			end
		end
	end 
	else do
	   if IBType = 0 then do
		do Pad = 1 to Padding
			LoadBuffer PicBName Force StartB+Pad+TFrames
			call Switcher(TOSW)
			call Switcher(MDV1)
			Render Go
	        	call RecordAdd(SaveName,2,6,Compression)
			end
		end
	   if IBType = 1 then do
		LoadBuffer PicBName Force 1
		call Switcher(TOSW)
		call Switcher(MDV1)
		Render Go
        	call RecordAdd(SaveName,2*Padding,6,Compression)
		end
	   if IBType = 2 then do
		LoadBuffer PicBName Force
		call Switcher(TOSW)
		call Switcher(MDV1)
		Render Go
        	call RecordAdd(SaveName,2*Padding,6,Compression)
		end
	   if IBType = 3 then do
		do Pad = 1 to Padding
			LoadBuffer PicBName""right(StartB+Pad+TFrames),3,'0') Force
			call Switcher(TOSW)
			call Switcher(MDV1)
			Render Go
	        	call RecordAdd(SaveName,2,6,Compression)
			end
		end
	end
return


LoadA:
	if (POS('FLY_1',SHOW('Ports')) = 0) then do
		Undo On
		exit
		end
	if j = TFrames then return
	if IAType = 0 then do
		LoadBuffer PicAName Force i+StartA
		end
	if IAType = 1 then do
		LoadBuffer PicAName Force 1
		end
	if IAType = 2 then do
		LoadBuffer PicAName Force
		end
	if IAType = 3 then do
		LoadBuffer PicAName""right(i+StartA,3,'0') Force
		end

return

LoadB:
	if (POS('FLY_1',SHOW('Ports')) = 0) then do
		Undo On
		exit
		end
	if j = 1 then return
	if IBType = 0 then do
		LoadBuffer PicBName Force i+StartB
		end
	if IBType = 1 then do
		LoadBuffer PicBName Force 1
		end
	if IBType = 2 then do
		LoadBuffer PicBName Force
		end
	if IBType = 3 then do
		LoadBuffer PicBName""right(i+StartB,3,'0') Force
		end
	Swap
return


SaveIt:
	if (POS('FLY_1',SHOW('Ports')) = 0) then do
		Undo On
		exit
		end
	if SaveType = 0 then do
		call Switcher(TOSW)
		call Switcher(MDV1)

		Render Go
		if Field = 1 then
	        	call RecordAdd(SaveName,1,6,Compression)
		else
	        	call RecordAdd(SaveName,2,6,Compression)
		end

	if SaveType = 1 then do
		if Field = 1 then do
			f= f + 1
			if f = 1 then
				SaveBufferAs ILBM "VFXIFX:TempDrawer/PicA"
			if f = 2 then do
				GetMain
				parse var result Name Width Height Blah
				Scale Width Height/2
				Swap
				LoadBuffer "VFXIFX:TempDrawer/PicA" Force
				Scale Width Height/2
				Hook Interlace
				SaveBufferAs ILBM SaveName""right(i,3,'0')
				f = 0
				end
			end
		else do
			SaveBufferAs ILBM SaveName""right(i,3,'0')
			end	
		end
return


DoIt:
	if j = TFrames then do
		Swap
		return
		end
	if j = 1 then do
		GetMain
		Parse Var result name width height blah
		Hmid=height/2
		Wmid=width/2
		Tot=(height*2)+(width*2)
		stp=Tot/(TFrames-2)
		edtype = Type
		IF edtype=0 THEN EdgeMode FeatherOut 4
		IF edtype=1 THEN EdgeMode FeatherOut 20
		IF edtype=2 THEN EdgeMode Normal 0
		ActiveColor 1
		DrawMode Normal
		DrawStyle Normal
		Pen 0 1
		Blend 100
		AlphaChannel Off
		FillMode Solid 0 0 0 SMOOTH
		Apos=Wmid
		Bpos=0
		Cpos=Wmid+stp
		Dpos=0
		Epos=Wmid+1
		Fpos=Hmid/2
		pt=0
		return
		end

	if MType ~= 0 then do
		Swap
		HorizFlip
		Swap
		HorizFlip
		end
	NewArea
 	AddArea Wmid Hmid
 	AddArea Apos Bpos
 	DrawStyle Normal
 	IF pt=1 THEN CALL Firstpos
 	IF pt=2 THEN CALL Secpos
 	IF pt=3 THEN CALL Tripos
 	IF pt=4 THEN CALL Fourpos
 	AddArea Cpos Dpos
 	DrawStyle RubThrough
 	FilledPoly
	CALL picker
 	DrawStyle Normal
	if MType ~= 0 then do
		HorizFlip
		end
return


Firstpos:
 AddArea width 0
Return

Secpos:
 AddArea width 0
 AddArea width height
Return

Tripos:
 AddArea width 0
 AddArea width height
 AddArea 0 height
Return

Fourpos:
 AddArea width 0
 AddArea width height
 AddArea 0 height
 Addarea 0 0
Return

picker:
  SELECT
    WHEN pt=0 THEN CALL topa
    WHEN pt=1 THEN CALL righta
    WHEN pt=2 THEN CALL bota
    WHEN pt=3 THEN CALL lefta
    WHEN pt=4 THEN CALL topb
  END
Return


topa:
   IF (Cpos+stp)>width THEN pt=1
   IF (Cpos+stp)>width THEN CALL rightone
   IF (Cpos+stp)<width THEN Cpos=Cpos+stp

Return

rightone:
   Ustp=(Cpos+stp)-width
   Nstp=stp-Ustp
   Cpos=width
   Dpos=Dpos+Nstp
Return


righta:
   IF (Dpos+stp)>height THEN pt=2
   IF (Dpos+stp)>height THEN CALL botone
   IF (Dpos+stp)<height THEN Dpos=Dpos+stp
Return

botone:
   Ustp=(Dpos+stp)-height
   Nstp=stp-Ustp
   Dpos=height
   Cpos=Cpos-Nstp
Return

bota:
   IF (Cpos-stp)<0 THEN pt=3
   IF (Cpos-stp)<0 THEN CALL leftone
   IF (Cpos-stp)>0 THEN Cpos=Cpos-stp
Return

leftone:
   Nstp=stp-Cpos
   Cpos=0
   Dpos=Dpos-Nstp
Return

lefta:
   IF (Dpos-stp)<0 THEN pt=4
   IF (Dpos-stp)<0 THEN CALL topone
   IF (Dpos-stp)>0 THEN Dpos=Dpos-stp
Return

topone:
   Nstp=stp-Dpos
   Dpos=0
   Cpos=Cpos+Nstp
Return

topb:
   IF (Cpos+stp)>Wmid THEN Cpos=Wmid
   IF (Cpos+stp)<Wmid THEN Cpos=Cpos+stp
Return


