home *** CD-ROM | disk | FTP | other *** search
Wrap
/* Program to use ADPro to resize a numbered series of pics and maybe reduce the number of colours, then save them to an anim. Will also process a single, unnumbered picture. This version includes a clever routine to extract the frame number from the middle of a filename such as BR0001.LBM Bug fix, June 94 - deals with spaces in file names. Added ability to assemble test anims where not every frame is rendered - a gap of up to 30 frames is allowed by default. This While-You-Wait version waits for the generating program (e.g. Vistapro) to produce the frames. It uses the current render screen and gamma settings, so these should be set before you start, usually by rendering a typical frame. */ /* $VER: FramesToAnimWYW.adpro July23 94 */ trace r call open("STDERR","ram:trace","W") maxfiles = 2000 /* safety limit to stop runaways */ options results address "ADPro" lformat "UNIVERSAL" sformat "ANIM" render_type colours = ADPro_result screen_type stype = ADPro_result gamma gammasetting = ADPro_result getfile '"Select first file of sequence..."' if rc~=0 then do okay1 "No file selected" exit end filename = ADPro_result pos1 = lastpos("/",filename) if pos1 = 0 then pos1 = lastpos(":",filename) filepath = left(filename,pos1) pos1 = lastpos("/",filename) if pos1 = 0 then pos1 = lastpos(":",filename) justname = substr(filename,pos1+1) /* strip off number from end of filename */ do i = 1 to length(justname) /* First look for trailers such as .LBM */ trailer = right(justname,i) if verify(trailer,"0123456789", "m") ~=0 then break end trailer = right(trailer,length(trailer)-1) filenameshort = left(justname, length(justname)-length(trailer)) do i = 1 to length(filenameshort) /* now find the frame number */ endofname = right(filenameshort,i) if verify(endofname,"0123456789") ~=0 then break end numberlength = length(endofname)-1 filenumber = substr(endofname,2) justbase = left(filenameshort,length(filenameshort)-numberlength) filebase = filepath||justbase suggestion = justbase||".anim" if right(justbase,1)="." then suggestion = justbase||"anim" getfile '"Select destination anim..."' filepath suggestion if rc~=0 then do okay1 "No file selected" exit end animfile = ADPro_result OKAYN '"Format"' '"Select Anim Format"' '"Op5|Op8 Word|Op8 Long|Abort"' if rc=0 then exit if rc =1 then AnimFormat = "BYTE" if rc = 2 then AnimFormat = "WORD" if rc = 3 then AnimFormat = "LONG" okayn '"Resizing"' '"Resize the frames?"' '"No Change|Resize|Pad/Crop|Resize+Pad|Abort"' if rc = 0 then exit resize = rc paddit = 0 scaleit = 0 load '"'filename'"' if rc~=0 then do okay1 '"Could not load first frame"' exit end xsize width = ADPro_Result ysize height = ADPro_Result if (resize=2|resize=4) then do scaleit = 1 getnumber '"New image width (pixels)"' width 16 1400 if rc~=0 then do okay1 "User aborted program" exit end width = ADPro_result getnumber '"New image height (pixels)"' height 16 1024 if rc~=0 then do okay1 "User aborted program" exit end height = ADPro_result end if (resize=3|resize=4) then do paddit = 1 getnumber '"Background width (pixels)"' width 16 1400 if rc~=0 then do okay1 "User aborted program" exit end backwidth = ADPro_result getnumber '"Background height (pixels)"' height 16 1024 if rc~=0 then do okay1 "User aborted program" exit end backheight = ADPro_result offsetX = trunc(backwidth-width)/2 offsetY = trunc(backheight-height)/2 getdir '"Select directory for temporary files"' '"ram:"' if rc=10 then exit tdirectory = ADPro_Result if right(tdirectory,1) ~=":" then tdirectory = tdirectory||"/" end /* how long to wait for next frame to appear */ waits = 25 /* default timeout (minutes) */ minwaits = 0 call getTimeout /* see if user is rendering every frame */ getnumber '"Frame number interval"' 1 1 30 if rc~=0 then do okay1 "User aborted program" exit end framegap = ADPro_result framegap = trunc(abs(framegap)) okayn '" "' '"Adjust Dynamic Range?"' '"Yes|No"' dyrange = rc okayn '" "' '"Broadcast limit?"' '"Yes|No"' brlimit = rc okayn '" "' '"Use frame 1 palette for all frames?"' '"Yes|No"' lockit = rc okayn '" "' '"Delete frames as they are processed?"' '"Yes|No"' delthem = rc /* Main processing loop */ do i = 1 to maxfiles /* safety limit of 2000 files */ currentnumber = right(filenumber,numberlength,"0") nextnumber = right(filenumber+1,numberlength,"0") fullname = filebase||currentnumber||trailer fullname2 = filebase||nextnumber||trailer /* Next frame - we know the current frame is finished when the _next_ one appears in the directory */ if ~exists(fullname2) then do /* frame not yet ready */ if waits = 0 then leave i /* for pre-rendered frames */ j = 0 do k = 1 to waits*10 /* ultimate timeout */ PAUSE 750 /* 15 secs */ if exists(fullname2) then leave k j=j+1 if j = waits then do MessageF= "Frame "currentnumber-1" has been processed. Do last frame now?" OKAYN '"Finishing off"' '"'MessageF'"' '"Yes, finish off|No, more to do"' if rc~=0 then leave i else do j = 1 waits = trunc(waits/4) minwaits = waits call getTimeout end end end end load fullname if rc ~=0 then break if delthem ~=0 then do address command delete fullname address "ADPro" end call processing if lockit ~= 0 then pstatus "LOCKED" save animfile "IMAGE" "APPEND" "SMALLER" AnimFormat /* LONG gives Anim-8 format */ if rc~=0 then do okay1 '"Trouble saving file "||fileame2||" frame "currentnumber' exit end if numberlength = 0 then break filenumber = filenumber+framegap end load fullname if delthem ~=0 then do address command delete fullname address "ADPro" end call processing save animfile "IMAGE" "APPEND" "SMALLER" AnimFormat /* LONG gives Anim-8 format */ if rc~=0 then do okay1 '"Trouble saving file "||newname' exit end save animfile "IMAGE" "WRAPUP" exit end /* +++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++ */ getTimeout: getnumber '"Expected render time per frame (minutes)"' waits minwaits 300 if rc~=0 then do okay1 "User aborted program" exit end waits = ADPro_result waits = trunc(abs(waits)*4) /* It checks 4 times a minute so the number of checks is 4 times the number of minutes */ return waits /* ++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ */ processing: abs_scale width height render_type colours /* number of colours */ screen_type stype /* PAL/NTSC, overscan, etc */ if dyrange ~= 0 then operator "DYNAMIC_RANGE" 0 255 /* needed for VistaPro, maybe not for others */ if brlimit ~=0 then operator "BROADCAST_LIMIT" "PAL" "DEFAULT_LIM" gamma gammasetting if paddit = 1 then call padder execute return /* +++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++ */ padder: operator "APPLY_MAP" /* have to adjust image _before_ compositing */ savename = tdirectory||"tpic" sformat "IFF" SAVE savename "RAW" sformat "ANIM" lformat "BACKDROP" LOAD "XXX" backwidth backheight "COLOR" lformat "IFF" LOAD_TYPE "COMPOSE" loadname = tdirectory||"tpic" LOAD loadname offsetX offsetY lformat "UNIVERSAL" LOAD_TYPE "REPLACE" return /* ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ */