home *** CD-ROM | disk | FTP | other *** search
- /* Personal Paint Amiga Rexx script - Copyright © 1996 Cloanto Italia srl */
-
- /* $VER: LoadAnimGif.pprx 1.3 */
-
- /** ENG
- This script loads a GIF animation, and then either displays it with the
- proper timing, or converts it into an IFF anim-brush (if the "Anim-Brush"
- option is selected).
-
- GIF animation features such as frame-by-frame timing, multiple palettes,
- control blocks, offsets and overlays are supported. Multiple transparencies
- are not supported.
- */
-
- /** DEU
- Mit Hilfe dieses Skripts läßt sich eine GIF-Animation laden und dann
- entweder mit dem korrekten Timing anzeigen oder in einen IFF-Anim-Brush
- konvertieren (sofern die Option "Anim-Brush" aktiviert ist).
-
- Merkmale von GIF-Animationen, wie frameweises Timing, unterschiedliche
- Paletten, Control Blocks, Offsets und Overlays werden unterstützt.
- Unterschiedliche Transparenzwerte werden nicht unterstützt.
- */
-
- 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_title_req = 'GIF-Anim-Brush laden'
- txt_gad_absh = 'Anim-_Brush:'
- txt_err_oldclient = 'Für dieses Skript_ist eine neuere Version_von Personal Paint erforderlich'
- txt_err_oldlib = 'Für dieses Skript ist eine neuere Version_der GIF library erforderlich'
- txt_err_load = 'Fehler beim Laden'
- txt_err_notagif = 'Die ausgewählte Datei enthält keine GIF-Animation'
- txt_err_notsupp = 'Das ausgewählte Animationsformat kann nicht geladen werden.'
- txt_err_scrfmt = 'Bildschirmformat kann nicht benutzt werden'
- END
- ELSE IF RESULT = 2 THEN DO /* Italiano */
- txt_title_req = 'Leggere Anim-brush GIF'
- txt_gad_absh = 'Anim-_Brush:'
- txt_err_oldclient = 'Questa procedura richiede_una versione più recente_di Personal Paint'
- txt_err_oldlib = 'Questa procedura richiede_una versione più recente_della libreria GIF'
- txt_err_load = 'Errore nelle lettura del file'
- txt_err_notagif = 'Il file selezionato_non contiene un''animazione GIF'
- txt_err_notsupp = 'Il tipo di animazione non può essere letto'
- txt_err_scrfmt = 'Il formato di schermo non può essere utilizzato'
- END
- ELSE DO /* English */
- txt_title_req = 'Load GIF Anim-Brush'
- txt_gad_absh = 'Anim-_Brush:'
- txt_err_oldclient = 'This script requires a newer_version of Personal Paint'
- txt_err_oldlib = 'This script requires a newer_version of the GIF library'
- txt_err_load = 'Load error'
- txt_err_notagif = 'The selected file_does not contain_a GIF animation'
- txt_err_notsupp = 'The selected animation type_cannot be loaded'
- txt_err_scrfmt = 'The screen format cannot be set'
- END
-
- Version 'REXX'
- IF RESULT < 7 THEN DO
- RequestNotify 'PROMPT "'txt_err_oldclient'"'
- EXIT 10
- END
-
- LockGUI
- RequestFile '"'txt_title_req'"'
- IF RC = 0 THEN DO
- gfile = RESULT
- getbsh = LoadSet('GetBsh', 1)
-
- Request '"'txt_title_req'" "CHECK = ""'txt_gad_absh'"", 'getbsh'"'
- IF RC = 0 THEN DO
- getbsh = RESULT.1
- CALL SaveSet('GetBsh', getbsh)
- frame = 1
- loop = -1
- delays = ''
- err_msg = ''
- setup = 1
-
- Get 'GCLIP'
- saveclip = RESULT
- Set '"GCLIP=0"'
-
- DO FOREVER
- LoadBrush gfile 'QUIET NOPROGRESS FORMAT "GIF" OPTIONS "FRAME='frame'"'
- IF RC = 0 THEN DO
- IF setup THEN DO
- setup = 0
- SwitchEnvironment
- FreeEnvironment 'QUERY'
- IF RC ~= 0 THEN
- LEAVE
- DeleteFrames 'ALL FORCE'
- SetPen 'BACKGROUND 0'
- ClearImage
- GetBrushAttributes 'COLORS'
- cnum = RESULT
- GetBrushAttributes 'WIDTH'
- brushw = RESULT
- GetBrushAttributes 'HEIGHT'
- brushh = RESULT
- IF SetScreenFormat(brushw, brushh, cnum, 1) ~= 0 THEN DO
- IF SetScreenFormat(brushw, brushh, cnum, 0) ~= 0 THEN DO
- err_msg = txt_err_scrfmt
- LEAVE
- END
- END
- GetBrushAttributes 'TRANSPARENCY'
- transp = RESULT
- GetBrushAttributes 'TRANSPARENTCOLOR'
- transpcol = RESULT
- SetPen 'BACKGROUND' transpcol
- ClearImage
- AddFrames
- END
- ELSE DO
- GetBrushAttributes 'TRANSPARENCY'
- transp2 = RESULT
- GetBrushAttributes 'TRANSPARENTCOLOR'
- transpcol2 = RESULT
- IF transp2 ~= transp | transpcol2 ~= transpcol THEN DO
- err_msg = txt_err_notsupp
- LEAVE
- END
- END
- UseBrushPalette
- SetPaintMode 'REPLACE'
- SetBrushAttributes 'HANDLEX 0 HANDLEY 0'
- PutBrush 0 0
-
- GetBrushInfo 'ANNOTATION'
- IF RC = 0 THEN DO
- PARSE VALUE RESULT WITH 'LOOP ' loop ' DELAY ' delay .
- IF DATATYPE(delay, 'W') THEN DO
- delays = delays delay
- ticks = TRUNC(delay / 100 * 60 + 0.5)
- SetFrameDelay ticks
- END
- END
-
- AddFrames
- SetFramePosition 'NEXT'
- frame = frame + 1
- END
- ELSE DO
- IF RC = 38 | (RC = 39 & frame <= 2) THEN
- err_msg = txt_err_notagif
- ELSE IF RC = 47 THEN
- err_msg = txt_err_oldlib
- ELSE IF RC ~= 39 THEN
- err_msg = txt_err_load
- LEAVE
- END
- END
-
- annot = ''
- LoadBrush gfile 'QUIET NOPROGRESS' /* reset to normal load (AUTO) */
- IF RC = 0 THEN DO
- GetBrushInfo 'ANNOTATION'
- IF RC = 0 THEN
- annot = RESULT
- END
- FreeBrush 'FORCE'
- DeleteFrames
-
- IF err_msg ~= '' THEN DO
- RequestNotify 'PROMPT "'err_msg'"'
- FreeEnvironment 'FORCE'
- END
- ELSE DO
- SetFramePosition 1
- IF RC = 0 THEN DO
- IF getbsh THEN DO
- Get 'TRANSP'
- sv_transp = RESULT
-
- IF transp = 1 THEN
- Set '"TRANSP=' transp '"'
- ELSE
- Set '"TRANSP=0"'
- GetFrames
- DefineBrush 0 0 brushw-1 brushh-1 RESULT
- IF RC = 0 THEN DO
- FreeEnvironment 'FORCE'
- SetBrushInfo 'ANNOTATION "LOOP' loop 'DELAY' delays'"'
- IF annot ~= '' THEN DO
- pos = 1
- DO FOREVER
- pos = INDEX(annot, '"', pos)
- IF pos = 0 THEN
- BREAK
- annot = INSERT('"', annot, pos)
- pos = pos + 2
- END
- SetBrushInfo 'COPYRIGHT "'annot'"'
- END
- END
-
- Set '"TRANSP=' sv_transp '"'
- END
- ELSE Play 'FORCE'
- END
- END
- Set '"GCLIP='saveclip'"'
- END
- END
- UnlockGUI
-
- EXIT 0
-
-
-
-
- SetScreenFormat: PROCEDURE
-
- width = ARG(1)
- height = ARG(2)
- cnum = ARG(3)
-
- IF ARG(4) ~= 0 THEN
- GetBestVideoMode width height cnum 'ANIMATION'
- ELSE
- GetBestVideoMode width height cnum
-
- IF RC = 0 THEN DO
- PARSE VAR RESULT scrd scrw scrh
- Set '"IMAGEW='width'" "IMAGEH='height'" "COLORS='cnum'" "DISPLAY='scrd'" "SCREENW='scrw'" "SCREENH='scrh'" "ASCROLL=0"'
- END
-
- RETURN RC
-
-
-
-
- SaveSet: PROCEDURE
- sname = ARG(1)
- val = ARG(2)
-
- IF OPEN('settingfile', 'ENV:PP_LoadAnimGIF_'sname, 'W') THEN DO
- CALL WRITECH('settingfile', val)
- CALL CLOSE('settingfile')
- END
-
- RETURN
-
-
-
-
- LoadSet: PROCEDURE
- sname = ARG(1)
- val = ARG(2)
-
- IF OPEN('settingfile', 'ENV:PP_LoadAnimGIF_'sname, 'R') THEN DO
- val = READCH('settingfile', 65535)
- CALL CLOSE('settingfile')
- END
-
- RETURN val
-