home *** CD-ROM | disk | FTP | other *** search
/ DTP Toolbox / DTPToolbox.iso / utilities / propage_pdraw / donsgenies / adproscripts.lha / FramesToAnim.adpro < prev    next >
Encoding:
Text File  |  1994-08-17  |  7.7 KB  |  280 lines

  1. /* 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 
  2.  Bug fix, June 94 - deals with spaces in file names.
  3. Added ability to assemble test anims where not every frame is rendered - a gap of up to 30 frames is allowed by default.
  4. 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. */
  5.  
  6. /* $VER: FramesToAnimWYW.adpro July23 94  */
  7.  
  8. trace r
  9. call open("STDERR","ram:trace","W")
  10.  
  11. maxfiles = 2000 /* safety limit to stop runaways */
  12.  
  13. options results
  14. address "ADPro"
  15.  
  16. lformat "UNIVERSAL"
  17. sformat "ANIM"
  18.  
  19. render_type
  20. colours = ADPro_result
  21. screen_type
  22. stype = ADPro_result
  23. gamma
  24. gammasetting = ADPro_result
  25.  
  26. getfile '"Select first file of sequence..."'
  27. if rc~=0 then do
  28.     okay1 "No file selected"
  29.     exit
  30.     end
  31.  
  32. filename = ADPro_result
  33. pos1 = lastpos("/",filename)
  34. if pos1 = 0 then pos1 = lastpos(":",filename)
  35. filepath = left(filename,pos1)
  36.  
  37. pos1 = lastpos("/",filename)
  38. if pos1 = 0 then pos1 = lastpos(":",filename)
  39. justname = substr(filename,pos1+1)
  40.  
  41. /* strip off number from end of filename */
  42. do i = 1 to length(justname) /* First look for trailers such as .LBM */
  43.     trailer = right(justname,i)
  44.     if verify(trailer,"0123456789", "m") ~=0 then break
  45.     end
  46. trailer = right(trailer,length(trailer)-1)
  47. filenameshort = left(justname, length(justname)-length(trailer))
  48.  
  49. do i = 1 to length(filenameshort) /* now find the frame number */
  50.     endofname = right(filenameshort,i)
  51.     if verify(endofname,"0123456789") ~=0 then break
  52.     end
  53. numberlength = length(endofname)-1
  54.  
  55.  
  56. filenumber = substr(endofname,2)
  57. justbase = left(filenameshort,length(filenameshort)-numberlength)
  58. filebase = filepath||justbase
  59. suggestion = justbase||".anim"
  60. if right(justbase,1)="." then suggestion = justbase||"anim"
  61.  
  62. getfile '"Select destination anim..."' filepath suggestion
  63. if rc~=0 then do
  64.     okay1 "No file selected"
  65.     exit
  66.     end
  67. animfile = ADPro_result
  68.  
  69. OKAYN '"Format"' '"Select Anim Format"' '"Op5|Op8 Word|Op8 Long|Abort"'
  70. if rc=0 then exit
  71. if rc =1 then AnimFormat = "BYTE"
  72. if rc = 2 then AnimFormat = "WORD"
  73. if rc = 3 then AnimFormat = "LONG"
  74.  
  75.  
  76. okayn '"Resizing"' '"Resize the frames?"' '"No Change|Resize|Pad/Crop|Resize+Pad|Abort"'
  77. if rc = 0 then exit
  78. resize = rc
  79. paddit = 0
  80. scaleit = 0
  81.  
  82. load '"'filename'"'
  83. if rc~=0 then do
  84.     okay1 '"Could not load first frame"'
  85.     exit
  86.     end
  87. xsize
  88. width = ADPro_Result
  89. ysize
  90. height = ADPro_Result
  91.  
  92. if (resize=2|resize=4) then do
  93.     scaleit = 1
  94.     getnumber '"New image width (pixels)"' width 16 1400
  95.     if rc~=0 then do
  96.         okay1 "User aborted program"
  97.         exit
  98.         end
  99.     width = ADPro_result
  100.  
  101.     getnumber '"New image height (pixels)"' height 16 1024
  102.     if rc~=0 then do
  103.         okay1 "User aborted program"
  104.         exit
  105.         end
  106.     height = ADPro_result
  107.  
  108.     end
  109.  
  110. if (resize=3|resize=4) then do
  111.     paddit = 1
  112.     getnumber '"Background width (pixels)"' width 16 1400
  113.     if rc~=0 then do
  114.         okay1 "User aborted program"
  115.         exit
  116.         end
  117.     backwidth = ADPro_result
  118.  
  119.     getnumber '"Background height (pixels)"' height 16 1024
  120.     if rc~=0 then do
  121.         okay1 "User aborted program"
  122.         exit
  123.         end
  124.     backheight = ADPro_result
  125.  
  126.     offsetX = trunc(backwidth-width)/2
  127.     offsetY = trunc(backheight-height)/2
  128.  
  129.     getdir '"Select directory for temporary files"' '"ram:"'
  130.     if rc=10 then exit
  131.     tdirectory = ADPro_Result
  132.     if right(tdirectory,1) ~=":" then tdirectory = tdirectory||"/"
  133.  
  134.     end
  135.  
  136.  
  137. /* how long to wait for next frame to appear */
  138. waits = 25 /* default timeout (minutes) */
  139. minwaits = 0
  140. call getTimeout
  141.  
  142. /* see if user is rendering every frame */
  143. getnumber '"Frame number interval"' 1 1 30
  144. if rc~=0 then do
  145.     okay1 "User aborted program"
  146.     exit
  147.     end
  148. framegap = ADPro_result
  149. framegap = trunc(abs(framegap)) 
  150.  
  151. okayn '" "' '"Adjust Dynamic Range?"' '"Yes|No"' 
  152. dyrange = rc
  153.  
  154. okayn '" "' '"Broadcast limit?"' '"Yes|No"'
  155. brlimit = rc
  156.  
  157. okayn '" "' '"Use frame 1 palette for all frames?"' '"Yes|No"'
  158. lockit = rc
  159.  
  160. okayn '" "' '"Delete frames as they are processed?"' '"Yes|No"'
  161. delthem = rc
  162.  
  163.  
  164. /* Main processing loop */
  165.     do i = 1 to maxfiles   /* safety limit of 2000 files  */
  166.         currentnumber = right(filenumber,numberlength,"0")
  167.         nextnumber = right(filenumber+1,numberlength,"0")
  168.         fullname = filebase||currentnumber||trailer
  169.         fullname2 = filebase||nextnumber||trailer /* Next frame - we know the current frame is finished when the _next_ one appears in the directory */
  170.  
  171.         if ~exists(fullname2) then do  /* frame not yet ready */
  172.             if waits = 0 then leave i /* for pre-rendered frames */
  173.             j = 0
  174.             do k = 1 to waits*10 /* ultimate timeout */
  175.                 PAUSE 750  /* 15 secs */
  176.                 if exists(fullname2) then leave k
  177.                 j=j+1
  178.                 if j = waits then do
  179.                     MessageF= "Frame "currentnumber-1" has been processed. Do last frame now?"
  180.                     OKAYN '"Finishing off"' '"'MessageF'"' '"Yes, finish off|No, more to do"' 
  181.                     if rc~=0 then leave i
  182.                     else do
  183.                         j = 1
  184.                         waits = trunc(waits/4)
  185.                         minwaits = waits
  186.                         call getTimeout
  187.                         end
  188.                     end
  189.                 end
  190.                 
  191.             end
  192.  
  193.         load fullname
  194.         if rc ~=0 then break
  195.         if delthem ~=0 then do
  196.             address command
  197.             delete fullname
  198.             address "ADPro"
  199.             end
  200.         call processing
  201.         if lockit ~= 0 then pstatus "LOCKED"
  202.  
  203.         save animfile "IMAGE" "APPEND" "SMALLER" AnimFormat /* LONG gives Anim-8 format */
  204.         if rc~=0 then do
  205.             okay1 '"Trouble saving file "||fileame2||" frame "currentnumber'
  206.             exit
  207.             end
  208.         if numberlength = 0 then break
  209.         filenumber = filenumber+framegap
  210.         end
  211.  
  212.  
  213. load fullname
  214. if delthem ~=0 then do
  215.     address command
  216.     delete fullname
  217.     address "ADPro"
  218.     end
  219. call processing
  220. save animfile "IMAGE" "APPEND" "SMALLER" AnimFormat /* LONG gives Anim-8 format */
  221. if rc~=0 then do
  222.     okay1 '"Trouble saving file "||newname'
  223.     exit
  224.     end
  225. save animfile "IMAGE" "WRAPUP"
  226.  
  227. exit
  228. end
  229.  
  230.  
  231. /* +++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++ */
  232.  
  233. getTimeout:
  234.  
  235. getnumber '"Expected render time per frame (minutes)"' waits minwaits 300
  236. if rc~=0 then do
  237.     okay1 "User aborted program"
  238.     exit
  239.     end
  240. waits = ADPro_result
  241. waits = trunc(abs(waits)*4)  /* It checks 4 times a minute so the number of checks is 4 times the number of minutes */
  242.  
  243. return waits
  244.  
  245. /* ++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ */
  246.  
  247. processing:
  248.  
  249. abs_scale width height
  250. render_type colours   /* number of colours  */
  251. screen_type stype  /* PAL/NTSC, overscan, etc */
  252. if dyrange ~= 0 then operator "DYNAMIC_RANGE" 0 255 /* needed for VistaPro, maybe not for others */
  253. if brlimit ~=0 then operator "BROADCAST_LIMIT" "PAL" "DEFAULT_LIM"
  254. gamma gammasetting
  255. if paddit = 1 then call padder
  256. execute
  257.  
  258. return
  259.  
  260.  
  261. /* +++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++ */
  262.  
  263. padder:
  264. operator "APPLY_MAP" /* have to adjust image _before_ compositing */
  265. savename = tdirectory||"tpic"
  266. sformat "IFF"
  267. SAVE savename "RAW"
  268. sformat "ANIM"
  269. lformat "BACKDROP"
  270. LOAD "XXX" backwidth backheight "COLOR"
  271. lformat "IFF"
  272. LOAD_TYPE "COMPOSE"
  273. loadname = tdirectory||"tpic"
  274. LOAD loadname offsetX offsetY
  275. lformat "UNIVERSAL"
  276. LOAD_TYPE "REPLACE"
  277. return
  278.  
  279. /* ++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ */
  280.