/* Personal Paint Amiga Rexx script - Copyright � 1995-1998 Cloanto Italia srl */

/* $VER: FramesToAnim.pprx 1.3 */

/** ENG
  This script converts a set of separate image-files into an animation.
  The files must contain at least one numerical character.
  The sequence of numerical characters is used as frame counter
  (e.g.: if "Frame 0001.gif" is selected, this script tries to load it,
  then "Frame 0002.gif", and so on).
*/

/** DEU
  Dieses Skript dient zur Umwandlung einer Reihe von Einzelbildern in eine
  Animation. Wenn der Stamm des Dateinamens eine oder mehrere
  aufeinanderfolgende Zahlen enth�lt, werden diese zur Speicherung der
  Einzelbildnummer verwendet. Beispiel:  "Animation_000.pic" wird zu
  "Animation_001.pic", "Animation_002.pic", usw. Die Nummer des ersten
  Einzelbilders l��t sich individuell festlegen.
*/

/** ITA
  Questo script crea un'animazione partendo da un insieme di file di
  immagini separate. I file devono contenere almeno un carattere numerico.
  La sequenza di caratteri numerici viene usata come contatore di fotogrammi
  (es.: selezionando "Frame 0001.gif", lo script legge questo file,
  quindi "Frame 0002.gif", e cosi' via).
*/

IF ARG(1, EXISTS) THEN
	PARSE ARG PPPORT
ELSE
	PPPORT = 'PPAINT'

IF ~SHOW('P', PPPORT) THEN DO
	IF EXISTS('PPaint:PPaint') THEN DO
		ADDRESS COMMAND 'Run >NIL: PPaint:PPaint'
		DO 30 WHILE ~SHOW('P',PPPORT)
			 ADDRESS COMMAND 'Wait >NIL: 1 SEC'
		END
	END
	ELSE DO
		SAY "Personal Paint could not be loaded."
		EXIT 10
	END
END

IF ~SHOW('P', PPPORT) THEN DO
	SAY 'Personal Paint Rexx port could not be opened'
	EXIT 10
END

ADDRESS VALUE PPPORT
OPTIONS RESULTS
OPTIONS FAILAT 10000

Get 'LANG'
IF RESULT = 1 THEN DO		/* Deutsch */
	txt_req_sel       = 'Erstes Bild der Sequenz angeben'
	txt_err_badname   = 'Ung�ltiger Name'
	txt_err_abort     = 'Ladevorgang wurde abgebrochen'
	txt_err_load      = 'Fehler beim Laden: '
	txt_err_oldclient = 'F�r dieses Skript_ist eine neuere Version_von Personal Paint erforderlich'
END
ELSE IF RESULT = 2 THEN DO	/* Italiano */
	txt_req_sel       = 'Selezionare primo fotogramma'
	txt_err_badname   = 'Nome fotogramma non valido'
	txt_err_abort     = 'Operazione annullata'
	txt_err_load      = 'Errore nella lettura: '
	txt_err_oldclient = 'Questa procedura richiede_una versione pi� recente_di Personal Paint'
END
ELSE DO				/* English */
	txt_req_sel       = 'Select First Frame of Sequence'
	txt_err_badname   = 'Invalid frame name'
	txt_err_abort     = 'User abort during load'
	txt_err_load      = 'Error during load: '
	txt_err_oldclient = 'This script requires a newer_version of Personal Paint'
END

Version 'REXX'
rexxversion = RESULT
IF rexxversion < 7 THEN DO
	RequestNotify 'PROMPT "'txt_err_oldclient'"'
	EXIT 10
END

IF rexxversion < 4 THEN DO
	FreeBrush
	IF RC ~= 0 THEN
		EXIT RC
	bshfname = 'T:pprx_bsh.'PRAGMA('ID')
	IF OPEN(bshfile, bshfname, 'W') THEN DO
		WRITECH(bshfile, '464F524D 0000002A 494C424D 424D4844 00000014 00010001 00000000 01020100 00001010 028001E0 424F4459 00000002 FF00'X)
		CALL CLOSE(bshfile)
		LoadBrush bshfname 'FORCE'
	END
END

LockGUI
RequestFile '"'txt_req_sel'"'
IF RC = 0 THEN DO
	errcode = 0
	ndigits = 0
	loadname = RESULT

	fnpos = MAX(LASTPOS('/', loadname), LASTPOS(':', loadname), 1)

	npos1 = VERIFY(loadname, '0123456789', 'M', fnpos)
	IF npos1 > 0 THEN DO
		ndigits = 1
		fnlen = LENGTH(loadname)
		DO npos = npos1 + 1 TO fnlen
			IF VERIFY(loadname, '0123456789', 'M', npos) = npos THEN
				ndigits = ndigits + 1
			ELSE
				LEAVE
		END
	END

	IF ndigits = 0 THEN DO
		errmess = txt_err_badname
		errcode = 1000
	END
	ELSE DO
		name1 = SUBSTR(loadname, 2, npos1 - 2)
		name2 = SUBSTR(loadname, npos1 + ndigits, fnlen - npos1 - ndigits)
		fnum = SUBSTR(loadname, npos1, ndigits)

		DO FOREVER
			AddFrames		/* add one frame */
			SetFramePosition 'NEXT'
			fname = name1 || RIGHT(fnum, ndigits, "0") || name2
			LoadImage '"'fname'" FORCE QUIET'
			IF RC ~= 0 THEN DO
				IF RC = 5 THEN
					errmess = txt_err_abort
				ELSE IF RC ~= 36 THEN
					errmess = txt_err_load || RC

				IF RC ~= 36 THEN errcode = RC

				DeleteFrames	/* delete current (unused) frame */
				OptimizeAnimation 'QUIET'
				LEAVE
			END
			fnum = fnum + 1
		END
	END
	IF errcode > 0 THEN
		RequestNotify 'PROMPT "'errmess'"'
END
UnlockGUI

IF rexxversion < 4 THEN DO
	FreeBrush 'FORCE'
	ADDRESS COMMAND 'Delete >NIL: 'bshfname
END