RFX-GIMP

Hex Artifact Content
Login

Artifact f251245feab8b4115c476e4777c7269d7ca118d5:


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 76 69 64 65 6f 2d 70 61 74 74 65 72 6e 0a  >.video-pattern.
0050: 3c 2f 6e 61 6d 65 3e 0a 0a 3c 76 65 72 73 69 6f  </name>..<versio
0060: 6e 3e 0a 31 0a 3c 2f 76 65 72 73 69 6f 6e 3e 0a  n>.1.</version>.
0070: 0a 3c 61 75 74 68 6f 72 3e 0a 73 61 75 6c 67 6f  .<author>.saulgo
0080: 6f 64 65 7c 68 74 74 70 3a 2f 2f 63 68 69 73 65  ode|http://chise
0090: 6c 61 70 70 2e 63 6f 6d 2f 75 73 65 72 2f 73 61  lapp.com/user/sa
00a0: 75 6c 67 6f 6f 64 65 2f 72 65 70 6f 73 69 74 6f  ulgoode/reposito
00b0: 72 79 2f 52 46 58 2d 47 49 4d 50 0a 3c 2f 61 75  ry/RFX-GIMP.</au
00c0: 74 68 6f 72 3e 0a 0a 3c 64 65 73 63 72 69 70 74  thor>..<descript
00d0: 69 6f 6e 3e 0a 56 69 64 65 6f 20 50 61 74 74 65  ion>.Video Patte
00e0: 72 6e 7c 41 70 70 6c 79 69 6e 67 20 76 69 64 65  rn|Applying vide
00f0: 6f 20 70 61 74 74 65 72 6e 20 74 6f 7c 31 7c 31  o pattern to|1|1
0100: 7c 0a 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  |.</description>
0110: 0a 0a 3c 72 65 71 75 69 72 65 73 3e 0a 67 69 6d  ..<requires>.gim
0120: 70 0a 3c 2f 72 65 71 75 69 72 65 73 3e 0a 0a 3c  p.</requires>..<
0130: 70 61 72 61 6d 73 3e 0a 76 70 5f 73 74 61 67 67  params>.vp_stagg
0140: 65 72 65 64 7c 53 74 61 67 67 65 72 65 64 7c 62  ered|Staggered|b
0150: 6f 6f 6c 7c 30 7c 31 7c 0a 76 70 5f 6c 61 72 67  ool|0|1|.vp_larg
0160: 65 5f 73 74 61 67 67 65 72 65 64 7c 4c 61 72 67  e_staggered|Larg
0170: 65 20 53 74 61 67 67 65 72 65 64 7c 62 6f 6f 6c  e Staggered|bool
0180: 7c 30 7c 31 7c 0a 76 70 5f 73 74 72 69 70 65 64  |0|1|.vp_striped
0190: 7c 53 74 72 69 70 65 64 7c 62 6f 6f 6c 7c 31 7c  |Striped|bool|1|
01a0: 31 7c 0a 76 70 5f 77 69 64 65 5f 73 74 72 69 70  1|.vp_wide_strip
01b0: 65 64 7c 57 69 64 65 20 53 74 72 69 70 65 64 7c  ed|Wide Striped|
01c0: 62 6f 6f 6c 7c 30 7c 31 7c 0a 76 70 5f 6c 6f 6e  bool|0|1|.vp_lon
01d0: 67 5f 73 74 61 67 67 65 72 65 64 7c 4c 6f 6e 67  g_staggered|Long
01e0: 20 53 74 61 67 67 65 72 65 64 7c 62 6f 6f 6c 7c   Staggered|bool|
01f0: 30 7c 31 7c 0a 76 70 5f 74 68 72 65 65 5f 62 79  0|1|.vp_three_by
0200: 5f 74 68 72 65 65 7c 33 78 33 7c 62 6f 6f 6c 7c  _three|3x3|bool|
0210: 30 7c 31 7c 0a 76 70 5f 6c 61 72 67 65 5f 74 68  0|1|.vp_large_th
0220: 72 65 65 5f 62 79 5f 74 68 72 65 65 7c 4c 61 72  ree_by_three|Lar
0230: 67 65 20 33 78 33 7c 62 6f 6f 6c 7c 30 7c 31 7c  ge 3x3|bool|0|1|
0240: 0a 76 70 5f 68 65 78 7c 48 65 78 7c 62 6f 6f 6c  .vp_hex|Hex|bool
0250: 7c 30 7c 31 7c 0a 76 70 5f 64 6f 74 73 7c 44 6f  |0|1|.vp_dots|Do
0260: 74 73 7c 62 6f 6f 6c 7c 30 7c 31 7c 0a 76 70 5f  ts|bool|0|1|.vp_
0270: 61 64 64 69 74 69 76 65 7c 41 64 64 69 74 69 76  additive|Additiv
0280: 65 7c 62 6f 6f 6c 7c 31 7c 0a 76 70 5f 72 6f 74  e|bool|1|.vp_rot
0290: 61 74 65 64 7c 52 6f 74 61 74 65 64 7c 62 6f 6f  ated|Rotated|boo
02a0: 6c 7c 30 7c 0a 3c 2f 70 61 72 61 6d 73 3e 0a 0a  l|0|.</params>..
02b0: 3c 70 61 72 61 6d 5f 77 69 6e 64 6f 77 3e 0a 3c  <param_window>.<
02c0: 2f 70 61 72 61 6d 5f 77 69 6e 64 6f 77 3e 0a 0a  /param_window>..
02d0: 3c 70 72 6f 70 65 72 74 69 65 73 3e 0a 30 78 30  <properties>.0x0
02e0: 30 30 31 0a 3c 2f 70 72 6f 70 65 72 74 69 65 73  001.</properties
02f0: 3e 0a 0a 3c 6c 61 6e 67 75 61 67 65 5f 63 6f 64  >..<language_cod
0300: 65 3e 0a 30 78 46 30 0a 3c 2f 6c 61 6e 67 75 61  e>.0xF0.</langua
0310: 67 65 5f 63 6f 64 65 3e 0a 0a 3c 70 72 65 3e 0a  ge_code>..<pre>.
0320: 23 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69  # This program i
0330: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 3b  s free software;
0340: 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72   you can redistr
0350: 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f 72 20  ibute it and/or 
0360: 6d 6f 64 69 66 79 0a 23 20 69 74 20 75 6e 64 65  modify.# it unde
0370: 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74  r the terms of t
0380: 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50  he GNU General P
0390: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 76 65  ublic License ve
03a0: 72 73 69 6f 6e 20 33 20 6f 72 20 68 69 67 68 65  rsion 3 or highe
03b0: 72 0a 23 20 61 73 20 70 75 62 6c 69 73 68 65 64  r.# as published
03c0: 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f 66   by the Free Sof
03d0: 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e  tware Foundation
03e0: 2e 0a 0a 75 73 65 20 49 4f 3a 3a 53 6f 63 6b 65  ...use IO::Socke
03f0: 74 3b 20 0a 75 73 65 20 54 65 78 74 3a 3a 42 61  t; .use Text::Ba
0400: 6c 61 6e 63 65 64 3b 0a 0a 69 66 20 28 24 45 4e  lanced;..if ($EN
0410: 56 7b 27 52 46 58 47 49 4d 50 5f 50 4f 52 54 27  V{'RFXGIMP_PORT'
0420: 7d 29 20 7b 0a 20 20 24 72 66 78 5f 70 6f 72 74  }) {.  $rfx_port
0430: 20 3d 20 24 45 4e 56 7b 27 52 46 58 47 49 4d 50   = $ENV{'RFXGIMP
0440: 5f 50 4f 52 54 27 7d 3b 0a 20 20 7d 0a 65 6c 73  _PORT'};.  }.els
0450: 65 20 7b 0a 20 20 24 72 66 78 5f 70 6f 72 74 20  e {.  $rfx_port 
0460: 3d 20 31 30 30 30 38 3b 20 0a 20 20 7d 0a 0a 24  = 10008; .  }..$
0470: 73 6f 63 6b 20 3d 20 6e 65 77 20 49 4f 3a 3a 53  sock = new IO::S
0480: 6f 63 6b 65 74 3a 3a 49 4e 45 54 20 28 20 50 65  ocket::INET ( Pe
0490: 65 72 41 64 64 72 20 3d 3e 20 27 6c 6f 63 61 6c  erAddr => 'local
04a0: 68 6f 73 74 27 2c 20 0a 20 20 20 20 20 20 20 20  host', .        
04b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04c0: 20 20 20 20 20 20 20 50 65 65 72 50 6f 72 74 20         PeerPort 
04d0: 3d 3e 20 24 72 66 78 5f 70 6f 72 74 2c 20 0a 20  => $rfx_port, . 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
0500: 6f 74 6f 20 3d 3e 20 27 74 63 70 27 20 0a 20 20  oto => 'tcp' .  
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0520: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0a               );.
0530: 69 66 20 28 20 6e 6f 74 20 64 65 66 69 6e 65 64  if ( not defined
0540: 20 24 73 6f 63 6b 20 29 20 7b 0a 20 20 6d 79 20   $sock ) {.  my 
0550: 24 72 66 78 5f 70 69 64 20 3d 20 66 6f 72 6b 28  $rfx_pid = fork(
0560: 29 3b 0a 20 20 69 66 20 28 6e 6f 74 20 64 65 66  );.  if (not def
0570: 69 6e 65 64 20 24 72 66 78 5f 70 69 64 29 20 7b  ined $rfx_pid) {
0580: 0a 20 20 20 20 26 73 69 67 5f 65 72 72 6f 72 28  .    &sig_error(
0590: 22 55 4e 41 42 4c 45 20 54 4f 20 45 58 45 43 55  "UNABLE TO EXECU
05a0: 54 45 20 47 49 4d 50 3a 20 4e 6f 74 20 65 6e 6f  TE GIMP: Not eno
05b0: 75 67 68 20 72 65 73 6f 75 72 63 65 73 22 29 3b  ugh resources");
05c0: 0a 20 20 20 20 7d 20 0a 20 20 65 6c 73 69 66 20  .    } .  elsif 
05d0: 28 24 72 66 78 5f 70 69 64 20 3d 3d 20 30 29 20  ($rfx_pid == 0) 
05e0: 7b 0a 20 20 20 20 69 66 20 28 20 2d 66 20 24 74  {.    if ( -f $t
05f0: 6d 70 64 69 72 20 2e 20 22 72 66 78 67 69 6d 70  mpdir . "rfxgimp
0600: 2e 70 69 64 22 29 20 7b 0a 20 20 20 20 20 20 6f  .pid") {.      o
0610: 70 65 6e 28 50 49 44 46 49 4c 45 2c 20 24 74 6d  pen(PIDFILE, $tm
0620: 70 64 69 72 20 2e 20 22 72 66 78 67 69 6d 70 2e  pdir . "rfxgimp.
0630: 70 69 64 22 29 3b 0a 20 20 20 20 20 20 23 20 73  pid");.      # s
0640: 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 64  hould probably d
0650: 6f 20 73 6f 6d 65 20 73 61 6e 69 74 79 20 63 68  o some sanity ch
0660: 65 63 6b 69 6e 67 20 66 6f 72 20 74 68 65 20 6f  ecking for the o
0670: 66 66 20 63 68 61 6e 63 65 20 74 68 61 74 0a 20  ff chance that. 
0680: 20 20 20 20 20 23 20 74 68 65 20 50 49 44 20 68       # the PID h
0690: 61 73 20 62 65 65 6e 20 72 65 63 79 63 6c 65 64  as been recycled
06a0: 20 6f 72 20 74 68 65 20 73 79 73 74 65 6d 20 68   or the system h
06b0: 61 73 20 72 65 62 6f 6f 74 65 64 20 28 65 2e 67  as rebooted (e.g
06c0: 2c 20 63 68 65 63 6b 0a 20 20 20 20 20 20 23 20  , check.      # 
06d0: 69 66 20 70 72 6f 63 65 73 73 20 77 61 73 20 65  if process was e
06e0: 78 65 63 75 74 65 64 20 77 69 74 68 20 2f 75 73  xecuted with /us
06f0: 72 2f 62 69 6e 2f 70 65 72 6c 2e 20 42 75 74 20  r/bin/perl. But 
0700: 66 6f 72 20 6e 6f 77 2e 2e 2e 0a 20 20 20 20 20  for now....     
0710: 20 6b 69 6c 6c 28 31 35 2c 20 2d 3c 50 49 44 46   kill(15, -<PIDF
0720: 49 4c 45 3e 29 3b 20 23 20 74 68 65 20 6e 65 67  ILE>); # the neg
0730: 61 74 69 76 65 20 50 49 44 20 6d 65 61 6e 73 20  ative PID means 
0740: 6b 69 6c 6c 20 61 6c 6c 20 63 68 69 6c 64 72 65  kill all childre
0750: 6e 2c 20 74 6f 6f 2e 0a 20 20 20 20 20 20 63 6c  n, too..      cl
0760: 6f 73 65 28 50 49 44 46 49 4c 45 29 3b 0a 20 20  ose(PIDFILE);.  
0770: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 70 67 69      }.    setpgi
0780: 64 28 24 24 2c 30 29 3b 20 23 20 63 68 61 6e 67  d($$,0); # chang
0790: 65 20 74 68 65 20 70 67 72 6f 75 70 20 74 6f 20  e the pgroup to 
07a0: 74 68 69 73 20 66 6f 72 6b 65 64 20 70 72 6f 63  this forked proc
07b0: 65 73 73 2c 20 72 61 74 68 65 72 20 74 68 61 6e  ess, rather than
07c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
07d0: 20 20 20 20 23 20 74 68 65 20 6f 72 69 67 69 6e      # the origin
07e0: 61 6c 20 4c 69 56 45 53 20 28 73 6f 20 74 68 61  al LiVES (so tha
07f0: 74 20 77 65 20 64 6f 6e 27 74 20 6b 69 6c 6c 20  t we don't kill 
0800: 4c 69 56 45 53 20 77 68 65 6e 20 0a 20 20 20 20  LiVES when .    
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
0820: 20 74 68 69 73 20 70 72 67 72 6f 75 70 20 69 73   this prgroup is
0830: 20 6b 69 6c 6c 65 64 29 2e 0a 20 20 20 20 6f 70   killed)..    op
0840: 65 6e 28 50 49 44 46 49 4c 45 2c 20 22 3e 22 20  en(PIDFILE, ">" 
0850: 2e 20 24 74 6d 70 64 69 72 20 2e 20 22 72 66 78  . $tmpdir . "rfx
0860: 67 69 6d 70 2e 70 69 64 22 29 3b 20 23 20 6f 76  gimp.pid"); # ov
0870: 65 72 77 72 69 74 65 20 6f 6c 64 20 66 69 6c 65  erwrite old file
0880: 0a 20 20 20 20 70 72 69 6e 74 20 50 49 44 46 49  .    print PIDFI
0890: 4c 45 20 24 24 3b 0a 20 20 20 20 63 6c 6f 73 65  LE $$;.    close
08a0: 28 50 49 44 46 49 4c 45 29 3b 0a 20 20 20 20 6d  (PIDFILE);.    m
08b0: 79 20 24 73 74 61 72 74 5f 67 69 6d 70 20 3d 20  y $start_gimp = 
08c0: 71 71 7b 20 67 69 6d 70 20 2d 69 20 2d 62 20 22  qq{ gimp -i -b "
08d0: 28 70 6c 75 67 2d 69 6e 2d 73 63 72 69 70 74 2d  (plug-in-script-
08e0: 66 75 2d 73 65 72 76 65 72 20 31 20 24 72 66 78  fu-server 1 $rfx
08f0: 5f 70 6f 72 74 20 5c 5c 5c 22 5c 5c 5c 22 29 22  _port \\\"\\\")"
0900: 20 26 20 7d 3b 0a 20 20 20 20 73 79 73 74 65 6d   & };.    system
0910: 20 28 20 24 73 74 61 72 74 5f 67 69 6d 70 20 29   ( $start_gimp )
0920: 3b 20 23 20 74 68 6f 75 67 68 20 73 74 61 72 74  ; # though start
0930: 65 64 20 61 73 20 73 65 70 61 72 61 74 65 20 70  ed as separate p
0940: 72 6f 63 65 73 73 2c 20 47 49 4d 50 20 6e 6f 77  rocess, GIMP now
0950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69               # i
0970: 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 73  s part of this s
0980: 70 61 77 6e 65 64 20 63 68 69 6c 64 27 73 20 70  pawned child's p
0990: 67 72 6f 75 70 2c 20 6e 6f 74 20 74 68 65 20 4c  group, not the L
09a0: 69 56 45 53 20 70 67 72 6f 75 70 0a 20 20 20 20  iVES pgroup.    
09b0: 73 6c 65 65 70 28 29 3b 20 23 20 64 6f 20 6e 6f  sleep(); # do no
09c0: 74 68 69 6e 67 2c 20 66 6f 72 65 76 65 72 0a 20  thing, forever. 
09d0: 20 20 20 26 73 69 67 5f 65 72 72 6f 72 28 22 47     &sig_error("G
09e0: 49 4d 50 20 6b 69 6c 6c 65 64 20 62 79 20 65 78  IMP killed by ex
09f0: 74 65 72 6e 61 6c 20 70 72 6f 63 65 73 73 5c 6e  ternal process\n
0a00: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 65 6c 73 65  ");.    }.  else
0a10: 20 7b 0a 20 20 20 20 77 68 69 6c 65 20 28 6e 6f   {.    while (no
0a20: 74 20 64 65 66 69 6e 65 64 20 24 73 6f 63 6b 29  t defined $sock)
0a30: 20 7b 0a 20 20 20 20 20 20 73 6c 65 65 70 20 28   {.      sleep (
0a40: 31 29 3b 0a 20 20 20 20 20 20 24 73 6f 63 6b 20  1);.      $sock 
0a50: 3d 20 6e 65 77 20 49 4f 3a 3a 53 6f 63 6b 65 74  = new IO::Socket
0a60: 3a 3a 49 4e 45 54 20 28 20 50 65 65 72 41 64 64  ::INET ( PeerAdd
0a70: 72 20 3d 3e 20 27 6c 6f 63 61 6c 68 6f 73 74 27  r => 'localhost'
0a80: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0aa0: 20 20 20 20 20 20 20 20 50 65 65 72 50 6f 72 74          PeerPort
0ab0: 20 3d 3e 20 24 72 66 78 5f 70 6f 72 74 2c 20 0a   => $rfx_port, .
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 50 72 6f 74 6f 20 3d 3e 20 27 74       Proto => 't
0af0: 63 70 27 20 0a 20 20 20 20 20 20 20 20 20 20 20  cp' .           
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b10: 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
0b20: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
0b30: 23 20 44 65 66 69 6e 65 20 61 20 50 65 72 6c 20  # Define a Perl 
0b40: 73 75 62 72 6f 75 74 69 6e 65 20 66 6f 72 20 73  subroutine for s
0b50: 65 6e 64 69 6e 67 20 6d 65 73 73 61 67 65 73 20  ending messages 
0b60: 74 6f 20 74 68 65 20 53 46 20 73 65 72 76 65 72  to the SF server
0b70: 20 61 6e 64 20 77 61 69 74 69 6e 67 0a 23 20 66   and waiting.# f
0b80: 6f 72 20 61 20 72 65 73 70 6f 6e 73 65 2e 0a 23  or a response..#
0b90: 0a 73 75 62 20 72 66 78 5f 73 65 6e 64 6d 73 67  .sub rfx_sendmsg
0ba0: 20 7b 0a 20 20 6d 79 20 24 6d 65 73 73 61 67 65   {.  my $message
0bb0: 20 3d 20 24 5f 5b 30 5d 3b 0a 20 20 6d 79 20 24   = $_[0];.  my $
0bc0: 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 20 28 24 6d  len = length ($m
0bd0: 65 73 73 61 67 65 29 3b 0a 20 20 69 66 20 28 24  essage);.  if ($
0be0: 6c 65 6e 20 3e 20 36 35 35 33 35 29 20 7b 0a 20  len > 65535) {. 
0bf0: 20 20 20 26 73 69 67 5f 65 72 72 6f 72 28 22 45     &sig_error("E
0c00: 52 52 4f 52 3a 20 73 63 72 69 70 74 20 69 73 20  RROR: script is 
0c10: 74 6f 6f 20 6c 6f 6e 67 20 66 6f 72 20 6f 6e 65  too long for one
0c20: 20 73 65 72 76 65 72 20 72 65 71 75 65 73 74 3a   server request:
0c30: 20 24 6c 65 6e 20 3e 20 36 35 35 33 35 22 29 3b   $len > 65535");
0c40: 0a 20 20 20 20 7d 3b 0a 20 20 23 20 73 65 6e 64  .    };.  # send
0c50: 20 73 63 72 69 70 74 20 74 6f 20 47 49 4d 50 0a   script to GIMP.
0c60: 20 20 6d 79 20 24 68 65 61 64 65 72 20 3d 20 70    my $header = p
0c70: 61 63 6b 28 20 27 61 6e 27 2c 20 27 47 27 2c 20  ack( 'an', 'G', 
0c80: 24 6c 65 6e 29 3b 0a 20 20 73 79 73 77 72 69 74  $len);.  syswrit
0c90: 65 28 20 24 73 6f 63 6b 2c 20 24 5f 20 29 20 66  e( $sock, $_ ) f
0ca0: 6f 72 20 28 24 68 65 61 64 65 72 2c 20 24 6d 65  or ($header, $me
0cb0: 73 73 61 67 65 29 3b 0a 20 20 23 20 77 61 69 74  ssage);.  # wait
0cc0: 20 66 6f 72 20 72 65 73 70 6f 6e 73 65 0a 20 20   for response.  
0cd0: 6d 79 20 24 72 69 6e 20 3d 20 27 27 3b 0a 20 20  my $rin = '';.  
0ce0: 76 65 63 28 20 24 72 69 6e 2c 20 66 69 6c 65 6e  vec( $rin, filen
0cf0: 6f 28 24 73 6f 63 6b 29 2c 20 31 20 29 20 3d 20  o($sock), 1 ) = 
0d00: 31 3b 0a 20 20 73 65 6c 65 63 74 28 20 24 72 69  1;.  select( $ri
0d10: 6e 2c 20 20 75 6e 64 65 66 2c 20 75 6e 64 65 66  n,  undef, undef
0d20: 2c 20 75 6e 64 65 66 20 29 3b 20 20 20 20 23 20  , undef );    # 
0d30: 77 61 69 74 20 28 66 6f 72 65 76 65 72 29 20 66  wait (forever) f
0d40: 6f 72 20 72 65 73 70 6f 6e 73 65 20 73 74 61 72  or response star
0d50: 74 0a 20 20 73 65 6c 65 63 74 28 20 75 6e 64 65  t.  select( unde
0d60: 66 2c 20 75 6e 64 65 66 2c 20 75 6e 64 65 66 2c  f, undef, undef,
0d70: 20 2e 31 20 29 3b 20 20 20 20 20 20 20 23 20 77   .1 );       # w
0d80: 61 69 74 20 61 20 62 69 74 20 66 6f 72 20 72 65  ait a bit for re
0d90: 73 70 6f 6e 73 65 20 74 6f 20 66 69 6e 69 73 68  sponse to finish
0da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 69              #  i
0dd0: 6e 63 72 65 61 73 65 20 77 61 69 74 20 69 66 20  ncrease wait if 
0de0: 49 4e 56 41 4c 49 44 2f 49 4e 43 4f 4d 50 4c 45  INVALID/INCOMPLE
0df0: 54 45 20 52 45 53 50 4f 4e 53 45 20 6f 63 63 75  TE RESPONSE occu
0e00: 72 73 0a 20 20 23 20 72 65 73 70 6f 6e 73 65 0a  rs.  # response.
0e10: 20 20 24 6c 65 6e 20 3d 20 73 79 73 72 65 61 64    $len = sysread
0e20: 28 20 24 73 6f 63 6b 2c 20 24 68 65 61 64 65 72  ( $sock, $header
0e30: 2c 20 34 20 29 20 6f 72 20 26 73 69 67 5f 65 72  , 4 ) or &sig_er
0e40: 72 6f 72 28 22 49 4e 56 41 4c 49 44 20 52 45 53  ror("INVALID RES
0e50: 50 4f 4e 53 45 3a 20 65 6d 70 74 79 20 72 65 73  PONSE: empty res
0e60: 70 6f 6e 73 65 22 29 3b 0a 20 20 28 20 24 6c 65  ponse");.  ( $le
0e70: 6e 20 3d 3d 20 34 20 61 6e 64 20 24 68 65 61 64  n == 4 and $head
0e80: 65 72 20 3d 7e 20 2f 5e 47 2f 20 29 20 6f 72 20  er =~ /^G/ ) or 
0e90: 26 73 69 67 5f 65 72 72 6f 72 28 22 49 4e 56 41  &sig_error("INVA
0ea0: 4c 49 44 20 52 45 53 50 4f 4e 53 45 3a 20 62 61  LID RESPONSE: ba
0eb0: 64 20 68 65 61 64 65 72 22 29 3b 0a 20 20 6d 79  d header");.  my
0ec0: 20 24 73 74 61 74 75 73 3b 0a 20 20 28 24 73 74   $status;.  ($st
0ed0: 61 74 75 73 2c 20 24 6c 65 6e 29 20 3d 20 75 6e  atus, $len) = un
0ee0: 70 61 63 6b 28 20 27 78 43 6e 27 2c 20 24 68 65  pack( 'xCn', $he
0ef0: 61 64 65 72 20 29 3b 0a 20 20 6d 79 20 24 72 65  ader );.  my $re
0f00: 73 70 6f 6e 73 65 3b 0a 20 20 28 20 73 79 73 72  sponse;.  ( sysr
0f10: 65 61 64 28 20 24 73 6f 63 6b 2c 20 24 72 65 73  ead( $sock, $res
0f20: 70 6f 6e 73 65 2c 20 24 6c 65 6e 20 29 20 3d 3d  ponse, $len ) ==
0f30: 20 24 6c 65 6e 20 29 20 6f 72 20 26 73 69 67 5f   $len ) or &sig_
0f40: 65 72 72 6f 72 28 22 49 4e 43 4f 4d 50 4c 45 54  error("INCOMPLET
0f50: 45 20 52 45 53 50 4f 4e 53 45 3a 20 24 72 65 73  E RESPONSE: $res
0f60: 70 6f 6e 73 65 22 29 3b 0a 20 20 23 20 65 78 69  ponse");.  # exi
0f70: 74 20 69 66 20 72 65 73 70 6f 6e 73 65 20 69 73  t if response is
0f80: 20 6e 6f 74 20 22 53 75 63 63 65 73 73 22 0a 20   not "Success". 
0f90: 20 69 66 20 28 20 24 73 74 61 74 75 73 20 61 6e   if ( $status an
0fa0: 64 20 24 72 65 73 70 6f 6e 73 65 20 3d 7e 20 2f  d $response =~ /
0fb0: 5e 45 72 72 6f 72 3a 20 53 75 63 63 65 73 73 5c  ^Error: Success\
0fc0: 6e 2f 69 20 29 20 7b 0a 20 20 20 20 26 73 69 67  n/i ) {.    &sig
0fd0: 5f 65 72 72 6f 72 28 22 55 4e 53 55 43 43 45 53  _error("UNSUCCES
0fe0: 53 46 55 4c 20 45 58 45 43 55 54 49 4f 4e 3a 20  SFUL EXECUTION: 
0ff0: 53 63 72 69 70 74 2d 66 75 20 65 72 72 6f 72 22  Script-fu error"
1000: 29 3b 0a 20 20 20 20 7d 0a 20 20 24 73 74 61 74  );.    }.  $stat
1010: 75 73 3b 20 0a 20 20 7d 0a 0a 23 20 64 65 66 69  us; .  }..# defi
1020: 6e 65 20 61 20 53 63 72 69 70 74 2d 66 75 20 75  ne a Script-fu u
1030: 74 69 6c 69 74 79 20 66 75 6e 63 74 69 6f 6e 20  tility function 
1040: 74 6f 20 73 61 76 65 20 66 72 61 6d 65 73 20 75  to save frames u
1050: 73 69 6e 67 20 74 68 65 20 50 4e 47 20 6f 72 20  sing the PNG or 
1060: 4a 50 47 0a 23 20 63 6f 6d 70 72 65 73 73 69 6f  JPG.# compressio
1070: 6e 20 6c 65 76 65 6c 73 20 73 70 65 63 69 66 69  n levels specifi
1080: 65 64 20 69 6e 20 27 67 69 6d 70 72 63 27 2e 20  ed in 'gimprc'. 
1090: 0a 23 20 54 6f 20 73 70 65 63 69 66 79 20 61 20  .# To specify a 
10a0: 50 4e 47 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  PNG compression 
10b0: 6c 65 76 65 6c 20 6f 66 20 35 2c 20 69 6e 63 6c  level of 5, incl
10c0: 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ude the followin
10d0: 67 20 6c 69 6e 65 0a 23 20 69 6e 20 67 69 6d 70  g line.# in gimp
10e0: 72 63 3a 0a 23 20 20 20 28 72 66 78 2d 70 6e 67  rc:.#   (rfx-png
10f0: 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20 22 35 22  -compression "5"
1100: 29 20 0a 23 20 49 66 20 6e 6f 74 20 73 70 65 63  ) .# If not spec
1110: 69 66 69 65 64 20 74 68 65 6e 20 61 20 64 65 66  ified then a def
1120: 61 75 6c 74 20 6c 65 76 65 6c 20 6f 66 20 22 33  ault level of "3
1130: 22 20 69 73 20 61 73 73 75 6d 65 64 2e 0a 23 20  " is assumed..# 
1140: 22 33 22 20 69 73 20 61 20 67 6f 6f 64 20 63 68  "3" is a good ch
1150: 6f 69 63 65 20 66 6f 72 20 50 4e 47 73 20 62 65  oice for PNGs be
1160: 63 61 75 73 65 20 68 69 67 68 65 72 20 6c 65 76  cause higher lev
1170: 65 6c 73 20 64 6f 75 62 6c 65 20 74 68 65 20 77  els double the w
1180: 72 69 74 65 0a 23 20 74 69 6d 65 73 20 77 68 69  rite.# times whi
1190: 6c 65 20 6f 6e 6c 79 20 6f 66 66 65 72 69 6e 67  le only offering
11a0: 20 61 62 6f 75 74 20 31 35 25 20 72 65 64 75 63   about 15% reduc
11b0: 74 69 6f 6e 20 69 6e 20 66 69 6c 65 20 73 69 7a  tion in file siz
11c0: 65 2e 0a 23 20 54 6f 20 73 70 65 63 69 66 79 20  e..# To specify 
11d0: 61 20 4a 50 47 20 63 6f 6d 70 72 65 73 73 69 6f  a JPG compressio
11e0: 6e 20 6c 65 76 65 6c 20 6f 66 20 38 35 2c 20 69  n level of 85, i
11f0: 6e 63 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f  nclude the follo
1200: 77 69 6e 67 20 6c 69 6e 65 0a 23 20 69 6e 20 67  wing line.# in g
1210: 69 6d 70 72 63 3a 0a 23 20 20 20 28 72 66 78 2d  imprc:.#   (rfx-
1220: 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20  jpg-compression 
1230: 22 38 35 22 29 20 0a 23 20 49 66 20 6e 6f 74 20  "85") .# If not 
1240: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 61  specified then a
1250: 20 64 65 66 61 75 6c 74 20 6c 65 76 65 6c 20 6f   default level o
1260: 66 20 22 39 33 22 20 69 73 20 61 73 73 75 6d 65  f "93" is assume
1270: 64 2e 0a 0a 23 20 4e 4f 54 45 3a 20 27 72 66 78  d...# NOTE: 'rfx
1280: 2d 73 61 76 65 2d 66 72 61 6d 65 27 20 44 45 4c  -save-frame' DEL
1290: 45 54 45 53 20 74 68 65 20 69 6d 61 67 65 2e 20  ETES the image. 
12a0: 20 0a 26 72 66 78 5f 73 65 6e 64 6d 73 67 28 20   .&rfx_sendmsg( 
12b0: 71 71 7b 0a 20 20 28 62 65 67 69 6e 0a 20 20 20  qq{.  (begin.   
12c0: 20 28 64 65 66 69 6e 65 20 72 66 78 2d 63 75 72   (define rfx-cur
12d0: 74 6d 70 64 69 72 20 22 24 63 75 72 74 6d 70 64  tmpdir "$curtmpd
12e0: 69 72 22 29 0a 20 20 20 20 28 64 65 66 69 6e 65  ir").    (define
12f0: 20 72 66 78 2d 69 6d 67 65 78 74 20 22 24 69 6d   rfx-imgext "$im
1300: 67 5f 65 78 74 22 29 0a 20 20 20 20 28 75 6e 6c  g_ext").    (unl
1310: 65 73 73 20 28 64 65 66 69 6e 65 64 3f 20 27 72  ess (defined? 'r
1320: 66 78 2d 73 61 76 65 2d 66 72 61 6d 65 29 0a 20  fx-save-frame). 
1330: 20 20 20 20 20 28 64 65 66 69 6e 65 20 72 66 78       (define rfx
1340: 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e  -png-compression
1350: 20 28 63 61 74 63 68 20 23 66 20 28 67 69 6d 70   (catch #f (gimp
1360: 2d 67 69 6d 70 72 63 2d 71 75 65 72 79 20 22 72  -gimprc-query "r
1370: 66 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69  fx-png-compressi
1380: 6f 6e 22 29 29 29 0a 20 20 20 20 20 20 28 73 65  on"))).      (se
1390: 74 21 20 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72  t! rfx-png-compr
13a0: 65 73 73 69 6f 6e 20 28 69 66 20 72 66 78 2d 70  ession (if rfx-p
13b0: 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 0a 20  ng-compression. 
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e0: 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72   (string->number
13f0: 20 28 63 61 72 20 72 66 78 2d 70 6e 67 2d 63 6f   (car rfx-png-co
1400: 6d 70 72 65 73 73 69 6f 6e 29 29 0a 20 20 20 20  mpression)).    
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 20 33 20                3 
1430: 29 29 0a 20 20 20 20 20 20 28 64 65 66 69 6e 65  )).      (define
1440: 20 72 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73   rfx-jpg-compres
1450: 73 69 6f 6e 20 28 63 61 74 63 68 20 23 66 20 28  sion (catch #f (
1460: 67 69 6d 70 2d 67 69 6d 70 72 63 2d 71 75 65 72  gimp-gimprc-quer
1470: 79 20 22 72 66 78 2d 6a 70 67 2d 63 6f 6d 70 72  y "rfx-jpg-compr
1480: 65 73 73 69 6f 6e 22 29 29 29 0a 20 20 20 20 20  ession"))).     
1490: 20 28 73 65 74 21 20 72 66 78 2d 6a 70 67 2d 63   (set! rfx-jpg-c
14a0: 6f 6d 70 72 65 73 73 69 6f 6e 20 28 69 66 20 72  ompression (if r
14b0: 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69  fx-jpg-compressi
14c0: 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  on.             
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e0: 20 20 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75       (string->nu
14f0: 6d 62 65 72 20 28 63 61 72 20 72 66 78 2d 6a 70  mber (car rfx-jp
1500: 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 29 29 0a  g-compression)).
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 39 33 20 29 29 0a 20 20 20 20 20 20 28 64    93 )).      (d
1540: 65 66 69 6e 65 20 28 72 66 78 2d 73 61 76 65 2d  efine (rfx-save-
1550: 66 72 61 6d 65 20 69 6d 61 67 65 20 62 61 73 65  frame image base
1560: 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 28 6c  name).        (l
1570: 65 74 20 28 28 66 69 6c 65 6e 61 6d 65 20 28 73  et ((filename (s
1580: 74 72 69 6e 67 2d 61 70 70 65 6e 64 20 72 66 78  tring-append rfx
1590: 2d 63 75 72 74 6d 70 64 69 72 20 44 49 52 2d 53  -curtmpdir DIR-S
15a0: 45 50 41 52 41 54 4f 52 20 62 61 73 65 6e 61 6d  EPARATOR basenam
15b0: 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
15c0: 20 20 28 6c 61 79 65 72 20 28 63 61 72 20 28 67    (layer (car (g
15d0: 69 6d 70 2d 69 6d 61 67 65 2d 67 65 74 2d 61 63  imp-image-get-ac
15e0: 74 69 76 65 2d 6c 61 79 65 72 20 69 6d 61 67 65  tive-layer image
15f0: 29 29 29 20 29 0a 20 20 20 20 20 20 20 20 20 20  ))) ).          
1600: 28 69 66 20 28 73 74 72 69 6e 67 2d 63 69 3d 3f  (if (string-ci=?
1610: 20 72 66 78 2d 69 6d 67 65 78 74 20 22 2e 6a 70   rfx-imgext ".jp
1620: 67 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  g").            
1630: 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20 20 20  (begin.         
1640: 20 20 20 20 20 28 67 69 6d 70 2d 63 6f 6e 74 65       (gimp-conte
1650: 78 74 2d 70 75 73 68 29 0a 20 20 20 20 20 20 20  xt-push).       
1660: 20 20 20 20 20 20 20 28 67 69 6d 70 2d 63 6f 6e         (gimp-con
1670: 74 65 78 74 2d 73 65 74 2d 62 61 63 6b 67 72 6f  text-set-backgro
1680: 75 6e 64 20 27 28 36 20 36 20 36 29 29 0a 20 20  und '(6 6 6)).  
1690: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74              (let
16a0: 20 6c 6f 6f 70 20 28 28 6c 61 79 65 72 73 20 28   loop ((layers (
16b0: 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20 28 63 61  vector->list (ca
16c0: 64 72 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 67  dr (gimp-image-g
16d0: 65 74 2d 6c 61 79 65 72 73 20 69 6d 61 67 65 29  et-layers image)
16e0: 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  )))).           
16f0: 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 6e 75       (unless (nu
1700: 6c 6c 3f 20 6c 61 79 65 72 73 29 0a 20 20 20 20  ll? layers).    
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
1720: 66 20 28 3d 20 28 63 61 72 20 6c 61 79 65 72 73  f (= (car layers
1730: 29 20 6c 61 79 65 72 29 0a 20 20 20 20 20 20 20  ) layer).       
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 69               (gi
1750: 6d 70 2d 64 72 61 77 61 62 6c 65 2d 73 65 74 2d  mp-drawable-set-
1760: 76 69 73 69 62 6c 65 20 6c 61 79 65 72 20 54 52  visible layer TR
1770: 55 45 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  UE).            
1780: 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 64 72          (gimp-dr
1790: 61 77 61 62 6c 65 2d 73 65 74 2d 76 69 73 69 62  awable-set-visib
17a0: 6c 65 20 28 63 61 72 20 6c 61 79 65 72 73 29 20  le (car layers) 
17b0: 46 41 4c 53 45 29 20 29 0a 20 20 20 20 20 20 20  FALSE) ).       
17c0: 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70             (loop
17d0: 20 28 63 64 72 20 6c 61 79 65 72 73 29 29 20 29   (cdr layers)) )
17e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
17f0: 28 73 65 74 21 20 6c 61 79 65 72 20 28 63 61 72  (set! layer (car
1800: 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 66 6c 61   (gimp-image-fla
1810: 74 74 65 6e 20 69 6d 61 67 65 29 29 29 0a 20 20  tten image))).  
1820: 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c              (fil
1830: 65 2d 6a 70 65 67 2d 73 61 76 65 20 52 55 4e 2d  e-jpeg-save RUN-
1840: 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56 45 20 0a  NONINTERACTIVE .
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d                im
1870: 61 67 65 20 0a 20 20 20 20 20 20 20 20 20 20 20  age .           
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1890: 20 20 20 6c 61 79 65 72 0a 20 20 20 20 20 20 20     layer.       
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 20 20 20 66 69 6c 65 6e 61 6d 65 20         filename 
18c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
18e0: 69 6c 65 6e 61 6d 65 20 0a 20 20 20 20 20 20 20  ilename .       
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 20 20 20 20 20 20 20 28 2f 20 72 66 78 2d 6a 70         (/ rfx-jp
1910: 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20 31 30  g-compression 10
1920: 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0).             
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1940: 20 30 20 3b 20 73 6d 6f 6f 74 68 69 6e 67 20 0a   0 ; smoothing .
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 20 20 31 20                1 
1970: 3b 20 6f 70 74 69 6d 69 7a 65 20 0a 20 20 20 20  ; optimize .    
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 20 20 31 20 3b 20 70 72            1 ; pr
19a0: 6f 67 72 65 73 73 69 76 65 20 0a 20 20 20 20 20  ogressive .     
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c0: 20 20 20 20 20 20 20 20 20 22 22 20 3b 20 63 6f           "" ; co
19d0: 6d 6d 65 6e 74 20 0a 20 20 20 20 20 20 20 20 20  mment .         
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 20 20 20 30 20 3b 20 73 75 62 73 6d 70 20       0 ; subsmp 
1a00: 28 30 2d 34 29 0a 20 20 20 20 20 20 20 20 20 20  (0-4).          
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 20 20 20 20 31 20 3b 20 62 61 73 65 6c 69 6e 65      1 ; baseline
1a30: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a50: 30 20 3b 20 72 65 73 74 61 72 74 20 0a 20 20 20  0 ; restart .   
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a70: 20 20 20 20 20 20 20 20 20 20 20 30 20 3b 64 63             0 ;dc
1a80: 74 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t .             
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa0: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ).             
1ab0: 20 28 67 69 6d 70 2d 63 6f 6e 74 65 78 74 2d 70   (gimp-context-p
1ac0: 6f 70 29 20 29 0a 20 20 20 20 20 20 20 20 20 20  op) ).          
1ad0: 20 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20    (begin.       
1ae0: 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28         (unless (
1af0: 7a 65 72 6f 3f 20 28 63 61 72 20 28 67 69 6d 70  zero? (car (gimp
1b00: 2d 69 6d 61 67 65 2d 62 61 73 65 2d 74 79 70 65  -image-base-type
1b10: 20 69 6d 61 67 65 29 29 29 0a 20 20 20 20 20 20   image))).      
1b20: 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d            (gimp-
1b30: 69 6d 61 67 65 2d 63 6f 6e 76 65 72 74 2d 72 67  image-convert-rg
1b40: 62 20 69 6d 61 67 65 29 20 29 0a 20 20 20 20 20  b image) ).     
1b50: 20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 70           (file-p
1b60: 6e 67 2d 73 61 76 65 32 20 52 55 4e 2d 4e 4f 4e  ng-save2 RUN-NON
1b70: 49 4e 54 45 52 41 43 54 49 56 45 20 0a 20 20 20  INTERACTIVE .   
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 20 20 20 20 20 20 20 20 20 20 20 69 6d 61 67 65             image
1ba0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 6c 61 79 65 72 0a 20 20 20 20 20 20 20 20 20 20  layer.          
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 20 20 20 20 66 69 6c 65 6e 61 6d 65 20 0a 20 20      filename .  
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 20 20 20 66 69 6c 65              file
1c10: 6e 61 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20  name .          
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 46 41 4c 53 45 20 3b 20 69 6e 74 65      FALSE ; inte
1c40: 72 6c 61 63 65 0a 20 20 20 20 20 20 20 20 20 20  rlace.          
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 72 66 78 2d 70 6e 67 2d 63 6f 6d 70      rfx-png-comp
1c70: 72 65 73 73 69 6f 6e 0a 20 20 20 20 20 20 20 20  ression.        
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 20 20 20 20 20 46 41 4c 53 45 20 3b 20 62 6b        FALSE ; bk
1ca0: 67 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  gd.             
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc0: 20 28 63 61 72 20 28 67 69 6d 70 2d 64 72 61 77   (car (gimp-draw
1cd0: 61 62 6c 65 2d 68 61 73 2d 61 6c 70 68 61 20 6c  able-has-alpha l
1ce0: 61 79 65 72 29 29 0a 20 20 20 20 20 20 20 20 20  ayer)).         
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 20 20 20 20 20 46 41 4c 53 45 20 3b 20 6f 66 66       FALSE ; off
1d10: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d30: 46 41 4c 53 45 20 3b 20 70 68 79 73 0a 20 20 20  FALSE ; phys.   
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 20 20 20 20 20 20 20 20 20 20 46 41 4c 53 45             FALSE
1d60: 20 3b 20 74 69 6d 65 0a 20 20 20 20 20 20 20 20   ; time.        
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d80: 20 20 20 20 20 20 54 52 55 45 20 20 3b 20 63 6f        TRUE  ; co
1d90: 6d 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20  mment.          
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db0: 20 20 20 20 46 41 4c 53 45 20 3b 20 73 76 74 72      FALSE ; svtr
1dc0: 61 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ans.            
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de0: 20 20 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    ))).          
1df0: 28 67 69 6d 70 2d 69 6d 61 67 65 2d 64 65 6c 65  (gimp-image-dele
1e00: 74 65 20 69 6d 61 67 65 29 20 29 29 29 29 0a 20  te image) )))). 
1e10: 20 7d 0a 20 20 29 3b 0a 3c 2f 70 72 65 3e 0a 0a   }.  );.</pre>..
1e20: 3c 6c 6f 6f 70 3e 0a 26 72 66 78 5f 73 65 6e 64  <loop>.&rfx_send
1e30: 6d 73 67 20 28 0a 20 20 71 71 7b 0a 20 20 0a 20  msg (.  qq{.  . 
1e40: 20 20 20 28 6c 65 74 2a 20 28 28 69 6e 70 75 74     (let* ((input
1e50: 2d 66 69 6c 65 20 28 73 74 72 69 6e 67 2d 61 70  -file (string-ap
1e60: 70 65 6e 64 20 22 24 63 75 72 74 6d 70 64 69 72  pend "$curtmpdir
1e70: 22 20 44 49 52 2d 53 45 50 41 52 41 54 4f 52 20  " DIR-SEPARATOR 
1e80: 22 24 69 6e 22 29 29 0a 20 20 20 20 20 20 20 20  "$in")).        
1e90: 20 20 20 28 69 6d 61 67 65 20 28 63 61 72 20 28     (image (car (
1ea0: 67 69 6d 70 2d 66 69 6c 65 2d 6c 6f 61 64 20 52  gimp-file-load R
1eb0: 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56  UN-NONINTERACTIV
1ec0: 45 20 69 6e 70 75 74 2d 66 69 6c 65 20 69 6e 70  E input-file inp
1ed0: 75 74 2d 66 69 6c 65 29 29 29 0a 20 20 20 20 20  ut-file))).     
1ee0: 20 20 20 20 20 20 28 6c 61 79 65 72 20 28 63 61        (layer (ca
1ef0: 72 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 67 65  r (gimp-image-ge
1f00: 74 2d 61 63 74 69 76 65 2d 6c 61 79 65 72 20 69  t-active-layer i
1f10: 6d 61 67 65 29 29 29 20 29 0a 20 20 20 20 20 20  mage))) ).      
1f20: 28 70 6c 75 67 2d 69 6e 2d 75 6e 73 68 61 72 70  (plug-in-unsharp
1f30: 2d 6d 61 73 6b 20 52 55 4e 2d 4e 4f 4e 49 4e 54  -mask RUN-NONINT
1f40: 45 52 41 43 54 49 56 45 0a 20 20 20 20 20 20 20  ERACTIVE.       
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f60: 20 20 20 20 20 69 6d 61 67 65 0a 20 20 20 20 20       image.     
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 20 20 20 20 20 20 20 6c 61 79 65 72 0a 20 20 20         layer.   
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa0: 20 20 20 20 20 20 20 20 20 28 6c 65 6e 67 74 68           (length
1fb0: 20 28 6d 65 6d 62 65 72 20 31 20 28 6c 69 73 74   (member 1 (list
1fc0: 20 24 70 38 20 24 70 37 20 24 70 36 20 24 70 35   $p8 $p7 $p6 $p5
1fd0: 20 24 70 34 20 0a 20 20 20 20 20 20 20 20 20 20   $p4 .          
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2000: 20 20 20 20 20 20 20 20 20 20 24 70 33 20 24 70            $p3 $p
2010: 32 20 24 70 31 20 24 70 30 20 29 29 29 0a 20 20  2 $p1 $p0 ))).  
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2030: 20 20 20 20 20 20 20 20 20 20 24 70 39 20 3b 20            $p9 ; 
2040: 61 64 64 69 74 69 76 65 0a 20 20 20 20 20 20 20  additive.       
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2060: 20 20 20 20 20 24 70 31 30 20 3b 20 72 6f 74 61       $p10 ; rota
2070: 74 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  ted.            
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 29 20 0a 20 20 20 20 20 20 28 72 66 78 2d 73 61  ) .      (rfx-sa
20a0: 76 65 2d 66 72 61 6d 65 20 69 6d 61 67 65 20 22  ve-frame image "
20b0: 24 6f 75 74 22 29 20 29 0a 0a 20 20 20 20 7d 0a  $out") )..    }.
20c0: 20 20 29 3b 0a 3c 2f 6c 6f 6f 70 3e 0a 0a 3c 70    );.</loop>..<p
20d0: 6f 73 74 3e 0a 3c 2f 70 6f 73 74 3e 0a 0a 3c 6f  ost>.</post>..<o
20e0: 6e 63 68 61 6e 67 65 3e 0a 3c 2f 6f 6e 63 68 61  nchange>.</oncha
20f0: 6e 67 65 3e 0a 0a                                nge>..