RFX-GIMP

Hex Artifact Content
Login

Artifact 289c9b8d3769b8d6b9d9138aa4ff47dfcddfa6f5:


0000: 53 63 72 69 70 74 20 66 69 6c 65 20 67 65 6e 65  Script file gene
0010: 72 61 74 65 64 20 66 72 6f 6d 20 4c 69 56 45 53  rated from LiVES
0020: 0a 0a 3c 64 65 66 69 6e 65 3e 0a 7c 31 2e 37 0a  ..<define>.|1.7.
0030: 3c 2f 64 65 66 69 6e 65 3e 0a 0a 3c 6e 61 6d 65  </define>..<name
0040: 3e 0a 6d 6f 74 69 6f 6e 2d 62 6c 75 72 0a 3c 2f  >.motion-blur.</
0050: 6e 61 6d 65 3e 0a 0a 3c 76 65 72 73 69 6f 6e 3e  name>..<version>
0060: 0a 31 0a 3c 2f 76 65 72 73 69 6f 6e 3e 0a 0a 3c  .1.</version>..<
0070: 61 75 74 68 6f 72 3e 0a 73 61 75 6c 67 6f 6f 64  author>.saulgood
0080: 65 7c 0a 3c 2f 61 75 74 68 6f 72 3e 0a 0a 3c 64  e|.</author>..<d
0090: 65 73 63 72 69 70 74 69 6f 6e 3e 0a 4d 6f 74 69  escription>.Moti
00a0: 6f 6e 20 62 6c 75 72 7c 4d 6f 74 69 6f 6e 20 62  on blur|Motion b
00b0: 6c 75 72 72 69 6e 67 7c 31 7c 31 7c 0a 3c 2f 64  lurring|1|1|.</d
00c0: 65 73 63 72 69 70 74 69 6f 6e 3e 0a 0a 3c 72 65  escription>..<re
00d0: 71 75 69 72 65 73 3e 0a 67 69 6d 70 0a 3c 2f 72  quires>.gimp.</r
00e0: 65 71 75 69 72 65 73 3e 0a 0a 3c 70 61 72 61 6d  equires>..<param
00f0: 73 3e 0a 62 6c 75 72 5f 6c 69 6e 65 61 72 7c 4c  s>.blur_linear|L
0100: 69 6e 65 61 72 7c 62 6f 6f 6c 7c 31 7c 31 7c 0a  inear|bool|1|1|.
0110: 62 6c 75 72 5f 72 61 64 69 61 6c 7c 52 61 64 69  blur_radial|Radi
0120: 61 6c 20 7c 62 6f 6f 6c 7c 30 7c 31 7c 0a 62 6c  al |bool|0|1|.bl
0130: 75 72 5f 7a 6f 6f 6d 7c 5a 6f 6f 6d 7c 62 6f 6f  ur_zoom|Zoom|boo
0140: 6c 7c 30 7c 31 7c 0a 62 6c 75 72 5f 6c 65 6e 67  l|0|1|.blur_leng
0150: 74 68 7c 4c 65 6e 67 74 68 7c 6e 75 6d 30 7c 35  th|Length|num0|5
0160: 7c 30 7c 35 30 30 7c 0a 62 6c 75 72 5f 61 6e 67  |0|500|.blur_ang
0170: 6c 65 7c 41 6e 67 6c 65 7c 6e 75 6d 30 7c 30 7c  le|Angle|num0|0|
0180: 30 7c 33 36 30 7c 2d 31 7c 0a 63 65 6e 74 65 72  0|360|-1|.center
0190: 5f 78 7c 58 20 43 65 6e 74 65 72 7c 6e 75 6d 30  _x|X Center|num0
01a0: 7c 30 7c 30 7c 31 30 30 30 7c 0a 63 65 6e 74 65  |0|0|1000|.cente
01b0: 72 5f 79 7c 59 20 43 65 6e 74 65 72 7c 6e 75 6d  r_y|Y Center|num
01c0: 30 7c 30 7c 30 7c 31 30 30 30 7c 0a 64 69 72 5f  0|0|0|1000|.dir_
01d0: 6f 75 74 77 61 72 64 7c 42 6c 75 72 20 4f 75 74  outward|Blur Out
01e0: 77 61 72 64 7c 62 6f 6f 6c 7c 31 7c 0a 3c 2f 70  ward|bool|1|.</p
01f0: 61 72 61 6d 73 3e 0a 0a 3c 70 61 72 61 6d 5f 77  arams>..<param_w
0200: 69 6e 64 6f 77 3e 0a 3c 2f 70 61 72 61 6d 5f 77  indow>.</param_w
0210: 69 6e 64 6f 77 3e 0a 0a 3c 70 72 6f 70 65 72 74  indow>..<propert
0220: 69 65 73 3e 0a 30 78 30 30 30 31 0a 3c 2f 70 72  ies>.0x0001.</pr
0230: 6f 70 65 72 74 69 65 73 3e 0a 0a 3c 6c 61 6e 67  operties>..<lang
0240: 75 61 67 65 5f 63 6f 64 65 3e 0a 30 78 46 30 0a  uage_code>.0xF0.
0250: 3c 2f 6c 61 6e 67 75 61 67 65 5f 63 6f 64 65 3e  </language_code>
0260: 0a 0a 3c 70 72 65 3e 0a 23 20 54 68 69 73 20 70  ..<pre>.# This p
0270: 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 20 73  rogram is free s
0280: 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e  oftware; you can
0290: 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69 74   redistribute it
02a0: 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 23   and/or modify.#
02b0: 20 69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65   it under the te
02c0: 72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47  rms of the GNU G
02d0: 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69  eneral Public Li
02e0: 63 65 6e 73 65 20 76 65 72 73 69 6f 6e 20 33 20  cense version 3 
02f0: 6f 72 20 68 69 67 68 65 72 0a 23 20 61 73 20 70  or higher.# as p
0300: 75 62 6c 69 73 68 65 64 20 62 79 20 74 68 65 20  ublished by the 
0310: 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f  Free Software Fo
0320: 75 6e 64 61 74 69 6f 6e 2e 0a 0a 75 73 65 20 49  undation...use I
0330: 4f 3a 3a 53 6f 63 6b 65 74 3b 20 0a 75 73 65 20  O::Socket; .use 
0340: 54 65 78 74 3a 3a 42 61 6c 61 6e 63 65 64 3b 0a  Text::Balanced;.
0350: 0a 69 66 20 28 24 45 4e 56 7b 27 52 46 58 47 49  .if ($ENV{'RFXGI
0360: 4d 50 5f 50 4f 52 54 27 7d 29 20 7b 0a 20 20 24  MP_PORT'}) {.  $
0370: 72 66 78 5f 70 6f 72 74 20 3d 20 24 45 4e 56 7b  rfx_port = $ENV{
0380: 27 52 46 58 47 49 4d 50 5f 50 4f 52 54 27 7d 3b  'RFXGIMP_PORT'};
0390: 0a 20 20 7d 0a 65 6c 73 65 20 7b 0a 20 20 24 72  .  }.else {.  $r
03a0: 66 78 5f 70 6f 72 74 20 3d 20 31 30 30 30 38 3b  fx_port = 10008;
03b0: 20 0a 20 20 7d 0a 0a 24 73 6f 63 6b 20 3d 20 6e   .  }..$sock = n
03c0: 65 77 20 49 4f 3a 3a 53 6f 63 6b 65 74 3a 3a 49  ew IO::Socket::I
03d0: 4e 45 54 20 28 20 50 65 65 72 41 64 64 72 20 3d  NET ( PeerAddr =
03e0: 3e 20 27 6c 6f 63 61 6c 68 6f 73 74 27 2c 20 0a  > 'localhost', .
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
0410: 65 65 72 50 6f 72 74 20 3d 3e 20 24 72 66 78 5f  eerPort => $rfx_
0420: 70 6f 72 74 2c 20 0a 20 20 20 20 20 20 20 20 20  port, .         
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0440: 20 20 20 20 20 20 50 72 6f 74 6f 20 3d 3e 20 27        Proto => '
0450: 74 63 70 27 20 0a 20 20 20 20 20 20 20 20 20 20  tcp' .          
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0470: 20 20 20 20 20 29 3b 0a 69 66 20 28 20 6e 6f 74       );.if ( not
0480: 20 64 65 66 69 6e 65 64 20 24 73 6f 63 6b 20 29   defined $sock )
0490: 20 7b 0a 20 20 6d 79 20 24 72 66 78 5f 70 69 64   {.  my $rfx_pid
04a0: 20 3d 20 66 6f 72 6b 28 29 3b 0a 20 20 69 66 20   = fork();.  if 
04b0: 28 6e 6f 74 20 64 65 66 69 6e 65 64 20 24 72 66  (not defined $rf
04c0: 78 5f 70 69 64 29 20 7b 0a 20 20 20 20 26 73 69  x_pid) {.    &si
04d0: 67 5f 65 72 72 6f 72 28 22 55 4e 41 42 4c 45 20  g_error("UNABLE 
04e0: 54 4f 20 45 58 45 43 55 54 45 20 47 49 4d 50 3a  TO EXECUTE GIMP:
04f0: 20 4e 6f 74 20 65 6e 6f 75 67 68 20 72 65 73 6f   Not enough reso
0500: 75 72 63 65 73 22 29 3b 0a 20 20 20 20 7d 20 0a  urces");.    } .
0510: 20 20 65 6c 73 69 66 20 28 24 72 66 78 5f 70 69    elsif ($rfx_pi
0520: 64 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20 69 66  d == 0) {.    if
0530: 20 28 20 2d 66 20 24 74 6d 70 64 69 72 20 2e 20   ( -f $tmpdir . 
0540: 22 72 66 78 67 69 6d 70 2e 70 69 64 22 29 20 7b  "rfxgimp.pid") {
0550: 0a 20 20 20 20 20 20 6f 70 65 6e 28 50 49 44 46  .      open(PIDF
0560: 49 4c 45 2c 20 24 74 6d 70 64 69 72 20 2e 20 22  ILE, $tmpdir . "
0570: 72 66 78 67 69 6d 70 2e 70 69 64 22 29 3b 0a 20  rfxgimp.pid");. 
0580: 20 20 20 20 20 23 20 73 68 6f 75 6c 64 20 70 72       # should pr
0590: 6f 62 61 62 6c 79 20 64 6f 20 73 6f 6d 65 20 73  obably do some s
05a0: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 66  anity checking f
05b0: 6f 72 20 74 68 65 20 6f 66 66 20 63 68 61 6e 63  or the off chanc
05c0: 65 20 74 68 61 74 0a 20 20 20 20 20 20 23 20 74  e that.      # t
05d0: 68 65 20 50 49 44 20 68 61 73 20 62 65 65 6e 20  he PID has been 
05e0: 72 65 63 79 63 6c 65 64 20 6f 72 20 74 68 65 20  recycled or the 
05f0: 73 79 73 74 65 6d 20 68 61 73 20 72 65 62 6f 6f  system has reboo
0600: 74 65 64 20 28 65 2e 67 2c 20 63 68 65 63 6b 0a  ted (e.g, check.
0610: 20 20 20 20 20 20 23 20 69 66 20 70 72 6f 63 65        # if proce
0620: 73 73 20 77 61 73 20 65 78 65 63 75 74 65 64 20  ss was executed 
0630: 77 69 74 68 20 2f 75 73 72 2f 62 69 6e 2f 70 65  with /usr/bin/pe
0640: 72 6c 2e 20 42 75 74 20 66 6f 72 20 6e 6f 77 2e  rl. But for now.
0650: 2e 2e 0a 20 20 20 20 20 20 6b 69 6c 6c 28 31 35  ...      kill(15
0660: 2c 20 2d 3c 50 49 44 46 49 4c 45 3e 29 3b 20 23  , -<PIDFILE>); #
0670: 20 74 68 65 20 6e 65 67 61 74 69 76 65 20 50 49   the negative PI
0680: 44 20 6d 65 61 6e 73 20 6b 69 6c 6c 20 61 6c 6c  D means kill all
0690: 20 63 68 69 6c 64 72 65 6e 2c 20 74 6f 6f 2e 0a   children, too..
06a0: 20 20 20 20 20 20 63 6c 6f 73 65 28 50 49 44 46        close(PIDF
06b0: 49 4c 45 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ILE);.      }.  
06c0: 20 20 73 65 74 70 67 69 64 28 24 24 2c 30 29 3b    setpgid($$,0);
06d0: 20 23 20 63 68 61 6e 67 65 20 74 68 65 20 70 67   # change the pg
06e0: 72 6f 75 70 20 74 6f 20 74 68 69 73 20 66 6f 72  roup to this for
06f0: 6b 65 64 20 70 72 6f 63 65 73 73 2c 20 72 61 74  ked process, rat
0700: 68 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20 20  her than.       
0710: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68              # th
0720: 65 20 6f 72 69 67 69 6e 61 6c 20 4c 69 56 45 53  e original LiVES
0730: 20 28 73 6f 20 74 68 61 74 20 77 65 20 64 6f 6e   (so that we don
0740: 27 74 20 6b 69 6c 6c 20 4c 69 56 45 53 20 77 68  't kill LiVES wh
0750: 65 6e 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  en .            
0760: 20 20 20 20 20 20 20 23 20 74 68 69 73 20 70 72         # this pr
0770: 67 72 6f 75 70 20 69 73 20 6b 69 6c 6c 65 64 29  group is killed)
0780: 2e 0a 20 20 20 20 6f 70 65 6e 28 50 49 44 46 49  ..    open(PIDFI
0790: 4c 45 2c 20 22 3e 22 20 2e 20 24 74 6d 70 64 69  LE, ">" . $tmpdi
07a0: 72 20 2e 20 22 72 66 78 67 69 6d 70 2e 70 69 64  r . "rfxgimp.pid
07b0: 22 29 3b 20 23 20 6f 76 65 72 77 72 69 74 65 20  "); # overwrite 
07c0: 6f 6c 64 20 66 69 6c 65 0a 20 20 20 20 70 72 69  old file.    pri
07d0: 6e 74 20 50 49 44 46 49 4c 45 20 24 24 3b 0a 20  nt PIDFILE $$;. 
07e0: 20 20 20 63 6c 6f 73 65 28 50 49 44 46 49 4c 45     close(PIDFILE
07f0: 29 3b 0a 20 20 20 20 6d 79 20 24 73 74 61 72 74  );.    my $start
0800: 5f 67 69 6d 70 20 3d 20 71 71 7b 20 67 69 6d 70  _gimp = qq{ gimp
0810: 20 2d 69 20 2d 62 20 22 28 70 6c 75 67 2d 69 6e   -i -b "(plug-in
0820: 2d 73 63 72 69 70 74 2d 66 75 2d 73 65 72 76 65  -script-fu-serve
0830: 72 20 31 20 24 72 66 78 5f 70 6f 72 74 20 5c 5c  r 1 $rfx_port \\
0840: 5c 22 5c 5c 5c 22 29 22 20 26 20 7d 3b 0a 20 20  \"\\\")" & };.  
0850: 20 20 73 79 73 74 65 6d 20 28 20 24 73 74 61 72    system ( $star
0860: 74 5f 67 69 6d 70 20 29 3b 20 23 20 74 68 6f 75  t_gimp ); # thou
0870: 67 68 20 73 74 61 72 74 65 64 20 61 73 20 73 65  gh started as se
0880: 70 61 72 61 74 65 20 70 72 6f 63 65 73 73 2c 20  parate process, 
0890: 47 49 4d 50 20 6e 6f 77 0a 20 20 20 20 20 20 20  GIMP now.       
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08b0: 20 20 20 20 20 23 20 69 73 20 70 61 72 74 20 6f       # is part o
08c0: 66 20 74 68 69 73 20 73 70 61 77 6e 65 64 20 63  f this spawned c
08d0: 68 69 6c 64 27 73 20 70 67 72 6f 75 70 2c 20 6e  hild's pgroup, n
08e0: 6f 74 20 74 68 65 20 4c 69 56 45 53 20 70 67 72  ot the LiVES pgr
08f0: 6f 75 70 0a 20 20 20 20 73 6c 65 65 70 28 29 3b  oup.    sleep();
0900: 20 23 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 66   # do nothing, f
0910: 6f 72 65 76 65 72 0a 20 20 20 20 26 73 69 67 5f  orever.    &sig_
0920: 65 72 72 6f 72 28 22 47 49 4d 50 20 6b 69 6c 6c  error("GIMP kill
0930: 65 64 20 62 79 20 65 78 74 65 72 6e 61 6c 20 70  ed by external p
0940: 72 6f 63 65 73 73 5c 6e 22 29 3b 0a 20 20 20 20  rocess\n");.    
0950: 7d 0a 20 20 65 6c 73 65 20 7b 0a 20 20 20 20 77  }.  else {.    w
0960: 68 69 6c 65 20 28 6e 6f 74 20 64 65 66 69 6e 65  hile (not define
0970: 64 20 24 73 6f 63 6b 29 20 7b 0a 20 20 20 20 20  d $sock) {.     
0980: 20 73 6c 65 65 70 20 28 31 29 3b 0a 20 20 20 20   sleep (1);.    
0990: 20 20 24 73 6f 63 6b 20 3d 20 6e 65 77 20 49 4f    $sock = new IO
09a0: 3a 3a 53 6f 63 6b 65 74 3a 3a 49 4e 45 54 20 28  ::Socket::INET (
09b0: 20 50 65 65 72 41 64 64 72 20 3d 3e 20 27 6c 6f   PeerAddr => 'lo
09c0: 63 61 6c 68 6f 73 74 27 2c 20 0a 20 20 20 20 20  calhost', .     
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09f0: 50 65 65 72 50 6f 72 74 20 3d 3e 20 24 72 66 78  PeerPort => $rfx
0a00: 5f 70 6f 72 74 2c 20 0a 20 20 20 20 20 20 20 20  _port, .        
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
0a30: 74 6f 20 3d 3e 20 27 74 63 70 27 20 0a 20 20 20  to => 'tcp' .   
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a60: 20 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20    );.      }.   
0a70: 20 7d 0a 20 20 7d 0a 0a 23 20 44 65 66 69 6e 65   }.  }..# Define
0a80: 20 61 20 50 65 72 6c 20 73 75 62 72 6f 75 74 69   a Perl subrouti
0a90: 6e 65 20 66 6f 72 20 73 65 6e 64 69 6e 67 20 6d  ne for sending m
0aa0: 65 73 73 61 67 65 73 20 74 6f 20 74 68 65 20 53  essages to the S
0ab0: 46 20 73 65 72 76 65 72 20 61 6e 64 20 77 61 69  F server and wai
0ac0: 74 69 6e 67 0a 23 20 66 6f 72 20 61 20 72 65 73  ting.# for a res
0ad0: 70 6f 6e 73 65 2e 0a 23 0a 73 75 62 20 72 66 78  ponse..#.sub rfx
0ae0: 5f 73 65 6e 64 6d 73 67 20 7b 0a 20 20 6d 79 20  _sendmsg {.  my 
0af0: 24 6d 65 73 73 61 67 65 20 3d 20 24 5f 5b 30 5d  $message = $_[0]
0b00: 3b 0a 20 20 6d 79 20 24 6c 65 6e 20 3d 20 6c 65  ;.  my $len = le
0b10: 6e 67 74 68 20 28 24 6d 65 73 73 61 67 65 29 3b  ngth ($message);
0b20: 0a 20 20 69 66 20 28 24 6c 65 6e 20 3e 20 36 35  .  if ($len > 65
0b30: 35 33 35 29 20 7b 0a 20 20 20 20 26 73 69 67 5f  535) {.    &sig_
0b40: 65 72 72 6f 72 28 22 45 52 52 4f 52 3a 20 73 63  error("ERROR: sc
0b50: 72 69 70 74 20 69 73 20 74 6f 6f 20 6c 6f 6e 67  ript is too long
0b60: 20 66 6f 72 20 6f 6e 65 20 73 65 72 76 65 72 20   for one server 
0b70: 72 65 71 75 65 73 74 3a 20 24 6c 65 6e 20 3e 20  request: $len > 
0b80: 36 35 35 33 35 22 29 3b 0a 20 20 20 20 7d 3b 0a  65535");.    };.
0b90: 20 20 23 20 73 65 6e 64 20 73 63 72 69 70 74 20    # send script 
0ba0: 74 6f 20 47 49 4d 50 0a 20 20 6d 79 20 24 68 65  to GIMP.  my $he
0bb0: 61 64 65 72 20 3d 20 70 61 63 6b 28 20 27 61 6e  ader = pack( 'an
0bc0: 27 2c 20 27 47 27 2c 20 24 6c 65 6e 29 3b 0a 20  ', 'G', $len);. 
0bd0: 20 73 79 73 77 72 69 74 65 28 20 24 73 6f 63 6b   syswrite( $sock
0be0: 2c 20 24 5f 20 29 20 66 6f 72 20 28 24 68 65 61  , $_ ) for ($hea
0bf0: 64 65 72 2c 20 24 6d 65 73 73 61 67 65 29 3b 0a  der, $message);.
0c00: 20 20 23 20 77 61 69 74 20 66 6f 72 20 72 65 73    # wait for res
0c10: 70 6f 6e 73 65 0a 20 20 6d 79 20 24 72 69 6e 20  ponse.  my $rin 
0c20: 3d 20 27 27 3b 0a 20 20 76 65 63 28 20 24 72 69  = '';.  vec( $ri
0c30: 6e 2c 20 66 69 6c 65 6e 6f 28 24 73 6f 63 6b 29  n, fileno($sock)
0c40: 2c 20 31 20 29 20 3d 20 31 3b 0a 20 20 73 65 6c  , 1 ) = 1;.  sel
0c50: 65 63 74 28 20 24 72 69 6e 2c 20 20 75 6e 64 65  ect( $rin,  unde
0c60: 66 2c 20 75 6e 64 65 66 2c 20 75 6e 64 65 66 20  f, undef, undef 
0c70: 29 3b 20 20 20 20 23 20 77 61 69 74 20 28 66 6f  );    # wait (fo
0c80: 72 65 76 65 72 29 20 66 6f 72 20 72 65 73 70 6f  rever) for respo
0c90: 6e 73 65 20 73 74 61 72 74 0a 20 20 73 65 6c 65  nse start.  sele
0ca0: 63 74 28 20 75 6e 64 65 66 2c 20 75 6e 64 65 66  ct( undef, undef
0cb0: 2c 20 75 6e 64 65 66 2c 20 2e 31 20 29 3b 20 20  , undef, .1 );  
0cc0: 20 20 20 20 20 23 20 77 61 69 74 20 61 20 62 69       # wait a bi
0cd0: 74 20 66 6f 72 20 72 65 73 70 6f 6e 73 65 20 74  t for response t
0ce0: 6f 20 66 69 6e 69 73 68 0a 20 20 20 20 20 20 20  o finish.       
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d10: 20 20 20 20 23 20 20 69 6e 63 72 65 61 73 65 20      #  increase 
0d20: 77 61 69 74 20 69 66 20 49 4e 56 41 4c 49 44 2f  wait if INVALID/
0d30: 49 4e 43 4f 4d 50 4c 45 54 45 20 52 45 53 50 4f  INCOMPLETE RESPO
0d40: 4e 53 45 20 6f 63 63 75 72 73 0a 20 20 23 20 72  NSE occurs.  # r
0d50: 65 73 70 6f 6e 73 65 0a 20 20 24 6c 65 6e 20 3d  esponse.  $len =
0d60: 20 73 79 73 72 65 61 64 28 20 24 73 6f 63 6b 2c   sysread( $sock,
0d70: 20 24 68 65 61 64 65 72 2c 20 34 20 29 20 6f 72   $header, 4 ) or
0d80: 20 26 73 69 67 5f 65 72 72 6f 72 28 22 49 4e 56   &sig_error("INV
0d90: 41 4c 49 44 20 52 45 53 50 4f 4e 53 45 3a 20 65  ALID RESPONSE: e
0da0: 6d 70 74 79 20 72 65 73 70 6f 6e 73 65 22 29 3b  mpty response");
0db0: 0a 20 20 28 20 24 6c 65 6e 20 3d 3d 20 34 20 61  .  ( $len == 4 a
0dc0: 6e 64 20 24 68 65 61 64 65 72 20 3d 7e 20 2f 5e  nd $header =~ /^
0dd0: 47 2f 20 29 20 6f 72 20 26 73 69 67 5f 65 72 72  G/ ) or &sig_err
0de0: 6f 72 28 22 49 4e 56 41 4c 49 44 20 52 45 53 50  or("INVALID RESP
0df0: 4f 4e 53 45 3a 20 62 61 64 20 68 65 61 64 65 72  ONSE: bad header
0e00: 22 29 3b 0a 20 20 6d 79 20 24 73 74 61 74 75 73  ");.  my $status
0e10: 3b 0a 20 20 28 24 73 74 61 74 75 73 2c 20 24 6c  ;.  ($status, $l
0e20: 65 6e 29 20 3d 20 75 6e 70 61 63 6b 28 20 27 78  en) = unpack( 'x
0e30: 43 6e 27 2c 20 24 68 65 61 64 65 72 20 29 3b 0a  Cn', $header );.
0e40: 20 20 6d 79 20 24 72 65 73 70 6f 6e 73 65 3b 0a    my $response;.
0e50: 20 20 28 20 73 79 73 72 65 61 64 28 20 24 73 6f    ( sysread( $so
0e60: 63 6b 2c 20 24 72 65 73 70 6f 6e 73 65 2c 20 24  ck, $response, $
0e70: 6c 65 6e 20 29 20 3d 3d 20 24 6c 65 6e 20 29 20  len ) == $len ) 
0e80: 6f 72 20 26 73 69 67 5f 65 72 72 6f 72 28 22 49  or &sig_error("I
0e90: 4e 43 4f 4d 50 4c 45 54 45 20 52 45 53 50 4f 4e  NCOMPLETE RESPON
0ea0: 53 45 3a 20 24 72 65 73 70 6f 6e 73 65 22 29 3b  SE: $response");
0eb0: 0a 20 20 23 20 65 78 69 74 20 69 66 20 72 65 73  .  # exit if res
0ec0: 70 6f 6e 73 65 20 69 73 20 6e 6f 74 20 22 53 75  ponse is not "Su
0ed0: 63 63 65 73 73 22 0a 20 20 69 66 20 28 20 24 73  ccess".  if ( $s
0ee0: 74 61 74 75 73 20 61 6e 64 20 24 72 65 73 70 6f  tatus and $respo
0ef0: 6e 73 65 20 3d 7e 20 2f 5e 45 72 72 6f 72 3a 20  nse =~ /^Error: 
0f00: 53 75 63 63 65 73 73 5c 6e 2f 69 20 29 20 7b 0a  Success\n/i ) {.
0f10: 20 20 20 20 26 73 69 67 5f 65 72 72 6f 72 28 22      &sig_error("
0f20: 55 4e 53 55 43 43 45 53 53 46 55 4c 20 45 58 45  UNSUCCESSFUL EXE
0f30: 43 55 54 49 4f 4e 3a 20 53 63 72 69 70 74 2d 66  CUTION: Script-f
0f40: 75 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 7d  u error");.    }
0f50: 0a 20 20 24 73 74 61 74 75 73 3b 20 0a 20 20 7d  .  $status; .  }
0f60: 0a 0a 23 20 64 65 66 69 6e 65 20 61 20 53 63 72  ..# define a Scr
0f70: 69 70 74 2d 66 75 20 75 74 69 6c 69 74 79 20 66  ipt-fu utility f
0f80: 75 6e 63 74 69 6f 6e 20 74 6f 20 73 61 76 65 20  unction to save 
0f90: 66 72 61 6d 65 73 20 75 73 69 6e 67 20 74 68 65  frames using the
0fa0: 20 50 4e 47 20 6f 72 20 4a 50 47 0a 23 20 63 6f   PNG or JPG.# co
0fb0: 6d 70 72 65 73 73 69 6f 6e 20 6c 65 76 65 6c 73  mpression levels
0fc0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 27 67   specified in 'g
0fd0: 69 6d 70 72 63 27 2e 20 0a 23 20 54 6f 20 73 70  imprc'. .# To sp
0fe0: 65 63 69 66 79 20 61 20 50 4e 47 20 63 6f 6d 70  ecify a PNG comp
0ff0: 72 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20 6f 66  ression level of
1000: 20 35 2c 20 69 6e 63 6c 75 64 65 20 74 68 65 20   5, include the 
1010: 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 0a 23  following line.#
1020: 20 69 6e 20 67 69 6d 70 72 63 3a 0a 23 20 20 20   in gimprc:.#   
1030: 28 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73  (rfx-png-compres
1040: 73 69 6f 6e 20 22 35 22 29 20 0a 23 20 49 66 20  sion "5") .# If 
1050: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
1060: 65 6e 20 61 20 64 65 66 61 75 6c 74 20 6c 65 76  en a default lev
1070: 65 6c 20 6f 66 20 22 33 22 20 69 73 20 61 73 73  el of "3" is ass
1080: 75 6d 65 64 2e 0a 23 20 22 33 22 20 69 73 20 61  umed..# "3" is a
1090: 20 67 6f 6f 64 20 63 68 6f 69 63 65 20 66 6f 72   good choice for
10a0: 20 50 4e 47 73 20 62 65 63 61 75 73 65 20 68 69   PNGs because hi
10b0: 67 68 65 72 20 6c 65 76 65 6c 73 20 64 6f 75 62  gher levels doub
10c0: 6c 65 20 74 68 65 20 77 72 69 74 65 0a 23 20 74  le the write.# t
10d0: 69 6d 65 73 20 77 68 69 6c 65 20 6f 6e 6c 79 20  imes while only 
10e0: 6f 66 66 65 72 69 6e 67 20 61 62 6f 75 74 20 31  offering about 1
10f0: 35 25 20 72 65 64 75 63 74 69 6f 6e 20 69 6e 20  5% reduction in 
1100: 66 69 6c 65 20 73 69 7a 65 2e 0a 23 20 54 6f 20  file size..# To 
1110: 73 70 65 63 69 66 79 20 61 20 4a 50 47 20 63 6f  specify a JPG co
1120: 6d 70 72 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20  mpression level 
1130: 6f 66 20 38 35 2c 20 69 6e 63 6c 75 64 65 20 74  of 85, include t
1140: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e  he following lin
1150: 65 0a 23 20 69 6e 20 67 69 6d 70 72 63 3a 0a 23  e.# in gimprc:.#
1160: 20 20 20 28 72 66 78 2d 6a 70 67 2d 63 6f 6d 70     (rfx-jpg-comp
1170: 72 65 73 73 69 6f 6e 20 22 38 35 22 29 20 0a 23  ression "85") .#
1180: 20 49 66 20 6e 6f 74 20 73 70 65 63 69 66 69 65   If not specifie
1190: 64 20 74 68 65 6e 20 61 20 64 65 66 61 75 6c 74  d then a default
11a0: 20 6c 65 76 65 6c 20 6f 66 20 22 39 33 22 20 69   level of "93" i
11b0: 73 20 61 73 73 75 6d 65 64 2e 0a 0a 23 20 4e 4f  s assumed...# NO
11c0: 54 45 3a 20 27 72 66 78 2d 73 61 76 65 2d 66 72  TE: 'rfx-save-fr
11d0: 61 6d 65 27 20 44 45 4c 45 54 45 53 20 74 68 65  ame' DELETES the
11e0: 20 69 6d 61 67 65 2e 20 20 0a 26 72 66 78 5f 73   image.  .&rfx_s
11f0: 65 6e 64 6d 73 67 28 20 71 71 7b 0a 20 20 28 62  endmsg( qq{.  (b
1200: 65 67 69 6e 0a 20 20 20 20 28 64 65 66 69 6e 65  egin.    (define
1210: 20 72 66 78 2d 63 75 72 74 6d 70 64 69 72 20 22   rfx-curtmpdir "
1220: 24 63 75 72 74 6d 70 64 69 72 22 29 0a 20 20 20  $curtmpdir").   
1230: 20 28 64 65 66 69 6e 65 20 72 66 78 2d 69 6d 67   (define rfx-img
1240: 65 78 74 20 22 24 69 6d 67 5f 65 78 74 22 29 0a  ext "$img_ext").
1250: 20 20 20 20 28 75 6e 6c 65 73 73 20 28 64 65 66      (unless (def
1260: 69 6e 65 64 3f 20 27 72 66 78 2d 73 61 76 65 2d  ined? 'rfx-save-
1270: 66 72 61 6d 65 29 0a 20 20 20 20 20 20 28 64 65  frame).      (de
1280: 66 69 6e 65 20 72 66 78 2d 70 6e 67 2d 63 6f 6d  fine rfx-png-com
1290: 70 72 65 73 73 69 6f 6e 20 28 63 61 74 63 68 20  pression (catch 
12a0: 23 66 20 28 67 69 6d 70 2d 67 69 6d 70 72 63 2d  #f (gimp-gimprc-
12b0: 71 75 65 72 79 20 22 72 66 78 2d 70 6e 67 2d 63  query "rfx-png-c
12c0: 6f 6d 70 72 65 73 73 69 6f 6e 22 29 29 29 0a 20  ompression"))). 
12d0: 20 20 20 20 20 28 73 65 74 21 20 72 66 78 2d 70       (set! rfx-p
12e0: 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20 28  ng-compression (
12f0: 69 66 20 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72  if rfx-png-compr
1300: 65 73 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20  ession.         
1310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1320: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
1330: 2d 3e 6e 75 6d 62 65 72 20 28 63 61 72 20 72 66  ->number (car rf
1340: 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f  x-png-compressio
1350: 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)).            
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 20 20 20 20 20 20 33 20 29 29 0a 20 20 20 20 20        3 )).     
1380: 20 28 64 65 66 69 6e 65 20 72 66 78 2d 6a 70 67   (define rfx-jpg
1390: 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20 28 63 61  -compression (ca
13a0: 74 63 68 20 23 66 20 28 67 69 6d 70 2d 67 69 6d  tch #f (gimp-gim
13b0: 70 72 63 2d 71 75 65 72 79 20 22 72 66 78 2d 6a  prc-query "rfx-j
13c0: 70 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 22 29  pg-compression")
13d0: 29 29 0a 20 20 20 20 20 20 28 73 65 74 21 20 72  )).      (set! r
13e0: 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69  fx-jpg-compressi
13f0: 6f 6e 20 28 69 66 20 72 66 78 2d 6a 70 67 2d 63  on (if rfx-jpg-c
1400: 6f 6d 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 20  ompression.     
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
1430: 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20 28 63 61  ring->number (ca
1440: 72 20 72 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65  r rfx-jpg-compre
1450: 73 73 69 6f 6e 29 29 0a 20 20 20 20 20 20 20 20  ssion)).        
1460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1470: 20 20 20 20 20 20 20 20 20 20 39 33 20 29 29 0a            93 )).
1480: 20 20 20 20 20 20 28 64 65 66 69 6e 65 20 28 72        (define (r
1490: 66 78 2d 73 61 76 65 2d 66 72 61 6d 65 20 69 6d  fx-save-frame im
14a0: 61 67 65 20 62 61 73 65 6e 61 6d 65 29 0a 20 20  age basename).  
14b0: 20 20 20 20 20 20 28 6c 65 74 20 28 28 66 69 6c        (let ((fil
14c0: 65 6e 61 6d 65 20 28 73 74 72 69 6e 67 2d 61 70  ename (string-ap
14d0: 70 65 6e 64 20 72 66 78 2d 63 75 72 74 6d 70 64  pend rfx-curtmpd
14e0: 69 72 20 44 49 52 2d 53 45 50 41 52 41 54 4f 52  ir DIR-SEPARATOR
14f0: 20 62 61 73 65 6e 61 6d 65 29 29 0a 20 20 20 20   basename)).    
1500: 20 20 20 20 20 20 20 20 20 20 28 6c 61 79 65 72            (layer
1510: 20 28 63 61 72 20 28 67 69 6d 70 2d 69 6d 61 67   (car (gimp-imag
1520: 65 2d 67 65 74 2d 61 63 74 69 76 65 2d 6c 61 79  e-get-active-lay
1530: 65 72 20 69 6d 61 67 65 29 29 29 20 29 0a 20 20  er image))) ).  
1540: 20 20 20 20 20 20 20 20 28 69 66 20 28 73 74 72          (if (str
1550: 69 6e 67 2d 63 69 3d 3f 20 72 66 78 2d 69 6d 67  ing-ci=? rfx-img
1560: 65 78 74 20 22 2e 6a 70 67 22 29 0a 20 20 20 20  ext ".jpg").    
1570: 20 20 20 20 20 20 20 20 28 62 65 67 69 6e 0a 20          (begin. 
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 69               (gi
1590: 6d 70 2d 63 6f 6e 74 65 78 74 2d 70 75 73 68 29  mp-context-push)
15a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
15b0: 67 69 6d 70 2d 63 6f 6e 74 65 78 74 2d 73 65 74  gimp-context-set
15c0: 2d 62 61 63 6b 67 72 6f 75 6e 64 20 27 28 36 20  -background '(6 
15d0: 36 20 36 29 29 0a 20 20 20 20 20 20 20 20 20 20  6 6)).          
15e0: 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28      (let loop ((
15f0: 6c 61 79 65 72 73 20 28 76 65 63 74 6f 72 2d 3e  layers (vector->
1600: 6c 69 73 74 20 28 63 61 64 72 20 28 67 69 6d 70  list (cadr (gimp
1610: 2d 69 6d 61 67 65 2d 67 65 74 2d 6c 61 79 65 72  -image-get-layer
1620: 73 20 69 6d 61 67 65 29 29 29 29 29 0a 20 20 20  s image))))).   
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 6e               (un
1640: 6c 65 73 73 20 28 6e 75 6c 6c 3f 20 6c 61 79 65  less (null? laye
1650: 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs).            
1660: 20 20 20 20 20 20 28 69 66 20 28 3d 20 28 63 61        (if (= (ca
1670: 72 20 6c 61 79 65 72 73 29 20 6c 61 79 65 72 29  r layers) layer)
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1690: 20 20 20 20 20 28 67 69 6d 70 2d 64 72 61 77 61       (gimp-drawa
16a0: 62 6c 65 2d 73 65 74 2d 76 69 73 69 62 6c 65 20  ble-set-visible 
16b0: 6c 61 79 65 72 20 54 52 55 45 29 0a 20 20 20 20  layer TRUE).    
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d0: 28 67 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 73  (gimp-drawable-s
16e0: 65 74 2d 76 69 73 69 62 6c 65 20 28 63 61 72 20  et-visible (car 
16f0: 6c 61 79 65 72 73 29 20 46 41 4c 53 45 29 20 29  layers) FALSE) )
1700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1710: 20 20 20 28 6c 6f 6f 70 20 28 63 64 72 20 6c 61     (loop (cdr la
1720: 79 65 72 73 29 29 20 29 29 0a 20 20 20 20 20 20  yers)) )).      
1730: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 6c 61          (set! la
1740: 79 65 72 20 28 63 61 72 20 28 67 69 6d 70 2d 69  yer (car (gimp-i
1750: 6d 61 67 65 2d 66 6c 61 74 74 65 6e 20 69 6d 61  mage-flatten ima
1760: 67 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20  ge))).          
1770: 20 20 20 20 28 66 69 6c 65 2d 6a 70 65 67 2d 73      (file-jpeg-s
1780: 61 76 65 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52  ave RUN-NONINTER
1790: 41 43 54 49 56 45 20 0a 20 20 20 20 20 20 20 20  ACTIVE .        
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b0: 20 20 20 20 20 20 69 6d 61 67 65 20 0a 20 20 20        image .   
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d0: 20 20 20 20 20 20 20 20 20 20 20 6c 61 79 65 72             layer
17e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1800: 69 6c 65 6e 61 6d 65 20 0a 20 20 20 20 20 20 20  ilename .       
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1820: 20 20 20 20 20 20 20 66 69 6c 65 6e 61 6d 65 20         filename 
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1850: 2f 20 72 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65  / rfx-jpg-compre
1860: 73 73 69 6f 6e 20 31 30 30 29 0a 20 20 20 20 20  ssion 100).     
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 20 20 30 20 3b 20 73 6d 6f           0 ; smo
1890: 6f 74 68 69 6e 67 20 0a 20 20 20 20 20 20 20 20  othing .        
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 20 20 31 20 3b 20 6f 70 74 69 6d 69        1 ; optimi
18c0: 7a 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ze .            
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e0: 20 20 31 20 3b 20 70 72 6f 67 72 65 73 73 69 76    1 ; progressiv
18f0: 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e .             
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1910: 20 22 22 20 3b 20 63 6f 6d 6d 65 6e 74 20 0a 20   "" ; comment . 
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 3b               0 ;
1940: 20 73 75 62 73 6d 70 20 28 30 2d 34 29 0a 20 20   subsmp (0-4).  
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 3b 20              1 ; 
1970: 62 61 73 65 6c 69 6e 65 20 0a 20 20 20 20 20 20  baseline .      
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 20 20 20 20 20 20 30 20 3b 20 72 65 73 74          0 ; rest
19a0: 61 72 74 20 0a 20 20 20 20 20 20 20 20 20 20 20  art .           
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c0: 20 20 20 30 20 3b 64 63 74 20 0a 20 20 20 20 20     0 ;dct .     
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e0: 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20           ).     
19f0: 20 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 63           (gimp-c
1a00: 6f 6e 74 65 78 74 2d 70 6f 70 29 20 29 0a 20 20  ontext-pop) ).  
1a10: 20 20 20 20 20 20 20 20 20 20 28 62 65 67 69 6e            (begin
1a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
1a30: 75 6e 6c 65 73 73 20 28 7a 65 72 6f 3f 20 28 63  unless (zero? (c
1a40: 61 72 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 62  ar (gimp-image-b
1a50: 61 73 65 2d 74 79 70 65 20 69 6d 61 67 65 29 29  ase-type image))
1a60: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1a70: 20 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 63 6f    (gimp-image-co
1a80: 6e 76 65 72 74 2d 72 67 62 20 69 6d 61 67 65 29  nvert-rgb image)
1a90: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ).             
1aa0: 20 28 66 69 6c 65 2d 70 6e 67 2d 73 61 76 65 32   (file-png-save2
1ab0: 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54   RUN-NONINTERACT
1ac0: 49 56 45 20 0a 20 20 20 20 20 20 20 20 20 20 20  IVE .           
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 20 20 20 69 6d 61 67 65 20 0a 20 20 20 20 20 20     image .      
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b00: 20 20 20 20 20 20 20 20 6c 61 79 65 72 0a 20 20          layer.  
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1b30: 6e 61 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20  name .          
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b50: 20 20 20 20 66 69 6c 65 6e 61 6d 65 20 0a 20 20      filename .  
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 46 41 4c 53              FALS
1b80: 45 20 3b 20 69 6e 74 65 72 6c 61 63 65 0a 20 20  E ; interlace.  
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 72 66 78 2d              rfx-
1bb0: 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 0a  png-compression.
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 41                FA
1be0: 4c 53 45 20 3b 20 62 6b 67 64 0a 20 20 20 20 20  LSE ; bkgd.     
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 20 20 20 20 20 20 20 20 20 28 63 61 72 20 28 67           (car (g
1c10: 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 68 61 73  imp-drawable-has
1c20: 2d 61 6c 70 68 61 20 6c 61 79 65 72 29 29 0a 20  -alpha layer)). 
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 41 4c               FAL
1c50: 53 45 20 3b 20 6f 66 66 73 0a 20 20 20 20 20 20  SE ; offs.      
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 20 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b 20          FALSE ; 
1c80: 70 68 79 73 0a 20 20 20 20 20 20 20 20 20 20 20  phys.           
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca0: 20 20 20 46 41 4c 53 45 20 3b 20 74 69 6d 65 0a     FALSE ; time.
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 52                TR
1cd0: 55 45 20 20 3b 20 63 6f 6d 6d 65 6e 74 0a 20 20  UE  ; comment.  
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 46 41 4c 53              FALS
1d00: 45 20 3b 20 73 76 74 72 61 6e 73 0a 20 20 20 20  E ; svtrans.    
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d20: 20 20 20 20 20 20 20 20 20 20 29 29 29 0a 20 20            ))).  
1d30: 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 69 6d          (gimp-im
1d40: 61 67 65 2d 64 65 6c 65 74 65 20 69 6d 61 67 65  age-delete image
1d50: 29 20 29 29 29 29 0a 20 20 7d 0a 20 20 29 3b 0a  ) )))).  }.  );.
1d60: 3c 2f 70 72 65 3e 0a 0a 3c 6c 6f 6f 70 3e 0a 26  </pre>..<loop>.&
1d70: 72 66 78 5f 73 65 6e 64 6d 73 67 20 28 0a 20 20  rfx_sendmsg (.  
1d80: 71 71 7b 0a 20 20 0a 20 20 20 20 28 6c 65 74 2a  qq{.  .    (let*
1d90: 20 28 28 69 6e 70 75 74 2d 66 69 6c 65 20 28 73   ((input-file (s
1da0: 74 72 69 6e 67 2d 61 70 70 65 6e 64 20 22 24 63  tring-append "$c
1db0: 75 72 74 6d 70 64 69 72 22 20 44 49 52 2d 53 45  urtmpdir" DIR-SE
1dc0: 50 41 52 41 54 4f 52 20 22 24 69 6e 22 29 29 0a  PARATOR "$in")).
1dd0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6d 61 67             (imag
1de0: 65 20 28 63 61 72 20 28 67 69 6d 70 2d 66 69 6c  e (car (gimp-fil
1df0: 65 2d 6c 6f 61 64 20 52 55 4e 2d 4e 4f 4e 49 4e  e-load RUN-NONIN
1e00: 54 45 52 41 43 54 49 56 45 20 69 6e 70 75 74 2d  TERACTIVE input-
1e10: 66 69 6c 65 20 69 6e 70 75 74 2d 66 69 6c 65 29  file input-file)
1e20: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6c  )).           (l
1e30: 61 79 65 72 20 28 63 61 72 20 28 67 69 6d 70 2d  ayer (car (gimp-
1e40: 69 6d 61 67 65 2d 67 65 74 2d 61 63 74 69 76 65  image-get-active
1e50: 2d 6c 61 79 65 72 20 69 6d 61 67 65 29 29 29 20  -layer image))) 
1e60: 29 0a 20 20 20 20 20 20 28 69 66 20 24 70 37 0a  ).      (if $p7.
1e70: 20 20 20 20 20 20 20 20 28 70 6c 75 67 2d 69 6e          (plug-in
1e80: 2d 6d 62 6c 75 72 20 52 55 4e 2d 4e 4f 4e 49 4e  -mblur RUN-NONIN
1e90: 54 45 52 41 43 54 49 56 45 20 69 6d 61 67 65 20  TERACTIVE image 
1ea0: 6c 61 79 65 72 0a 20 20 20 20 20 20 20 20 20 20  layer.          
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f               (co
1ec0: 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd.             
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3d 20              ((= 
1ee0: 24 70 30 20 31 29 20 30 20 29 0a 20 20 20 20 20  $p0 1) 0 ).     
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f00: 20 20 20 20 28 28 3d 20 24 70 31 20 31 29 20 31      ((= $p1 1) 1
1f10: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ).             
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3d 20              ((= 
1f30: 24 70 32 20 31 29 20 32 20 29 20 29 0a 20 20 20  $p2 1) 2 ) ).   
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f50: 20 20 20 20 24 70 33 20 3b 20 6c 65 6e 67 74 68      $p3 ; length
1f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f70: 20 20 20 20 20 20 20 20 24 70 34 20 3b 20 61 6e          $p4 ; an
1f80: 67 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  gle.            
1f90: 20 20 20 20 20 20 20 20 20 20 20 24 70 35 20 3b             $p5 ;
1fa0: 20 63 65 6e 74 65 72 20 78 0a 20 20 20 20 20 20   center x.      
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc0: 20 24 70 36 20 3b 20 63 65 6e 74 65 72 20 79 20   $p6 ; center y 
1fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe0: 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20          ).      
1ff0: 20 20 28 70 6c 75 67 2d 69 6e 2d 6d 62 6c 75 72    (plug-in-mblur
2000: 2d 69 6e 77 61 72 64 0a 20 20 20 20 20 20 20 20  -inward.        
2010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2020: 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56  UN-NONINTERACTIV
2030: 45 20 69 6d 61 67 65 20 6c 61 79 65 72 0a 20 20  E image layer.  
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2050: 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20       (cond.     
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2070: 20 20 20 20 28 28 3d 20 24 70 30 20 31 29 20 30      ((= $p0 1) 0
2080: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ).             
2090: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3d 20              ((= 
20a0: 24 70 31 20 31 29 20 31 20 29 0a 20 20 20 20 20  $p1 1) 1 ).     
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c0: 20 20 20 20 28 28 3d 20 24 70 32 20 31 29 20 32      ((= $p2 1) 2
20d0: 20 29 20 29 0a 20 20 20 20 20 20 20 20 20 20 20   ) ).           
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 33 20              $p3 
20f0: 3b 20 6c 65 6e 67 74 68 0a 20 20 20 20 20 20 20  ; length.       
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2110: 24 70 34 20 3b 20 61 6e 67 6c 65 0a 20 20 20 20  $p4 ; angle.    
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2130: 20 20 20 24 70 35 20 3b 20 63 65 6e 74 65 72 20     $p5 ; center 
2140: 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x.              
2150: 20 20 20 20 20 20 20 20 20 24 70 36 20 3b 20 63           $p6 ; c
2160: 65 6e 74 65 72 20 79 0a 20 20 20 20 20 20 20 20  enter y.        
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2180: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2190: 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 28 72         .      (r
21a0: 66 78 2d 73 61 76 65 2d 66 72 61 6d 65 20 69 6d  fx-save-frame im
21b0: 61 67 65 20 22 24 6f 75 74 22 29 20 29 0a 0a 20  age "$out") ).. 
21c0: 20 20 20 7d 0a 20 20 29 3b 0a 0a 3c 2f 6c 6f 6f     }.  );..</loo
21d0: 70 3e 0a 0a 3c 70 6f 73 74 3e 0a 3c 2f 70 6f 73  p>..<post>.</pos
21e0: 74 3e 0a 0a 3c 6f 6e 63 68 61 6e 67 65 3e 0a 69  t>..<onchange>.i
21f0: 6e 69 74 7c 24 70 33 5f 6d 61 78 3d 24 77 69 64  nit|$p3_max=$wid
2200: 74 68 3b 0a 69 6e 69 74 7c 24 70 35 20 3d 20 69  th;.init|$p5 = i
2210: 6e 74 28 24 77 69 64 74 68 20 2f 20 32 29 3b 0a  nt($width / 2);.
2220: 69 6e 69 74 7c 24 70 35 5f 6d 61 78 20 3d 20 24  init|$p5_max = $
2230: 77 69 64 74 68 3b 0a 69 6e 69 74 7c 24 70 36 20  width;.init|$p6 
2240: 3d 20 69 6e 74 20 28 24 68 65 69 67 68 74 20 2f  = int ($height /
2250: 20 32 29 3b 0a 69 6e 69 74 7c 24 70 36 5f 6d 61   2);.init|$p6_ma
2260: 78 20 3d 20 24 68 65 69 67 68 74 3b 0a 3c 2f 6f  x = $height;.</o
2270: 6e 63 68 61 6e 67 65 3e 0a 0a                    nchange>..