RFX-GIMP

Hex Artifact Content
Login

Artifact 7f1eaba5b1fa1d226825b3bb93979765373ba35e:


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 72 69 70 70 6c 65 0a 3c 2f 6e 61 6d 65 3e  >.ripple.</name>
0050: 0a 0a 3c 76 65 72 73 69 6f 6e 3e 0a 31 0a 3c 2f  ..<version>.1.</
0060: 76 65 72 73 69 6f 6e 3e 0a 0a 3c 61 75 74 68 6f  version>..<autho
0070: 72 3e 0a 73 61 75 6c 67 6f 6f 64 65 7c 68 74 74  r>.saulgoode|htt
0080: 70 3a 2f 2f 63 68 69 73 65 6c 61 70 70 2e 63 6f  p://chiselapp.co
0090: 6d 2f 75 73 65 72 2f 73 61 75 6c 67 6f 6f 64 65  m/user/saulgoode
00a0: 2f 72 65 70 6f 73 69 74 6f 72 79 2f 52 46 58 2d  /repository/RFX-
00b0: 47 49 4d 50 2f 68 6f 6d 65 0a 3c 2f 61 75 74 68  GIMP/home.</auth
00c0: 6f 72 3e 0a 0a 3c 64 65 73 63 72 69 70 74 69 6f  or>..<descriptio
00d0: 6e 3e 0a 52 69 70 70 6c 65 7c 72 69 70 70 6c 69  n>.Ripple|rippli
00e0: 6e 67 7c 31 7c 31 7c 0a 3c 2f 64 65 73 63 72 69  ng|1|1|.</descri
00f0: 70 74 69 6f 6e 3e 0a 0a 3c 72 65 71 75 69 72 65  ption>..<require
0100: 73 3e 0a 67 69 6d 70 0a 3c 2f 72 65 71 75 69 72  s>.gimp.</requir
0110: 65 73 3e 0a 0a 3c 70 61 72 61 6d 73 3e 0a 72 69  es>..<params>.ri
0120: 70 70 6c 65 2d 70 65 72 69 6f 64 7c 50 65 72 69  pple-period|Peri
0130: 6f 64 7c 6e 75 6d 30 7c 35 30 7c 30 7c 31 30 30  od|num0|50|0|100
0140: 30 30 7c 0a 72 69 70 70 6c 65 2d 61 6d 70 7c 41  00|.ripple-amp|A
0150: 6d 70 6c 69 74 75 64 65 7c 6e 75 6d 30 7c 32 30  mplitude|num0|20
0160: 7c 30 7c 31 30 30 30 30 7c 0a 72 69 70 70 6c 65  |0|10000|.ripple
0170: 2d 6d 6f 64 75 6c 61 74 69 6f 6e 7c 4d 6f 64 75  -modulation|Modu
0180: 6c 61 74 69 6f 6e 7c 6e 75 6d 32 7c 30 2e 30 30  lation|num2|0.00
0190: 7c 30 2e 30 30 7c 31 30 30 30 30 2e 30 30 7c 30  |0.00|10000.00|0
01a0: 2e 32 35 7c 0a 72 69 70 70 6c 65 2d 6d 6f 64 2d  .25|.ripple-mod-
01b0: 74 79 70 65 7c 4d 6f 64 75 6c 61 74 69 6f 6e 20  type|Modulation 
01c0: 54 79 70 65 7c 73 74 72 69 6e 67 5f 6c 69 73 74  Type|string_list
01d0: 7c 30 7c 4c 69 6e 65 61 72 7c 53 69 6e 75 73 6f  |0|Linear|Sinuso
01e0: 69 64 61 6c 7c 0a 72 69 70 70 6c 65 2d 64 69 72  idal|.ripple-dir
01f0: 65 63 74 69 6f 6e 7c 56 65 72 74 69 63 61 6c 7c  ection|Vertical|
0200: 62 6f 6f 6c 7c 31 7c 0a 72 69 70 70 6c 65 2d 65  bool|1|.ripple-e
0210: 64 67 65 7c 45 64 67 65 20 48 61 6e 64 6c 69 6e  dge|Edge Handlin
0220: 67 7c 73 74 72 69 6e 67 5f 6c 69 73 74 7c 30 7c  g|string_list|0|
0230: 53 6d 65 61 72 7c 57 72 61 70 7c 42 6c 61 6e 6b  Smear|Wrap|Blank
0240: 7c 0a 72 69 70 70 6c 65 2d 73 69 6e 65 7c 53 69  |.ripple-sine|Si
0250: 6e 65 20 57 61 76 65 7c 62 6f 6f 6c 7c 31 7c 31  ne Wave|bool|1|1
0260: 7c 0a 72 69 70 70 6c 65 2d 74 72 69 61 6e 67 6c  |.ripple-triangl
0270: 65 7c 54 72 69 61 6e 67 6c 65 20 57 61 76 65 7c  e|Triangle Wave|
0280: 62 6f 6f 6c 7c 30 7c 31 7c 0a 72 69 70 70 6c 65  bool|0|1|.ripple
0290: 2d 76 65 6c 6f 63 69 74 79 7c 56 65 6c 6f 63 69  -velocity|Veloci
02a0: 74 79 7c 6e 75 6d 30 7c 30 7c 2d 31 30 30 30 30  ty|num0|0|-10000
02b0: 7c 31 30 30 30 30 7c 0a 3c 2f 70 61 72 61 6d 73  |10000|.</params
02c0: 3e 0a 0a 3c 70 61 72 61 6d 5f 77 69 6e 64 6f 77  >..<param_window
02d0: 3e 0a 3c 2f 70 61 72 61 6d 5f 77 69 6e 64 6f 77  >.</param_window
02e0: 3e 0a 0a 3c 70 72 6f 70 65 72 74 69 65 73 3e 0a  >..<properties>.
02f0: 30 78 30 30 30 31 0a 3c 2f 70 72 6f 70 65 72 74  0x0001.</propert
0300: 69 65 73 3e 0a 0a 3c 6c 61 6e 67 75 61 67 65 5f  ies>..<language_
0310: 63 6f 64 65 3e 0a 30 78 46 30 0a 3c 2f 6c 61 6e  code>.0xF0.</lan
0320: 67 75 61 67 65 5f 63 6f 64 65 3e 0a 0a 3c 70 72  guage_code>..<pr
0330: 65 3e 0a 23 20 54 68 69 73 20 70 72 6f 67 72 61  e>.# This progra
0340: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
0350: 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69  re; you can redi
0360: 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f  stribute it and/
0370: 6f 72 20 6d 6f 64 69 66 79 0a 23 20 69 74 20 75  or modify.# it u
0380: 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f  nder the terms o
0390: 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61  f the GNU Genera
03a0: 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65  l Public License
03b0: 20 76 65 72 73 69 6f 6e 20 33 20 6f 72 20 68 69   version 3 or hi
03c0: 67 68 65 72 0a 23 20 61 73 20 70 75 62 6c 69 73  gher.# as publis
03d0: 68 65 64 20 62 79 20 74 68 65 20 46 72 65 65 20  hed by the Free 
03e0: 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74  Software Foundat
03f0: 69 6f 6e 2e 0a 0a 75 73 65 20 49 4f 3a 3a 53 6f  ion...use IO::So
0400: 63 6b 65 74 3b 20 0a 75 73 65 20 54 65 78 74 3a  cket; .use Text:
0410: 3a 42 61 6c 61 6e 63 65 64 3b 0a 0a 69 66 20 28  :Balanced;..if (
0420: 24 45 4e 56 7b 27 52 46 58 47 49 4d 50 5f 50 4f  $ENV{'RFXGIMP_PO
0430: 52 54 27 7d 29 20 7b 0a 20 20 24 72 66 78 5f 70  RT'}) {.  $rfx_p
0440: 6f 72 74 20 3d 20 24 45 4e 56 7b 27 52 46 58 47  ort = $ENV{'RFXG
0450: 49 4d 50 5f 50 4f 52 54 27 7d 3b 0a 20 20 7d 0a  IMP_PORT'};.  }.
0460: 65 6c 73 65 20 7b 0a 20 20 24 72 66 78 5f 70 6f  else {.  $rfx_po
0470: 72 74 20 3d 20 31 30 30 30 38 3b 20 0a 20 20 7d  rt = 10008; .  }
0480: 0a 0a 24 73 6f 63 6b 20 3d 20 6e 65 77 20 49 4f  ..$sock = new IO
0490: 3a 3a 53 6f 63 6b 65 74 3a 3a 49 4e 45 54 20 28  ::Socket::INET (
04a0: 20 50 65 65 72 41 64 64 72 20 3d 3e 20 27 6c 6f   PeerAddr => 'lo
04b0: 63 61 6c 68 6f 73 74 27 2c 20 0a 20 20 20 20 20  calhost', .     
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04d0: 20 20 20 20 20 20 20 20 20 20 50 65 65 72 50 6f            PeerPo
04e0: 72 74 20 3d 3e 20 24 72 66 78 5f 70 6f 72 74 2c  rt => $rfx_port,
04f0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 50 72 6f 74 6f 20 3d 3e 20 27 74 63 70 27 20   Proto => 'tcp' 
0520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 29 3b 0a 69 66 20 28 20 6e 6f 74 20 64 65 66 69  );.if ( not defi
0550: 6e 65 64 20 24 73 6f 63 6b 20 29 20 7b 0a 20 20  ned $sock ) {.  
0560: 6d 79 20 24 72 66 78 5f 70 69 64 20 3d 20 66 6f  my $rfx_pid = fo
0570: 72 6b 28 29 3b 0a 20 20 69 66 20 28 6e 6f 74 20  rk();.  if (not 
0580: 64 65 66 69 6e 65 64 20 24 72 66 78 5f 70 69 64  defined $rfx_pid
0590: 29 20 7b 0a 20 20 20 20 26 73 69 67 5f 65 72 72  ) {.    &sig_err
05a0: 6f 72 28 22 55 4e 41 42 4c 45 20 54 4f 20 45 58  or("UNABLE TO EX
05b0: 45 43 55 54 45 20 47 49 4d 50 3a 20 4e 6f 74 20  ECUTE GIMP: Not 
05c0: 65 6e 6f 75 67 68 20 72 65 73 6f 75 72 63 65 73  enough resources
05d0: 22 29 3b 0a 20 20 20 20 7d 20 0a 20 20 65 6c 73  ");.    } .  els
05e0: 69 66 20 28 24 72 66 78 5f 70 69 64 20 3d 3d 20  if ($rfx_pid == 
05f0: 30 29 20 7b 0a 20 20 20 20 69 66 20 28 20 2d 66  0) {.    if ( -f
0600: 20 24 74 6d 70 64 69 72 20 2e 20 22 72 66 78 67   $tmpdir . "rfxg
0610: 69 6d 70 2e 70 69 64 22 29 20 7b 0a 20 20 20 20  imp.pid") {.    
0620: 20 20 6f 70 65 6e 28 50 49 44 46 49 4c 45 2c 20    open(PIDFILE, 
0630: 24 74 6d 70 64 69 72 20 2e 20 22 72 66 78 67 69  $tmpdir . "rfxgi
0640: 6d 70 2e 70 69 64 22 29 3b 0a 20 20 20 20 20 20  mp.pid");.      
0650: 23 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c  # should probabl
0660: 79 20 64 6f 20 73 6f 6d 65 20 73 61 6e 69 74 79  y do some sanity
0670: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 74 68   checking for th
0680: 65 20 6f 66 66 20 63 68 61 6e 63 65 20 74 68 61  e off chance tha
0690: 74 0a 20 20 20 20 20 20 23 20 74 68 65 20 50 49  t.      # the PI
06a0: 44 20 68 61 73 20 62 65 65 6e 20 72 65 63 79 63  D has been recyc
06b0: 6c 65 64 20 6f 72 20 74 68 65 20 73 79 73 74 65  led or the syste
06c0: 6d 20 68 61 73 20 72 65 62 6f 6f 74 65 64 20 28  m has rebooted (
06d0: 65 2e 67 2c 20 63 68 65 63 6b 0a 20 20 20 20 20  e.g, check.     
06e0: 20 23 20 69 66 20 70 72 6f 63 65 73 73 20 77 61   # if process wa
06f0: 73 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  s executed with 
0700: 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 2e 20 42  /usr/bin/perl. B
0710: 75 74 20 66 6f 72 20 6e 6f 77 2e 2e 2e 0a 20 20  ut for now....  
0720: 20 20 20 20 6b 69 6c 6c 28 31 35 2c 20 2d 3c 50      kill(15, -<P
0730: 49 44 46 49 4c 45 3e 29 3b 20 23 20 74 68 65 20  IDFILE>); # the 
0740: 6e 65 67 61 74 69 76 65 20 50 49 44 20 6d 65 61  negative PID mea
0750: 6e 73 20 6b 69 6c 6c 20 61 6c 6c 20 63 68 69 6c  ns kill all chil
0760: 64 72 65 6e 2c 20 74 6f 6f 2e 0a 20 20 20 20 20  dren, too..     
0770: 20 63 6c 6f 73 65 28 50 49 44 46 49 4c 45 29 3b   close(PIDFILE);
0780: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 73 65 74  .      }.    set
0790: 70 67 69 64 28 24 24 2c 30 29 3b 20 23 20 63 68  pgid($$,0); # ch
07a0: 61 6e 67 65 20 74 68 65 20 70 67 72 6f 75 70 20  ange the pgroup 
07b0: 74 6f 20 74 68 69 73 20 66 6f 72 6b 65 64 20 70  to this forked p
07c0: 72 6f 63 65 73 73 2c 20 72 61 74 68 65 72 20 74  rocess, rather t
07d0: 68 61 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  han.            
07e0: 20 20 20 20 20 20 20 23 20 74 68 65 20 6f 72 69         # the ori
07f0: 67 69 6e 61 6c 20 4c 69 56 45 53 20 28 73 6f 20  ginal LiVES (so 
0800: 74 68 61 74 20 77 65 20 64 6f 6e 27 74 20 6b 69  that we don't ki
0810: 6c 6c 20 4c 69 56 45 53 20 77 68 65 6e 20 0a 20  ll LiVES when . 
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 20 20 23 20 74 68 69 73 20 70 72 67 72 6f 75 70    # this prgroup
0840: 20 69 73 20 6b 69 6c 6c 65 64 29 2e 0a 20 20 20   is killed)..   
0850: 20 6f 70 65 6e 28 50 49 44 46 49 4c 45 2c 20 22   open(PIDFILE, "
0860: 3e 22 20 2e 20 24 74 6d 70 64 69 72 20 2e 20 22  >" . $tmpdir . "
0870: 72 66 78 67 69 6d 70 2e 70 69 64 22 29 3b 20 23  rfxgimp.pid"); #
0880: 20 6f 76 65 72 77 72 69 74 65 20 6f 6c 64 20 66   overwrite old f
0890: 69 6c 65 0a 20 20 20 20 70 72 69 6e 74 20 50 49  ile.    print PI
08a0: 44 46 49 4c 45 20 24 24 3b 0a 20 20 20 20 63 6c  DFILE $$;.    cl
08b0: 6f 73 65 28 50 49 44 46 49 4c 45 29 3b 0a 20 20  ose(PIDFILE);.  
08c0: 20 20 6d 79 20 24 73 74 61 72 74 5f 67 69 6d 70    my $start_gimp
08d0: 20 3d 20 71 71 7b 20 67 69 6d 70 20 2d 69 20 2d   = qq{ gimp -i -
08e0: 62 20 22 28 70 6c 75 67 2d 69 6e 2d 73 63 72 69  b "(plug-in-scri
08f0: 70 74 2d 66 75 2d 73 65 72 76 65 72 20 31 20 24  pt-fu-server 1 $
0900: 72 66 78 5f 70 6f 72 74 20 5c 5c 5c 22 5c 5c 5c  rfx_port \\\"\\\
0910: 22 29 22 20 26 20 7d 3b 0a 20 20 20 20 73 79 73  ")" & };.    sys
0920: 74 65 6d 20 28 20 24 73 74 61 72 74 5f 67 69 6d  tem ( $start_gim
0930: 70 20 29 3b 20 23 20 74 68 6f 75 67 68 20 73 74  p ); # though st
0940: 61 72 74 65 64 20 61 73 20 73 65 70 61 72 61 74  arted as separat
0950: 65 20 70 72 6f 63 65 73 73 2c 20 47 49 4d 50 20  e process, GIMP 
0960: 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 20  now.            
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 23 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 69  # is part of thi
0990: 73 20 73 70 61 77 6e 65 64 20 63 68 69 6c 64 27  s spawned child'
09a0: 73 20 70 67 72 6f 75 70 2c 20 6e 6f 74 20 74 68  s pgroup, not th
09b0: 65 20 4c 69 56 45 53 20 70 67 72 6f 75 70 0a 20  e LiVES pgroup. 
09c0: 20 20 20 73 6c 65 65 70 28 29 3b 20 23 20 64 6f     sleep(); # do
09d0: 20 6e 6f 74 68 69 6e 67 2c 20 66 6f 72 65 76 65   nothing, foreve
09e0: 72 0a 20 20 20 20 26 73 69 67 5f 65 72 72 6f 72  r.    &sig_error
09f0: 28 22 47 49 4d 50 20 6b 69 6c 6c 65 64 20 62 79  ("GIMP killed by
0a00: 20 65 78 74 65 72 6e 61 6c 20 70 72 6f 63 65 73   external proces
0a10: 73 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 65  s\n");.    }.  e
0a20: 6c 73 65 20 7b 0a 20 20 20 20 77 68 69 6c 65 20  lse {.    while 
0a30: 28 6e 6f 74 20 64 65 66 69 6e 65 64 20 24 73 6f  (not defined $so
0a40: 63 6b 29 20 7b 0a 20 20 20 20 20 20 73 6c 65 65  ck) {.      slee
0a50: 70 20 28 31 29 3b 0a 20 20 20 20 20 20 24 73 6f  p (1);.      $so
0a60: 63 6b 20 3d 20 6e 65 77 20 49 4f 3a 3a 53 6f 63  ck = new IO::Soc
0a70: 6b 65 74 3a 3a 49 4e 45 54 20 28 20 50 65 65 72  ket::INET ( Peer
0a80: 41 64 64 72 20 3d 3e 20 27 6c 6f 63 61 6c 68 6f  Addr => 'localho
0a90: 73 74 27 2c 20 0a 20 20 20 20 20 20 20 20 20 20  st', .          
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 20 20 20 20 20 20 20 20 20 20 50 65 65 72 50             PeerP
0ac0: 6f 72 74 20 3d 3e 20 24 72 66 78 5f 70 6f 72 74  ort => $rfx_port
0ad0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 20 20 20 20 20 20 50 72 6f 74 6f 20 3d 3e          Proto =>
0b00: 20 27 74 63 70 27 20 0a 20 20 20 20 20 20 20 20   'tcp' .        
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0a               );.
0b30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
0b40: 7d 0a 0a 23 20 44 65 66 69 6e 65 20 61 20 50 65  }..# Define a Pe
0b50: 72 6c 20 73 75 62 72 6f 75 74 69 6e 65 20 66 6f  rl subroutine fo
0b60: 72 20 73 65 6e 64 69 6e 67 20 6d 65 73 73 61 67  r sending messag
0b70: 65 73 20 74 6f 20 74 68 65 20 53 46 20 73 65 72  es to the SF ser
0b80: 76 65 72 20 61 6e 64 20 77 61 69 74 69 6e 67 0a  ver and waiting.
0b90: 23 20 66 6f 72 20 61 20 72 65 73 70 6f 6e 73 65  # for a response
0ba0: 2e 0a 23 0a 73 75 62 20 72 66 78 5f 73 65 6e 64  ..#.sub rfx_send
0bb0: 6d 73 67 20 7b 0a 20 20 6d 79 20 24 6d 65 73 73  msg {.  my $mess
0bc0: 61 67 65 20 3d 20 24 5f 5b 30 5d 3b 0a 20 20 6d  age = $_[0];.  m
0bd0: 79 20 24 6c 65 6e 20 3d 20 6c 65 6e 67 74 68 20  y $len = length 
0be0: 28 24 6d 65 73 73 61 67 65 29 3b 0a 20 20 69 66  ($message);.  if
0bf0: 20 28 24 6c 65 6e 20 3e 20 36 35 35 33 35 29 20   ($len > 65535) 
0c00: 7b 0a 20 20 20 20 26 73 69 67 5f 65 72 72 6f 72  {.    &sig_error
0c10: 28 22 45 52 52 4f 52 3a 20 73 63 72 69 70 74 20  ("ERROR: script 
0c20: 69 73 20 74 6f 6f 20 6c 6f 6e 67 20 66 6f 72 20  is too long for 
0c30: 6f 6e 65 20 73 65 72 76 65 72 20 72 65 71 75 65  one server reque
0c40: 73 74 3a 20 24 6c 65 6e 20 3e 20 36 35 35 33 35  st: $len > 65535
0c50: 22 29 3b 0a 20 20 20 20 7d 3b 0a 20 20 23 20 73  ");.    };.  # s
0c60: 65 6e 64 20 73 63 72 69 70 74 20 74 6f 20 47 49  end script to GI
0c70: 4d 50 0a 20 20 6d 79 20 24 68 65 61 64 65 72 20  MP.  my $header 
0c80: 3d 20 70 61 63 6b 28 20 27 61 6e 27 2c 20 27 47  = pack( 'an', 'G
0c90: 27 2c 20 24 6c 65 6e 29 3b 0a 20 20 73 79 73 77  ', $len);.  sysw
0ca0: 72 69 74 65 28 20 24 73 6f 63 6b 2c 20 24 5f 20  rite( $sock, $_ 
0cb0: 29 20 66 6f 72 20 28 24 68 65 61 64 65 72 2c 20  ) for ($header, 
0cc0: 24 6d 65 73 73 61 67 65 29 3b 0a 20 20 23 20 77  $message);.  # w
0cd0: 61 69 74 20 66 6f 72 20 72 65 73 70 6f 6e 73 65  ait for response
0ce0: 0a 20 20 6d 79 20 24 72 69 6e 20 3d 20 27 27 3b  .  my $rin = '';
0cf0: 0a 20 20 76 65 63 28 20 24 72 69 6e 2c 20 66 69  .  vec( $rin, fi
0d00: 6c 65 6e 6f 28 24 73 6f 63 6b 29 2c 20 31 20 29  leno($sock), 1 )
0d10: 20 3d 20 31 3b 0a 20 20 73 65 6c 65 63 74 28 20   = 1;.  select( 
0d20: 24 72 69 6e 2c 20 20 75 6e 64 65 66 2c 20 75 6e  $rin,  undef, un
0d30: 64 65 66 2c 20 75 6e 64 65 66 20 29 3b 20 20 20  def, undef );   
0d40: 20 23 20 77 61 69 74 20 28 66 6f 72 65 76 65 72   # wait (forever
0d50: 29 20 66 6f 72 20 72 65 73 70 6f 6e 73 65 20 73  ) for response s
0d60: 74 61 72 74 0a 20 20 73 65 6c 65 63 74 28 20 75  tart.  select( u
0d70: 6e 64 65 66 2c 20 75 6e 64 65 66 2c 20 75 6e 64  ndef, undef, und
0d80: 65 66 2c 20 2e 31 20 29 3b 20 20 20 20 20 20 20  ef, .1 );       
0d90: 23 20 77 61 69 74 20 61 20 62 69 74 20 66 6f 72  # wait a bit for
0da0: 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 66 69 6e   response to fin
0db0: 69 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 20  ish.            
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
0de0: 20 20 69 6e 63 72 65 61 73 65 20 77 61 69 74 20    increase wait 
0df0: 69 66 20 49 4e 56 41 4c 49 44 2f 49 4e 43 4f 4d  if INVALID/INCOM
0e00: 50 4c 45 54 45 20 52 45 53 50 4f 4e 53 45 20 6f  PLETE RESPONSE o
0e10: 63 63 75 72 73 0a 20 20 23 20 72 65 73 70 6f 6e  ccurs.  # respon
0e20: 73 65 0a 20 20 24 6c 65 6e 20 3d 20 73 79 73 72  se.  $len = sysr
0e30: 65 61 64 28 20 24 73 6f 63 6b 2c 20 24 68 65 61  ead( $sock, $hea
0e40: 64 65 72 2c 20 34 20 29 20 6f 72 20 26 73 69 67  der, 4 ) or &sig
0e50: 5f 65 72 72 6f 72 28 22 49 4e 56 41 4c 49 44 20  _error("INVALID 
0e60: 52 45 53 50 4f 4e 53 45 3a 20 65 6d 70 74 79 20  RESPONSE: empty 
0e70: 72 65 73 70 6f 6e 73 65 22 29 3b 0a 20 20 28 20  response");.  ( 
0e80: 24 6c 65 6e 20 3d 3d 20 34 20 61 6e 64 20 24 68  $len == 4 and $h
0e90: 65 61 64 65 72 20 3d 7e 20 2f 5e 47 2f 20 29 20  eader =~ /^G/ ) 
0ea0: 6f 72 20 26 73 69 67 5f 65 72 72 6f 72 28 22 49  or &sig_error("I
0eb0: 4e 56 41 4c 49 44 20 52 45 53 50 4f 4e 53 45 3a  NVALID RESPONSE:
0ec0: 20 62 61 64 20 68 65 61 64 65 72 22 29 3b 0a 20   bad header");. 
0ed0: 20 6d 79 20 24 73 74 61 74 75 73 3b 0a 20 20 28   my $status;.  (
0ee0: 24 73 74 61 74 75 73 2c 20 24 6c 65 6e 29 20 3d  $status, $len) =
0ef0: 20 75 6e 70 61 63 6b 28 20 27 78 43 6e 27 2c 20   unpack( 'xCn', 
0f00: 24 68 65 61 64 65 72 20 29 3b 0a 20 20 6d 79 20  $header );.  my 
0f10: 24 72 65 73 70 6f 6e 73 65 3b 0a 20 20 28 20 73  $response;.  ( s
0f20: 79 73 72 65 61 64 28 20 24 73 6f 63 6b 2c 20 24  ysread( $sock, $
0f30: 72 65 73 70 6f 6e 73 65 2c 20 24 6c 65 6e 20 29  response, $len )
0f40: 20 3d 3d 20 24 6c 65 6e 20 29 20 6f 72 20 26 73   == $len ) or &s
0f50: 69 67 5f 65 72 72 6f 72 28 22 49 4e 43 4f 4d 50  ig_error("INCOMP
0f60: 4c 45 54 45 20 52 45 53 50 4f 4e 53 45 3a 20 24  LETE RESPONSE: $
0f70: 72 65 73 70 6f 6e 73 65 22 29 3b 0a 20 20 23 20  response");.  # 
0f80: 65 78 69 74 20 69 66 20 72 65 73 70 6f 6e 73 65  exit if response
0f90: 20 69 73 20 6e 6f 74 20 22 53 75 63 63 65 73 73   is not "Success
0fa0: 22 0a 20 20 69 66 20 28 20 24 73 74 61 74 75 73  ".  if ( $status
0fb0: 20 61 6e 64 20 24 72 65 73 70 6f 6e 73 65 20 3d   and $response =
0fc0: 7e 20 2f 5e 45 72 72 6f 72 3a 20 53 75 63 63 65  ~ /^Error: Succe
0fd0: 73 73 5c 6e 2f 69 20 29 20 7b 0a 20 20 20 20 26  ss\n/i ) {.    &
0fe0: 73 69 67 5f 65 72 72 6f 72 28 22 55 4e 53 55 43  sig_error("UNSUC
0ff0: 43 45 53 53 46 55 4c 20 45 58 45 43 55 54 49 4f  CESSFUL EXECUTIO
1000: 4e 3a 20 53 63 72 69 70 74 2d 66 75 20 65 72 72  N: Script-fu err
1010: 6f 72 22 29 3b 0a 20 20 20 20 7d 0a 20 20 24 73  or");.    }.  $s
1020: 74 61 74 75 73 3b 20 0a 20 20 7d 0a 0a 23 20 64  tatus; .  }..# d
1030: 65 66 69 6e 65 20 61 20 53 63 72 69 70 74 2d 66  efine a Script-f
1040: 75 20 75 74 69 6c 69 74 79 20 66 75 6e 63 74 69  u utility functi
1050: 6f 6e 20 74 6f 20 73 61 76 65 20 66 72 61 6d 65  on to save frame
1060: 73 20 75 73 69 6e 67 20 74 68 65 20 50 4e 47 20  s using the PNG 
1070: 6f 72 20 4a 50 47 0a 23 20 63 6f 6d 70 72 65 73  or JPG.# compres
1080: 73 69 6f 6e 20 6c 65 76 65 6c 73 20 73 70 65 63  sion levels spec
1090: 69 66 69 65 64 20 69 6e 20 27 67 69 6d 70 72 63  ified in 'gimprc
10a0: 27 2e 20 0a 23 20 54 6f 20 73 70 65 63 69 66 79  '. .# To specify
10b0: 20 61 20 50 4e 47 20 63 6f 6d 70 72 65 73 73 69   a PNG compressi
10c0: 6f 6e 20 6c 65 76 65 6c 20 6f 66 20 35 2c 20 69  on level of 5, i
10d0: 6e 63 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f  nclude the follo
10e0: 77 69 6e 67 20 6c 69 6e 65 0a 23 20 69 6e 20 67  wing line.# in g
10f0: 69 6d 70 72 63 3a 0a 23 20 20 20 28 72 66 78 2d  imprc:.#   (rfx-
1100: 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20  png-compression 
1110: 22 35 22 29 20 0a 23 20 49 66 20 6e 6f 74 20 73  "5") .# If not s
1120: 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 61 20  pecified then a 
1130: 64 65 66 61 75 6c 74 20 6c 65 76 65 6c 20 6f 66  default level of
1140: 20 22 33 22 20 69 73 20 61 73 73 75 6d 65 64 2e   "3" is assumed.
1150: 0a 23 20 22 33 22 20 69 73 20 61 20 67 6f 6f 64  .# "3" is a good
1160: 20 63 68 6f 69 63 65 20 66 6f 72 20 50 4e 47 73   choice for PNGs
1170: 20 62 65 63 61 75 73 65 20 68 69 67 68 65 72 20   because higher 
1180: 6c 65 76 65 6c 73 20 64 6f 75 62 6c 65 20 74 68  levels double th
1190: 65 20 77 72 69 74 65 0a 23 20 74 69 6d 65 73 20  e write.# times 
11a0: 77 68 69 6c 65 20 6f 6e 6c 79 20 6f 66 66 65 72  while only offer
11b0: 69 6e 67 20 61 62 6f 75 74 20 31 35 25 20 72 65  ing about 15% re
11c0: 64 75 63 74 69 6f 6e 20 69 6e 20 66 69 6c 65 20  duction in file 
11d0: 73 69 7a 65 2e 0a 23 20 54 6f 20 73 70 65 63 69  size..# To speci
11e0: 66 79 20 61 20 4a 50 47 20 63 6f 6d 70 72 65 73  fy a JPG compres
11f0: 73 69 6f 6e 20 6c 65 76 65 6c 20 6f 66 20 38 35  sion level of 85
1200: 2c 20 69 6e 63 6c 75 64 65 20 74 68 65 20 66 6f  , include the fo
1210: 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 0a 23 20 69  llowing line.# i
1220: 6e 20 67 69 6d 70 72 63 3a 0a 23 20 20 20 28 72  n gimprc:.#   (r
1230: 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69  fx-jpg-compressi
1240: 6f 6e 20 22 38 35 22 29 20 0a 23 20 49 66 20 6e  on "85") .# If n
1250: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
1260: 6e 20 61 20 64 65 66 61 75 6c 74 20 6c 65 76 65  n a default leve
1270: 6c 20 6f 66 20 22 39 33 22 20 69 73 20 61 73 73  l of "93" is ass
1280: 75 6d 65 64 2e 0a 0a 23 20 4e 4f 54 45 3a 20 27  umed...# NOTE: '
1290: 72 66 78 2d 73 61 76 65 2d 66 72 61 6d 65 27 20  rfx-save-frame' 
12a0: 44 45 4c 45 54 45 53 20 74 68 65 20 69 6d 61 67  DELETES the imag
12b0: 65 2e 20 20 0a 26 72 66 78 5f 73 65 6e 64 6d 73  e.  .&rfx_sendms
12c0: 67 28 20 71 71 7b 0a 20 20 28 62 65 67 69 6e 0a  g( qq{.  (begin.
12d0: 20 20 20 20 28 64 65 66 69 6e 65 20 72 66 78 2d      (define rfx-
12e0: 63 75 72 74 6d 70 64 69 72 20 22 24 63 75 72 74  curtmpdir "$curt
12f0: 6d 70 64 69 72 22 29 0a 20 20 20 20 28 64 65 66  mpdir").    (def
1300: 69 6e 65 20 72 66 78 2d 69 6d 67 65 78 74 20 22  ine rfx-imgext "
1310: 24 69 6d 67 5f 65 78 74 22 29 0a 20 20 20 20 28  $img_ext").    (
1320: 75 6e 6c 65 73 73 20 28 64 65 66 69 6e 65 64 3f  unless (defined?
1330: 20 27 72 66 78 2d 73 61 76 65 2d 66 72 61 6d 65   'rfx-save-frame
1340: 29 0a 20 20 20 20 20 20 28 64 65 66 69 6e 65 20  ).      (define 
1350: 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73  rfx-png-compress
1360: 69 6f 6e 20 28 63 61 74 63 68 20 23 66 20 28 67  ion (catch #f (g
1370: 69 6d 70 2d 67 69 6d 70 72 63 2d 71 75 65 72 79  imp-gimprc-query
1380: 20 22 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72 65   "rfx-png-compre
1390: 73 73 69 6f 6e 22 29 29 29 0a 20 20 20 20 20 20  ssion"))).      
13a0: 28 73 65 74 21 20 72 66 78 2d 70 6e 67 2d 63 6f  (set! rfx-png-co
13b0: 6d 70 72 65 73 73 69 6f 6e 20 28 69 66 20 72 66  mpression (if rf
13c0: 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f  x-png-compressio
13d0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f0: 20 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e 75 6d      (string->num
1400: 62 65 72 20 28 63 61 72 20 72 66 78 2d 70 6e 67  ber (car rfx-png
1410: 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 29 29 0a 20  -compression)). 
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1440: 20 33 20 29 29 0a 20 20 20 20 20 20 28 64 65 66   3 )).      (def
1450: 69 6e 65 20 72 66 78 2d 6a 70 67 2d 63 6f 6d 70  ine rfx-jpg-comp
1460: 72 65 73 73 69 6f 6e 20 28 63 61 74 63 68 20 23  ression (catch #
1470: 66 20 28 67 69 6d 70 2d 67 69 6d 70 72 63 2d 71  f (gimp-gimprc-q
1480: 75 65 72 79 20 22 72 66 78 2d 6a 70 67 2d 63 6f  uery "rfx-jpg-co
1490: 6d 70 72 65 73 73 69 6f 6e 22 29 29 29 0a 20 20  mpression"))).  
14a0: 20 20 20 20 28 73 65 74 21 20 72 66 78 2d 6a 70      (set! rfx-jp
14b0: 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20 28 69  g-compression (i
14c0: 66 20 72 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65  f rfx-jpg-compre
14d0: 73 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20  ssion.          
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f0: 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d          (string-
1500: 3e 6e 75 6d 62 65 72 20 28 63 61 72 20 72 66 78  >number (car rfx
1510: 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e  -jpg-compression
1520: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 39 33 20 29 29 0a 20 20 20 20 20       93 )).     
1550: 20 28 64 65 66 69 6e 65 20 28 72 66 78 2d 73 61   (define (rfx-sa
1560: 76 65 2d 66 72 61 6d 65 20 69 6d 61 67 65 20 62  ve-frame image b
1570: 61 73 65 6e 61 6d 65 29 0a 20 20 20 20 20 20 20  asename).       
1580: 20 28 6c 65 74 20 28 28 66 69 6c 65 6e 61 6d 65   (let ((filename
1590: 20 28 73 74 72 69 6e 67 2d 61 70 70 65 6e 64 20   (string-append 
15a0: 72 66 78 2d 63 75 72 74 6d 70 64 69 72 20 44 49  rfx-curtmpdir DI
15b0: 52 2d 53 45 50 41 52 41 54 4f 52 20 62 61 73 65  R-SEPARATOR base
15c0: 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  name)).         
15d0: 20 20 20 20 20 28 6c 61 79 65 72 20 28 63 61 72       (layer (car
15e0: 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 67 65 74   (gimp-image-get
15f0: 2d 61 63 74 69 76 65 2d 6c 61 79 65 72 20 69 6d  -active-layer im
1600: 61 67 65 29 29 29 20 29 0a 20 20 20 20 20 20 20  age))) ).       
1610: 20 20 20 28 69 66 20 28 73 74 72 69 6e 67 2d 63     (if (string-c
1620: 69 3d 3f 20 72 66 78 2d 69 6d 67 65 78 74 20 22  i=? rfx-imgext "
1630: 2e 6a 70 67 22 29 0a 20 20 20 20 20 20 20 20 20  .jpg").         
1640: 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20     (begin.      
1650: 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 63 6f          (gimp-co
1660: 6e 74 65 78 74 2d 70 75 73 68 29 0a 20 20 20 20  ntext-push).    
1670: 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d            (gimp-
1680: 63 6f 6e 74 65 78 74 2d 73 65 74 2d 62 61 63 6b  context-set-back
1690: 67 72 6f 75 6e 64 20 27 28 36 20 36 20 36 29 29  ground '(6 6 6))
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
16b0: 6c 65 74 20 6c 6f 6f 70 20 28 28 6c 61 79 65 72  let loop ((layer
16c0: 73 20 28 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20  s (vector->list 
16d0: 28 63 61 64 72 20 28 67 69 6d 70 2d 69 6d 61 67  (cadr (gimp-imag
16e0: 65 2d 67 65 74 2d 6c 61 79 65 72 73 20 69 6d 61  e-get-layers ima
16f0: 67 65 29 29 29 29 29 0a 20 20 20 20 20 20 20 20  ge))))).        
1700: 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20          (unless 
1710: 28 6e 75 6c 6c 3f 20 6c 61 79 65 72 73 29 0a 20  (null? layers). 
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1730: 20 28 69 66 20 28 3d 20 28 63 61 72 20 6c 61 79   (if (= (car lay
1740: 65 72 73 29 20 6c 61 79 65 72 29 0a 20 20 20 20  ers) layer).    
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1760: 28 67 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 73  (gimp-drawable-s
1770: 65 74 2d 76 69 73 69 62 6c 65 20 6c 61 79 65 72  et-visible layer
1780: 20 54 52 55 45 29 0a 20 20 20 20 20 20 20 20 20   TRUE).         
1790: 20 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70             (gimp
17a0: 2d 64 72 61 77 61 62 6c 65 2d 73 65 74 2d 76 69  -drawable-set-vi
17b0: 73 69 62 6c 65 20 28 63 61 72 20 6c 61 79 65 72  sible (car layer
17c0: 73 29 20 46 41 4c 53 45 29 20 29 0a 20 20 20 20  s) FALSE) ).    
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c                (l
17e0: 6f 6f 70 20 28 63 64 72 20 6c 61 79 65 72 73 29  oop (cdr layers)
17f0: 29 20 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  ) )).           
1800: 20 20 20 28 73 65 74 21 20 6c 61 79 65 72 20 28     (set! layer (
1810: 63 61 72 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d  car (gimp-image-
1820: 66 6c 61 74 74 65 6e 20 69 6d 61 67 65 29 29 29  flatten image)))
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
1840: 66 69 6c 65 2d 6a 70 65 67 2d 73 61 76 65 20 52  file-jpeg-save R
1850: 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56  UN-NONINTERACTIV
1860: 45 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E .             
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 69 6d 61 67 65 20 0a 20 20 20 20 20 20 20 20   image .        
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a0: 20 20 20 20 20 20 6c 61 79 65 72 0a 20 20 20 20        layer.    
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 6e 61            filena
18d0: 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  me .            
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f0: 20 20 66 69 6c 65 6e 61 6d 65 20 0a 20 20 20 20    filename .    
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1910: 20 20 20 20 20 20 20 20 20 20 28 2f 20 72 66 78            (/ rfx
1920: 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e  -jpg-compression
1930: 20 31 30 30 29 0a 20 20 20 20 20 20 20 20 20 20   100).          
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 20 20 20 20 30 20 3b 20 73 6d 6f 6f 74 68 69 6e      0 ; smoothin
1960: 67 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g .             
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1980: 20 31 20 3b 20 6f 70 74 69 6d 69 7a 65 20 0a 20   1 ; optimize . 
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 3b               1 ;
19b0: 20 70 72 6f 67 72 65 73 73 69 76 65 20 0a 20 20   progressive .  
19c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 22 20 3b              "" ;
19e0: 20 63 6f 6d 6d 65 6e 74 20 0a 20 20 20 20 20 20   comment .      
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a00: 20 20 20 20 20 20 20 20 30 20 3b 20 73 75 62 73          0 ; subs
1a10: 6d 70 20 28 30 2d 34 29 0a 20 20 20 20 20 20 20  mp (0-4).       
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a30: 20 20 20 20 20 20 20 31 20 3b 20 62 61 73 65 6c         1 ; basel
1a40: 69 6e 65 20 0a 20 20 20 20 20 20 20 20 20 20 20  ine .           
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a60: 20 20 20 30 20 3b 20 72 65 73 74 61 72 74 20 0a     0 ; restart .
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
1a90: 3b 64 63 74 20 0a 20 20 20 20 20 20 20 20 20 20  ;dct .          
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab0: 20 20 20 20 29 0a 20 20 20 20 20 20 20 20 20 20      ).          
1ac0: 20 20 20 20 28 67 69 6d 70 2d 63 6f 6e 74 65 78      (gimp-contex
1ad0: 74 2d 70 6f 70 29 20 29 0a 20 20 20 20 20 20 20  t-pop) ).       
1ae0: 20 20 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20       (begin.    
1af0: 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73            (unles
1b00: 73 20 28 7a 65 72 6f 3f 20 28 63 61 72 20 28 67  s (zero? (car (g
1b10: 69 6d 70 2d 69 6d 61 67 65 2d 62 61 73 65 2d 74  imp-image-base-t
1b20: 79 70 65 20 69 6d 61 67 65 29 29 29 0a 20 20 20  ype image))).   
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 69               (gi
1b40: 6d 70 2d 69 6d 61 67 65 2d 63 6f 6e 76 65 72 74  mp-image-convert
1b50: 2d 72 67 62 20 69 6d 61 67 65 29 20 29 0a 20 20  -rgb image) ).  
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c              (fil
1b70: 65 2d 70 6e 67 2d 73 61 76 65 32 20 52 55 4e 2d  e-png-save2 RUN-
1b80: 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56 45 20 0a  NONINTERACTIVE .
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 20 20 69 6d                im
1bb0: 61 67 65 20 0a 20 20 20 20 20 20 20 20 20 20 20  age .           
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd0: 20 20 20 6c 61 79 65 72 0a 20 20 20 20 20 20 20     layer.       
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 20 20 20 20 20 66 69 6c 65 6e 61 6d 65 20         filename 
1c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1c20: 69 6c 65 6e 61 6d 65 20 0a 20 20 20 20 20 20 20  ilename .       
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 46 41 4c 53 45 20 3b 20 69         FALSE ; i
1c50: 6e 74 65 72 6c 61 63 65 0a 20 20 20 20 20 20 20  nterlace.       
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 72 66 78 2d 70 6e 67 2d 63         rfx-png-c
1c80: 6f 6d 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 20  ompression.     
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca0: 20 20 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b           FALSE ;
1cb0: 20 62 6b 67 64 0a 20 20 20 20 20 20 20 20 20 20   bkgd.          
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 20 20 28 63 61 72 20 28 67 69 6d 70 2d 64      (car (gimp-d
1ce0: 72 61 77 61 62 6c 65 2d 68 61 73 2d 61 6c 70 68  rawable-has-alph
1cf0: 61 20 6c 61 79 65 72 29 29 0a 20 20 20 20 20 20  a layer)).      
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d10: 20 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b 20          FALSE ; 
1d20: 6f 66 66 73 0a 20 20 20 20 20 20 20 20 20 20 20  offs.           
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 20 20 20 46 41 4c 53 45 20 3b 20 70 68 79 73 0a     FALSE ; phys.
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 41                FA
1d70: 4c 53 45 20 3b 20 74 69 6d 65 0a 20 20 20 20 20  LSE ; time.     
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d90: 20 20 20 20 20 20 20 20 20 54 52 55 45 20 20 3b           TRUE  ;
1da0: 20 63 6f 6d 6d 65 6e 74 0a 20 20 20 20 20 20 20   comment.       
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b 20 73         FALSE ; s
1dd0: 76 74 72 61 6e 73 0a 20 20 20 20 20 20 20 20 20  vtrans.         
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df0: 20 20 20 20 20 29 29 29 0a 20 20 20 20 20 20 20       ))).       
1e00: 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 64     (gimp-image-d
1e10: 65 6c 65 74 65 20 69 6d 61 67 65 29 20 29 29 29  elete image) )))
1e20: 29 0a 20 20 7d 0a 20 20 29 3b 0a 3c 2f 70 72 65  ).  }.  );.</pre
1e30: 3e 0a 0a 3c 6c 6f 6f 70 3e 0a 23 20 24 70 30 20  >..<loop>.# $p0 
1e40: 3b 20 70 65 72 69 6f 64 20 28 69 6e 20 70 69 78  ; period (in pix
1e50: 65 6c 73 29 0a 23 20 24 70 31 20 3b 20 61 6d 70  els).# $p1 ; amp
1e60: 6c 69 74 75 64 65 0a 23 20 24 70 32 20 3b 20 61  litude.# $p2 ; a
1e70: 6d 70 6c 69 74 75 64 65 20 6d 6f 64 75 6c 61 74  mplitude modulat
1e80: 69 6f 6e 20 63 79 63 6c 65 73 20 28 30 3d 6e 6f  ion cycles (0=no
1e90: 6e 65 2c 20 6e 75 6d 62 65 72 20 63 79 63 6c 65  ne, number cycle
1ea0: 73 20 64 75 72 69 6e 67 20 66 72 61 6d 65 20 73  s during frame s
1eb0: 65 71 75 65 6e 63 65 29 0a 23 20 24 70 33 20 3b  equence).# $p3 ;
1ec0: 20 6d 6f 64 75 6c 61 74 69 6f 6e 20 74 79 70 65   modulation type
1ed0: 20 6c 69 6e 65 61 72 2f 73 69 6e 75 73 6f 69 64   linear/sinusoid
1ee0: 61 6c 20 28 64 72 6f 70 64 6f 77 6e 29 0a 23 20  al (dropdown).# 
1ef0: 24 70 34 20 3b 20 64 69 72 65 63 74 69 6f 6e 20  $p4 ; direction 
1f00: 28 62 6f 6f 6c 3a 20 68 6f 72 69 7a 3d 30 20 76  (bool: horiz=0 v
1f10: 65 72 74 3d 31 29 0a 23 20 24 70 35 20 3b 20 65  ert=1).# $p5 ; e
1f20: 64 67 65 20 74 79 70 65 20 28 64 72 6f 70 64 6f  dge type (dropdo
1f30: 77 6e 3a 20 73 6d 65 61 72 2c 20 77 72 61 70 2c  wn: smear, wrap,
1f40: 20 62 6c 61 6e 6b 29 0a 23 20 24 70 36 20 3b 20   blank).# $p6 ; 
1f50: 73 69 6e 65 20 77 61 76 65 20 20 28 72 61 64 69  sine wave  (radi
1f60: 6f 20 67 72 6f 75 70 20 31 29 0a 23 20 24 70 37  o group 1).# $p7
1f70: 20 3b 20 74 72 69 61 6e 67 6c 65 20 20 20 28 72   ; triangle   (r
1f80: 61 64 69 6f 20 67 72 6f 75 70 20 31 29 0a 23 20  adio group 1).# 
1f90: 24 70 38 20 3b 20 76 65 6c 6f 63 69 74 79 20 28  $p8 ; velocity (
1fa0: 30 3d 63 6f 6e 73 74 61 6e 74 2c 20 65 6c 73 65  0=constant, else
1fb0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 69 78 65 6c   number of pixel
1fc0: 73 20 73 68 69 66 74 65 64 20 65 61 63 68 20 66  s shifted each f
1fd0: 72 61 6d 65 29 0a 0a 23 20 4e 6f 74 65 3a 20 47  rame)..# Note: G
1fe0: 49 4d 50 27 73 20 52 69 70 70 6c 65 20 70 6c 75  IMP's Ripple plu
1ff0: 67 2d 69 6e 20 64 6f 65 73 20 6e 6f 74 20 64 69  g-in does not di
2000: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 20 65  rectly support e
2010: 69 74 68 65 72 20 70 68 61 73 65 20 73 68 69 66  ither phase shif
2020: 74 69 6e 67 0a 23 20 20 20 20 20 20 20 6f 72 20  ting.#       or 
2030: 6e 65 67 61 74 69 76 65 20 61 6d 70 6c 69 74 75  negative amplitu
2040: 64 65 73 2e 20 54 6f 20 69 6d 70 6c 65 6d 65 6e  des. To implemen
2050: 74 20 70 68 61 73 65 20 73 68 69 66 74 69 6e 67  t phase shifting
2060: 2c 20 69 74 20 69 73 20 74 68 65 72 65 66 6f 72  , it is therefor
2070: 65 0a 23 20 20 20 20 20 20 20 6e 65 63 65 73 73  e.#       necess
2080: 61 72 79 20 74 6f 20 72 65 73 69 7a 65 20 74 68  ary to resize th
2090: 65 20 64 72 61 77 61 62 6c 65 20 62 79 20 74 68  e drawable by th
20a0: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74 68 65 20  e amount of the 
20b0: 73 68 69 66 74 2e 20 54 6f 0a 23 20 20 20 20 20  shift. To.#     
20c0: 20 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20 6e 65    accommodate ne
20d0: 67 61 74 69 76 65 20 61 6d 70 6c 69 74 75 64 65  gative amplitude
20e0: 73 2c 20 74 68 65 20 65 66 66 65 63 74 20 69 73  s, the effect is
20f0: 20 61 6c 73 6f 20 70 68 61 73 65 20 73 68 69 66   also phase shif
2100: 74 65 64 0a 23 20 20 20 20 20 20 20 62 79 20 68  ted.#       by h
2110: 61 6c 66 20 74 68 65 20 70 65 72 69 6f 64 2e 0a  alf the period..
2120: 23 0a 23 20 20 20 20 20 20 20 72 66 78 2d 72 69  #.#       rfx-ri
2130: 70 70 6c 65 2d 6d 6f 64 20 61 6e 64 20 72 66 78  pple-mod and rfx
2140: 2d 72 69 70 70 6c 65 2d 70 68 61 73 65 20 61 72  -ripple-phase ar
2150: 65 20 65 61 63 68 20 61 20 70 61 69 72 20 63 6f  e each a pair co
2160: 6e 74 61 69 6e 69 6e 67 0a 23 20 20 20 20 20 20  ntaining.#      
2170: 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
2180: 75 65 20 61 6e 64 20 74 68 65 20 69 6e 63 72 65  ue and the incre
2190: 6d 65 6e 74 20 61 6d 6f 75 6e 74 2e 20 42 6f 74  ment amount. Bot
21a0: 68 20 6e 65 65 64 20 74 6f 20 62 65 20 64 65 66  h need to be def
21b0: 69 6e 65 64 0a 23 20 20 20 20 20 20 20 67 6c 6f  ined.#       glo
21c0: 62 61 6c 6c 79 20 61 6e 64 20 74 68 65 72 65 66  bally and theref
21d0: 6f 72 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 64  ore can not be d
21e0: 65 66 69 6e 65 64 20 77 69 74 68 69 6e 20 61 20  efined within a 
21f0: 6c 61 6d 62 64 61 2f 6c 65 74 2e 0a 23 0a 23 20  lambda/let..#.# 
2200: 20 20 20 20 20 20 49 6e 20 74 68 65 20 63 61 73        In the cas
2210: 65 20 6f 66 20 72 66 78 2d 72 69 70 70 6c 65 2d  e of rfx-ripple-
2220: 70 68 61 73 65 2c 20 74 68 65 20 76 61 6c 75 65  phase, the value
2230: 20 69 73 20 61 6e 20 6f 66 66 73 65 74 20 69 6e   is an offset in
2240: 20 74 68 65 20 0a 23 20 20 20 20 20 20 20 72 61   the .#       ra
2250: 6e 67 65 20 30 20 3c 3d 20 58 20 3c 20 70 65 72  nge 0 <= X < per
2260: 69 6f 64 20 28 70 65 72 69 6f 64 20 69 73 20 69  iod (period is i
2270: 6e 20 70 69 78 65 6c 73 29 2e 20 0a 23 0a 23 20  n pixels). .#.# 
2280: 20 20 20 20 20 20 49 6e 20 74 68 65 20 63 61 73        In the cas
2290: 65 20 6f 66 20 72 66 78 2d 72 69 70 70 6c 65 2d  e of rfx-ripple-
22a0: 6d 6f 64 2c 20 74 68 65 20 76 61 6c 75 65 20 69  mod, the value i
22b0: 73 20 61 6e 20 6f 66 66 73 65 74 20 74 68 61 74  s an offset that
22c0: 20 69 73 20 69 6e 20 74 68 65 0a 23 20 20 20 20   is in the.#    
22d0: 20 20 20 72 61 6e 67 65 20 30 20 3c 3d 20 58 20     range 0 <= X 
22e0: 3c 20 31 2e 20 54 68 65 20 73 63 72 69 70 74 20  < 1. The script 
22f0: 74 68 65 6e 20 64 65 74 65 72 6d 69 6e 65 73 20  then determines 
2300: 74 68 65 20 73 63 61 6c 69 6e 67 20 6f 66 20 0a  the scaling of .
2310: 23 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75  #       the actu
2320: 61 6c 20 72 69 70 70 6c 65 20 61 6d 70 6c 69 74  al ripple amplit
2330: 75 64 65 20 62 61 73 65 64 20 75 70 6f 6e 20 74  ude based upon t
2340: 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  he evaluation of
2350: 20 65 69 74 68 65 72 0a 23 20 20 20 20 20 20 20   either.#       
2360: 74 68 65 20 74 72 69 61 6e 67 6c 65 20 6f 72 20  the triangle or 
2370: 73 69 6e 75 73 6f 69 64 61 6c 2e 0a 23 0a 26 72  sinusoidal..#.&r
2380: 66 78 5f 73 65 6e 64 6d 73 67 20 28 0a 20 20 71  fx_sendmsg (.  q
2390: 71 7b 0a 20 20 20 20 28 62 65 67 69 6e 0a 20 20  q{.    (begin.  
23a0: 20 20 20 20 28 75 6e 6c 65 73 73 20 28 7a 65 72      (unless (zer
23b0: 6f 3f 20 24 70 38 29 20 0a 20 20 20 20 20 20 20  o? $p8) .       
23c0: 20 28 69 66 20 28 3d 20 24 66 72 61 6d 65 20 24   (if (= $frame $
23d0: 73 74 61 72 74 29 0a 20 20 20 20 20 20 20 20 20  start).         
23e0: 20 28 64 65 66 69 6e 65 20 72 66 78 2d 72 69 70   (define rfx-rip
23f0: 70 6c 65 2d 70 68 61 73 65 20 28 63 6f 6e 73 20  ple-phase (cons 
2400: 30 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0 .             
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2420: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20              (if 
2430: 28 3e 20 24 70 38 20 30 29 0a 20 20 20 20 20 20  (> $p8 0).      
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 20 20 20 20 20 28 2d 20 24 70 30 20 24 70 38 29       (- $p0 $p8)
2470: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
2480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 2d 20               (- 
24a0: 24 70 38 29 20 29 29 29 0a 20 20 20 20 20 20 20  $p8) ))).       
24b0: 20 20 20 28 73 65 74 21 20 72 66 78 2d 72 69 70     (set! rfx-rip
24c0: 70 6c 65 2d 70 68 61 73 65 20 28 63 6f 6e 73 20  ple-phase (cons 
24d0: 28 6c 65 74 20 6c 6f 6f 70 20 28 28 70 68 61 73  (let loop ((phas
24e0: 65 2d 6f 66 66 73 65 74 20 28 2b 20 28 63 61 72  e-offset (+ (car
24f0: 20 72 66 78 2d 72 69 70 70 6c 65 2d 70 68 61 73   rfx-ripple-phas
2500: 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e).             
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2540: 20 20 20 20 20 20 28 63 64 72 20 72 66 78 2d 72        (cdr rfx-r
2550: 69 70 70 6c 65 2d 70 68 61 73 65 29 20 29 29 29  ipple-phase) )))
2560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 3c            (if (<
2590: 20 70 68 61 73 65 2d 6f 66 66 73 65 74 20 24 70   phase-offset $p
25a0: 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0).             
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 68                ph
25d0: 61 73 65 2d 6f 66 66 73 65 74 0a 20 20 20 20 20  ase-offset.     
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 2d 20 70        (loop (- p
2610: 68 61 73 65 2d 6f 66 66 73 65 74 20 24 70 30 29  hase-offset $p0)
2620: 29 20 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  ) )).           
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2640: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 64 72              (cdr
2650: 20 72 66 78 2d 72 69 70 70 6c 65 2d 70 68 61 73   rfx-ripple-phas
2660: 65 29 20 29 29 29 29 0a 20 20 20 20 20 20 28 75  e) )))).      (u
2670: 6e 6c 65 73 73 20 28 7a 65 72 6f 3f 20 24 70 32  nless (zero? $p2
2680: 29 0a 20 20 20 20 20 20 20 20 28 69 66 20 28 3d  ).        (if (=
2690: 20 24 66 72 61 6d 65 20 24 73 74 61 72 74 29 0a   $frame $start).
26a0: 20 20 20 20 20 20 20 20 20 20 28 64 65 66 69 6e            (defin
26b0: 65 20 72 66 78 2d 72 69 70 70 6c 65 2d 6d 6f 64  e rfx-ripple-mod
26c0: 20 28 63 6f 6e 73 20 30 20 28 2a 20 24 70 32 20   (cons 0 (* $p2 
26d0: 28 2f 20 28 73 75 63 63 20 28 2d 20 24 65 6e 64  (/ (succ (- $end
26e0: 20 24 73 74 61 72 74 29 29 29 29 29 29 0a 20 20   $start)))))).  
26f0: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 72 66          (set! rf
2700: 78 2d 72 69 70 70 6c 65 2d 6d 6f 64 20 28 63 6f  x-ripple-mod (co
2710: 6e 73 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 61  ns (let loop ((a
2720: 6d 70 2d 6f 66 66 73 65 74 20 28 2b 20 28 63 61  mp-offset (+ (ca
2730: 72 20 72 66 78 2d 72 69 70 70 6c 65 2d 6d 6f 64  r rfx-ripple-mod
2740: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2780: 20 28 63 64 72 20 72 66 78 2d 72 69 70 70 6c 65   (cdr rfx-ripple
2790: 2d 6d 6f 64 29 20 29 29 29 0a 20 20 20 20 20 20  -mod) ))).      
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 28 69 66 20 28 3c 20 61 6d 70 2d 6f 66 66 73   (if (< amp-offs
27d0: 65 74 20 31 29 0a 20 20 20 20 20 20 20 20 20 20  et 1).          
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2800: 6d 70 2d 6f 66 66 73 65 74 0a 20 20 20 20 20 20  mp-offset.      
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2830: 20 20 20 28 6c 6f 6f 70 20 28 2d 20 61 6d 70 2d     (loop (- amp-
2840: 6f 66 66 73 65 74 20 31 29 29 20 29 29 0a 20 20  offset 1)) )).  
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2870: 20 20 20 28 63 64 72 20 72 66 78 2d 72 69 70 70     (cdr rfx-ripp
2880: 6c 65 2d 6d 6f 64 29 20 29 29 29 29 0a 20 20 20  le-mod) )))).   
2890: 20 20 20 28 6c 65 74 20 28 28 70 65 72 69 6f 64     (let ((period
28a0: 20 24 70 30 29 0a 20 20 20 20 20 20 20 20 20 20   $p0).          
28b0: 20 20 28 61 6d 70 6c 69 74 75 64 65 20 24 70 31    (amplitude $p1
28c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6d  ).            (m
28d0: 6f 64 2d 63 79 63 6c 65 73 20 24 70 32 29 0a 20  od-cycles $p2). 
28e0: 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 2d             (mod-
28f0: 6c 69 6e 65 61 72 20 24 70 33 29 0a 20 20 20 20  linear $p3).    
2900: 20 20 20 20 20 20 20 20 28 64 69 72 65 63 74 69          (directi
2910: 6f 6e 20 24 70 34 29 0a 20 20 20 20 20 20 20 20  on $p4).        
2920: 20 20 20 20 28 65 64 67 65 20 24 70 35 29 0a 20      (edge $p5). 
2930: 20 20 20 20 20 20 20 20 20 20 20 28 73 69 6e 65             (sine
2940: 20 24 70 36 29 0a 20 20 20 20 20 20 20 20 20 20   $p6).          
2950: 20 20 28 74 72 69 61 6e 67 6c 65 20 24 70 37 29    (triangle $p7)
2960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 76 65  .            (ve
2970: 6c 6f 63 69 74 79 20 28 2d 20 24 70 38 29 29 0a  locity (- $p8)).
2980: 20 20 20 20 20 20 20 20 20 20 20 20 28 70 68 61              (pha
2990: 73 65 2d 6f 66 66 73 65 74 20 30 29 0a 20 20 20  se-offset 0).   
29a0: 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20           ).     
29b0: 20 20 20 28 6c 65 74 2a 20 28 28 69 6e 70 75 74     (let* ((input
29c0: 2d 66 69 6c 65 20 28 73 74 72 69 6e 67 2d 61 70  -file (string-ap
29d0: 70 65 6e 64 20 22 24 63 75 72 74 6d 70 64 69 72  pend "$curtmpdir
29e0: 22 20 44 49 52 2d 53 45 50 41 52 41 54 4f 52 20  " DIR-SEPARATOR 
29f0: 22 24 69 6e 22 29 29 0a 20 20 20 20 20 20 20 20  "$in")).        
2a00: 20 20 20 20 20 20 20 28 69 6d 61 67 65 20 28 63         (image (c
2a10: 61 72 20 28 67 69 6d 70 2d 66 69 6c 65 2d 6c 6f  ar (gimp-file-lo
2a20: 61 64 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41  ad RUN-NONINTERA
2a30: 43 54 49 56 45 20 69 6e 70 75 74 2d 66 69 6c 65  CTIVE input-file
2a40: 20 69 6e 70 75 74 2d 66 69 6c 65 29 29 29 0a 20   input-file))). 
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c                (l
2a60: 61 79 65 72 20 28 63 61 72 20 28 67 69 6d 70 2d  ayer (car (gimp-
2a70: 69 6d 61 67 65 2d 67 65 74 2d 61 63 74 69 76 65  image-get-active
2a80: 2d 6c 61 79 65 72 20 69 6d 61 67 65 29 29 29 20  -layer image))) 
2a90: 29 0a 20 20 20 20 20 20 20 20 20 20 3b 20 63 61  ).          ; ca
2aa0: 6c 63 75 6c 61 74 65 20 6c 61 79 65 72 20 6f 66  lculate layer of
2ab0: 66 66 73 65 74 20 6f 77 69 6e 67 20 74 6f 20 61  ffset owing to a
2ac0: 6e 69 6d 61 74 65 64 20 70 68 61 73 65 0a 20 20  nimated phase.  
2ad0: 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20          (unless 
2ae0: 28 7a 65 72 6f 3f 20 76 65 6c 6f 63 69 74 79 29  (zero? velocity)
2af0: 20 3b 20 70 68 61 73 65 20 6d 6f 74 69 6f 6e 0a   ; phase motion.
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74              (set
2b10: 21 20 70 68 61 73 65 2d 6f 66 66 73 65 74 20 28  ! phase-offset (
2b20: 63 61 72 20 72 66 78 2d 72 69 70 70 6c 65 2d 70  car rfx-ripple-p
2b30: 68 61 73 65 29 29 20 29 0a 20 20 20 20 20 20 20  hase)) ).       
2b40: 20 20 20 28 73 65 74 21 20 61 6d 70 6c 69 74 75     (set! amplitu
2b50: 64 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  de .            
2b60: 28 2a 20 61 6d 70 6c 69 74 75 64 65 0a 20 20 20  (* amplitude.   
2b70: 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28             (if (
2b80: 7a 65 72 6f 3f 20 6d 6f 64 2d 63 79 63 6c 65 73  zero? mod-cycles
2b90: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2ba0: 20 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20    1.            
2bb0: 20 20 20 20 28 6c 65 74 20 28 28 66 72 61 63 74      (let ((fract
2bc0: 20 28 2d 20 28 63 61 72 20 72 66 78 2d 72 69 70   (- (car rfx-rip
2bd0: 70 6c 65 2d 6d 6f 64 29 20 28 74 72 75 6e 63 61  ple-mod) (trunca
2be0: 74 65 20 28 63 61 72 20 72 66 78 2d 72 69 70 70  te (car rfx-ripp
2bf0: 6c 65 2d 6d 6f 64 29 29 29 29 29 0a 20 20 20 20  le-mod))))).    
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
2c10: 66 20 6d 6f 64 2d 6c 69 6e 65 61 72 0a 20 20 20  f mod-linear.   
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c30: 20 28 63 6f 6e 64 20 0a 20 20 20 20 20 20 20 20   (cond .        
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28                ((
2c50: 3c 20 66 72 61 63 74 20 30 2e 32 35 29 0a 20 20  < fract 0.25).  
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c70: 20 20 20 20 20 20 28 2a 20 61 6d 70 6c 69 74 75        (* amplitu
2c80: 64 65 20 66 72 61 63 74 20 34 29 20 29 0a 20 20  de fract 4) ).  
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 20 20 20 28 28 3c 20 66 72 61 63 74 20 30 2e      ((< fract 0.
2cb0: 35 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  50).            
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 28 2a 20 61              (* a
2cd0: 6d 70 6c 69 74 75 64 65 20 28 2d 20 31 20 28 2a  mplitude (- 1 (*
2ce0: 20 28 2d 20 66 72 61 63 74 20 30 2e 32 35 29 20   (- fract 0.25) 
2cf0: 34 29 29 29 20 29 0a 20 20 20 20 20 20 20 20 20  4))) ).         
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3c               ((<
2d10: 20 66 72 61 63 74 20 30 2e 37 35 29 0a 20 20 20   fract 0.75).   
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d30: 20 20 20 20 20 28 2a 20 61 6d 70 6c 69 74 75 64       (* amplitud
2d40: 65 20 28 2d 20 28 2a 20 61 6d 70 6c 69 74 75 64  e (- (* amplitud
2d50: 65 20 28 2d 20 66 72 61 63 74 20 30 2e 35 29 20  e (- fract 0.5) 
2d60: 34 29 29 29 20 29 0a 20 20 20 20 20 20 20 20 20  4))) ).         
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c               (el
2d80: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  se.             
2d90: 20 20 20 20 20 20 20 20 20 20 20 28 2d 20 28 2a             (- (*
2da0: 20 61 6d 70 6c 69 74 75 64 65 20 28 2d 20 66 72   amplitude (- fr
2db0: 61 63 74 20 30 2e 37 35 29 20 34 29 20 31 29 20  act 0.75) 4) 1) 
2dc0: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))).            
2dd0: 20 20 20 20 20 20 20 20 28 73 69 6e 20 28 2a 20          (sin (* 
2de0: 32 20 2a 70 69 2a 20 66 72 61 63 74 29 29 20 29  2 *pi* fract)) )
2df0: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 77  ))).          (w
2e00: 68 65 6e 20 28 3c 20 61 6d 70 6c 69 74 75 64 65  hen (< amplitude
2e10: 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
2e20: 28 73 65 74 21 20 70 68 61 73 65 2d 6f 66 66 73  (set! phase-offs
2e30: 65 74 20 28 2b 20 70 68 61 73 65 2d 6f 66 66 73  et (+ phase-offs
2e40: 65 74 20 28 2f 20 70 65 72 69 6f 64 20 32 29 29  et (/ period 2))
2e50: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 69  ).            (i
2e60: 66 20 28 3e 3d 20 70 68 61 73 65 2d 6f 66 66 73  f (>= phase-offs
2e70: 65 74 20 70 65 72 69 6f 64 29 0a 20 20 20 20 20  et period).     
2e80: 20 20 20 20 20 20 20 20 20 28 73 65 74 21 20 70           (set! p
2e90: 68 61 73 65 2d 6f 66 66 73 65 74 20 28 2d 20 70  hase-offset (- p
2ea0: 68 61 73 65 2d 6f 66 66 73 65 74 20 70 65 72 69  hase-offset peri
2eb0: 6f 64 29 29 20 29 29 0a 20 20 20 20 20 20 20 20  od)) )).        
2ec0: 20 20 28 73 65 74 21 20 61 6d 70 6c 69 74 75 64    (set! amplitud
2ed0: 65 20 28 61 62 73 20 61 6d 70 6c 69 74 75 64 65  e (abs amplitude
2ee0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 75 6e  )).          (un
2ef0: 6c 65 73 73 20 28 7a 65 72 6f 3f 20 70 68 61 73  less (zero? phas
2f00: 65 2d 6f 66 66 73 65 74 29 0a 20 20 20 20 20 20  e-offset).      
2f10: 20 20 20 20 20 20 28 69 66 20 28 7a 65 72 6f 3f        (if (zero?
2f20: 20 64 69 72 65 63 74 69 6f 6e 29 20 0a 20 20 20   direction) .   
2f30: 20 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70             (gimp
2f40: 2d 6c 61 79 65 72 2d 72 65 73 69 7a 65 20 6c 61  -layer-resize la
2f50: 79 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  yer.            
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f70: 20 20 20 20 20 24 77 69 64 74 68 0a 20 20 20 20       $width.    
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 2b 20               (+ 
2fa0: 70 68 61 73 65 2d 6f 66 66 73 65 74 20 24 68 65  phase-offset $he
2fb0: 69 67 68 74 29 0a 20 20 20 20 20 20 20 20 20 20  ight).          
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd0: 20 20 20 20 20 20 20 30 0a 20 20 20 20 20 20 20         0.       
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff0: 20 20 20 20 20 20 20 20 20 20 70 68 61 73 65 2d            phase-
3000: 6f 66 66 73 65 74 20 29 0a 20 20 20 20 20 20 20  offset ).       
3010: 20 20 20 20 20 20 20 28 67 69 6d 70 2d 6c 61 79         (gimp-lay
3020: 65 72 2d 72 65 73 69 7a 65 20 6c 61 79 65 72 0a  er-resize layer.
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3050: 20 28 2b 20 70 68 61 73 65 2d 6f 66 66 73 65 74   (+ phase-offset
3060: 20 24 77 69 64 74 68 29 0a 20 20 20 20 20 20 20   $width).       
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3080: 20 20 20 20 20 20 20 20 20 20 24 68 65 69 67 68            $heigh
3090: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t.              
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b0: 20 20 20 70 68 61 73 65 2d 6f 66 66 73 65 74 0a     phase-offset.
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e0: 20 30 20 29 29 29 0a 20 20 20 20 20 20 20 20 20   0 ))).         
30f0: 20 28 70 6c 75 67 2d 69 6e 2d 72 69 70 70 6c 65   (plug-in-ripple
3100: 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54   RUN-NONINTERACT
3110: 49 56 45 20 69 6d 61 67 65 20 6c 61 79 65 72 0a  IVE image layer.
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 20 20 20 20 20 20 20 20 20 20 70 65 72 69 6f 64            period
3140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3150: 20 20 20 20 20 20 20 20 20 20 20 61 6d 70 6c 69             ampli
3160: 74 75 64 65 0a 20 20 20 20 20 20 20 20 20 20 20  tude.           
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3180: 69 72 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20  irection.       
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 20 65 64 67 65 0a 20 20 20 20 20 20 20 20     edge.        
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c0: 20 20 73 69 6e 65 0a 20 20 20 20 20 20 20 20 20    sine.         
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e0: 20 54 52 55 45 20 20 3b 20 61 6c 77 61 79 73 20   TRUE  ; always 
31f0: 75 73 65 20 61 6e 74 69 61 6c 69 61 73 0a 20 20  use antialias.  
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3210: 20 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b 20          FALSE ; 
3220: 77 65 20 64 6f 6e 27 74 20 6e 65 65 64 20 74 69  we don't need ti
3230: 6c 61 62 69 6c 69 74 79 0a 20 20 20 20 20 20 20  lability.       
3240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3250: 20 20 20 29 0a 20 20 20 20 20 20 20 20 20 20 28     ).          (
3260: 67 69 6d 70 2d 6c 61 79 65 72 2d 72 65 73 69 7a  gimp-layer-resiz
3270: 65 2d 74 6f 2d 69 6d 61 67 65 2d 73 69 7a 65 20  e-to-image-size 
3280: 6c 61 79 65 72 29 0a 20 20 20 20 20 20 20 20 20  layer).         
3290: 20 28 72 66 78 2d 73 61 76 65 2d 66 72 61 6d 65   (rfx-save-frame
32a0: 20 69 6d 61 67 65 20 22 24 6f 75 74 22 29 20 0a   image "$out") .
32b0: 20 20 20 20 20 20 20 20 20 20 29 0a 20 20 20 20            ).    
32c0: 20 20 20 20 29 0a 20 20 20 20 20 20 29 0a 20 20      ).      ).  
32d0: 20 20 7d 0a 20 20 29 3b 0a 0a 3c 2f 6c 6f 6f 70    }.  );..</loop
32e0: 3e 0a 0a 3c 70 6f 73 74 3e 0a 3c 2f 70 6f 73 74  >..<post>.</post
32f0: 3e 0a 0a 3c 6f 6e 63 68 61 6e 67 65 3e 0a 69 6e  >..<onchange>.in
3300: 69 74 7c 69 66 20 28 24 70 34 20 3d 3d 20 31 29  it|if ($p4 == 1)
3310: 20 7b 20 23 20 68 6f 72 69 7a 6f 6e 74 61 6c 0a   { # horizontal.
3320: 69 6e 69 74 7c 20 20 24 70 30 5f 6d 61 78 20 3d  init|  $p0_max =
3330: 20 24 77 69 64 74 68 3b 0a 69 6e 69 74 7c 20 20   $width;.init|  
3340: 24 70 31 5f 6d 61 78 20 3d 20 24 68 65 69 67 68  $p1_max = $heigh
3350: 74 3b 0a 69 6e 69 74 7c 20 20 7d 0a 69 6e 69 74  t;.init|  }.init
3360: 7c 65 6c 73 65 20 7b 20 23 20 76 65 72 74 69 63  |else { # vertic
3370: 61 6c 0a 69 6e 69 74 7c 20 20 24 70 30 5f 6d 61  al.init|  $p0_ma
3380: 78 20 3d 20 24 68 65 69 67 68 74 3b 0a 69 6e 69  x = $height;.ini
3390: 74 7c 20 20 24 70 31 5f 6d 61 78 20 3d 20 24 77  t|  $p1_max = $w
33a0: 69 64 74 68 3b 0a 69 6e 69 74 7c 20 20 7d 0a 69  idth;.init|  }.i
33b0: 6e 69 74 7c 24 70 32 5f 6d 61 78 20 3d 20 24 65  nit|$p2_max = $e
33c0: 6e 64 20 2d 20 24 73 74 61 72 74 3b 0a 69 6e 69  nd - $start;.ini
33d0: 74 7c 24 70 32 5f 6d 69 6e 20 3d 20 30 3b 0a 69  t|$p2_min = 0;.i
33e0: 6e 69 74 7c 24 70 38 5f 6d 61 78 20 3d 20 24 65  nit|$p8_max = $e
33f0: 6e 64 20 2d 20 24 73 74 61 72 74 3b 0a 69 6e 69  nd - $start;.ini
3400: 74 7c 24 70 38 5f 6d 69 6e 20 3d 20 24 73 74 61  t|$p8_min = $sta
3410: 72 74 20 2d 20 24 65 6e 64 3b 0a 3c 2f 6f 6e 63  rt - $end;.</onc
3420: 68 61 6e 67 65 3e 0a 0a                          hange>..