Artifact f93c0076327f9eac0e64b3e2c13fa69da2757571:


0000: 3b 3b 20 2d 2a 2d 20 6d 6f 64 65 3a 20 53 63 68  ;; -*- mode: Sch
0010: 65 6d 65 3b 20 74 61 62 2d 77 69 64 74 68 3a 20  eme; tab-width: 
0020: 32 3b 20 2d 2a 2d 20 3b 3b 0a 0a 3b 3b 20 7b 7b  2; -*- ;;..;; {{
0030: 7b 20 44 61 74 61 20 74 79 70 65 73 0a 0a 28 66  { Data types..(f
0040: 6f 72 65 69 67 6e 2d 64 65 63 6c 61 72 65 0a 09  oreign-declare..
0050: 22 23 69 6e 63 6c 75 64 65 20 3c 63 64 2e 68 3e  "#include <cd.h>
0060: 5c 6e 22 0a 09 22 23 69 6e 63 6c 75 64 65 20 3c  \n".."#include <
0070: 63 64 69 72 67 62 2e 68 3e 5c 6e 22 29 0a 0a 28  cdirgb.h>\n")..(
0080: 69 6e 63 6c 75 64 65 20 22 63 61 6e 76 61 73 2d  include "canvas-
0090: 64 72 61 77 2d 74 79 70 65 73 2e 73 63 6d 22 29  draw-types.scm")
00a0: 0a 0a 3b 3b 20 7d 7d 7d 0a 0a 3b 3b 20 7b 7b 7b  ..;; }}}..;; {{{
00b0: 20 43 6f 6e 74 65 78 74 20 74 79 70 65 73 0a 0a   Context types..
00c0: 28 64 65 66 69 6e 65 20 63 6f 6e 74 65 78 74 3a  (define context:
00d0: 69 6d 61 67 65 0a 09 28 66 6f 72 65 69 67 6e 2d  image..(foreign-
00e0: 76 61 6c 75 65 20 22 43 44 5f 49 4d 41 47 45 52  value "CD_IMAGER
00f0: 47 42 22 20 6e 6f 6e 6e 75 6c 6c 2d 63 6f 6e 74  GB" nonnull-cont
0100: 65 78 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 63  ext))..(define c
0110: 6f 6e 74 65 78 74 3a 64 6f 75 62 6c 65 2d 62 75  ontext:double-bu
0120: 66 66 65 72 0a 09 28 66 6f 72 65 69 67 6e 2d 76  ffer..(foreign-v
0130: 61 6c 75 65 20 22 43 44 5f 44 42 55 46 46 45 52  alue "CD_DBUFFER
0140: 52 47 42 22 20 6e 6f 6e 6e 75 6c 6c 2d 63 6f 6e  RGB" nonnull-con
0150: 74 65 78 74 29 29 0a 0a 3b 3b 20 7d 7d 7d 0a 0a  text))..;; }}}..
0160: 3b 3b 20 7b 7b 7b 20 41 75 78 69 6c 69 61 72 79  ;; {{{ Auxiliary
0170: 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66   functions..(def
0180: 69 6e 65 20 63 61 6e 76 61 73 2d 69 6d 61 67 65  ine canvas-image
0190: 2d 70 75 74 2f 72 67 62 21 0a 09 28 6c 65 74 72  -put/rgb!..(letr
01a0: 65 63 20 28 5b 63 61 6e 76 61 73 2d 69 6d 61 67  ec ([canvas-imag
01b0: 65 2d 73 65 74 2f 72 67 62 2f 72 61 77 21 0a 09  e-set/rgb/raw!..
01c0: 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 65 69            (forei
01d0: 67 6e 2d 6c 61 6d 62 64 61 2a 20 76 6f 69 64 20  gn-lambda* void 
01e0: 28 5b 6e 6f 6e 6e 75 6c 6c 2d 63 61 6e 76 61 73  ([nonnull-canvas
01f0: 20 63 61 6e 76 61 73 5d 20 5b 69 6e 74 20 64 73   canvas] [int ds
0200: 74 5f 78 5d 20 5b 69 6e 74 20 64 73 74 5f 79 5d  t_x] [int dst_y]
0210: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0230: 20 20 20 5b 69 6e 74 20 73 72 63 5f 77 69 64 74     [int src_widt
0240: 68 5d 20 5b 69 6e 74 20 73 72 63 5f 68 65 69 67  h] [int src_heig
0250: 68 74 5d 20 5b 6e 6f 6e 6e 75 6c 6c 2d 62 6c 6f  ht] [nonnull-blo
0260: 62 20 64 61 74 61 5d 0a 09 20 20 20 20 20 20 20  b data]..       
0270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0280: 20 20 20 20 20 20 20 20 20 20 5b 69 6e 74 20 64            [int d
0290: 73 74 5f 77 69 64 74 68 5d 20 5b 69 6e 74 20 64  st_width] [int d
02a0: 73 74 5f 68 65 69 67 68 74 5d 0a 09 20 20 20 20  st_height]..    
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e               [in
02d0: 74 20 73 72 63 5f 78 30 5d 20 5b 69 6e 74 20 73  t src_x0] [int s
02e0: 72 63 5f 78 31 5d 20 5b 69 6e 74 20 73 72 63 5f  rc_x1] [int src_
02f0: 79 30 5d 20 5b 69 6e 74 20 73 72 63 5f 79 31 5d  y0] [int src_y1]
0300: 29 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 22  )..            "
0310: 63 6f 6e 73 74 20 69 6e 74 20 6e 63 68 61 6e 73  const int nchans
0320: 20 3d 20 33 3b 5c 6e 22 0a 09 20 20 20 20 20 20   = 3;\n"..      
0330: 20 20 20 20 09 22 75 6e 73 69 67 6e 65 64 20 63      ."unsigned c
0340: 68 61 72 20 63 68 61 6e 73 5b 6e 63 68 61 6e 73  har chans[nchans
0350: 5d 5b 73 72 63 5f 77 69 64 74 68 20 2a 20 73 72  ][src_width * sr
0360: 63 5f 68 65 69 67 68 74 5d 3b 5c 6e 22 0a 09 20  c_height];\n".. 
0370: 20 20 20 20 20 20 20 20 20 09 22 69 6e 74 20 69           ."int i
0380: 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20  ;\n"..          
0390: 09 22 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20  ."\n"..         
03a0: 20 09 22 66 6f 72 20 28 69 20 3d 20 30 3b 20 69   ."for (i = 0; i
03b0: 20 3c 20 6e 63 68 61 6e 73 20 2a 20 73 72 63 5f   < nchans * src_
03c0: 77 69 64 74 68 20 2a 20 73 72 63 5f 68 65 69 67  width * src_heig
03d0: 68 74 3b 20 2b 2b 69 29 5c 6e 22 0a 09 20 20 20  ht; ++i)\n"..   
03e0: 20 20 20 20 20 20 20 09 22 09 63 68 61 6e 73 5b         .".chans[
03f0: 69 20 25 20 6e 63 68 61 6e 73 5d 5b 69 20 2f 20  i % nchans][i / 
0400: 6e 63 68 61 6e 73 5d 20 3d 20 64 61 74 61 5b 69  nchans] = data[i
0410: 5d 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20  ];\n"..         
0420: 20 09 22 5c 6e 22 0a 09 20 20 20 20 20 20 20 20   ."\n"..        
0430: 20 20 09 22 63 64 43 61 6e 76 61 73 50 75 74 49    ."cdCanvasPutI
0440: 6d 61 67 65 52 65 63 74 52 47 42 28 5c 6e 22 0a  mageRectRGB(\n".
0450: 09 20 20 20 20 20 20 20 20 20 20 09 22 09 63 61  .          .".ca
0460: 6e 76 61 73 2c 20 73 72 63 5f 77 69 64 74 68 2c  nvas, src_width,
0470: 20 73 72 63 5f 68 65 69 67 68 74 2c 5c 6e 22 0a   src_height,\n".
0480: 09 20 20 20 20 20 20 20 20 20 20 09 22 09 63 68  .          .".ch
0490: 61 6e 73 5b 30 5d 2c 20 63 68 61 6e 73 5b 31 5d  ans[0], chans[1]
04a0: 2c 20 63 68 61 6e 73 5b 32 5d 2c 5c 6e 22 0a 09  , chans[2],\n"..
04b0: 20 20 20 20 20 20 20 20 20 20 09 22 09 64 73 74            .".dst
04c0: 5f 78 2c 20 64 73 74 5f 79 2c 20 64 73 74 5f 77  _x, dst_y, dst_w
04d0: 69 64 74 68 2c 20 64 73 74 5f 68 65 69 67 68 74  idth, dst_height
04e0: 2c 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 22  ,"..          ."
04f0: 09 73 72 63 5f 78 30 2c 20 73 72 63 5f 78 31 2c  .src_x0, src_x1,
0500: 20 73 72 63 5f 79 30 2c 20 73 72 63 5f 79 31 22   src_y0, src_y1"
0510: 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 29 3b  ..          .");
0520: 22 29 5d 29 0a 09 20 20 28 6c 61 6d 62 64 61 20  ")])..  (lambda 
0530: 28 63 61 6e 76 61 73 20 64 73 74 2d 78 20 64 73  (canvas dst-x ds
0540: 74 2d 79 20 73 72 63 2d 77 69 64 74 68 20 73 72  t-y src-width sr
0550: 63 2d 68 65 69 67 68 74 20 64 61 74 61 0a 09 20  c-height data.. 
0560: 20 20 20 20 20 20 20 20 20 20 23 21 6b 65 79 20            #!key 
0570: 5b 77 69 64 74 68 20 30 5d 20 5b 68 65 69 67 68  [width 0] [heigh
0580: 74 20 30 5d 20 5b 78 30 20 30 5d 20 5b 78 31 20  t 0] [x0 0] [x1 
0590: 30 5d 20 5b 79 30 20 30 5d 20 5b 79 31 20 30 5d  0] [y0 0] [y1 0]
05a0: 29 0a 09 20 20 09 28 75 6e 6c 65 73 73 20 28 3d  )..  .(unless (=
05b0: 20 28 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74 61   (blob-size data
05c0: 29 20 28 2a 20 33 20 73 72 63 2d 77 69 64 74 68  ) (* 3 src-width
05d0: 20 73 72 63 2d 68 65 69 67 68 74 29 29 0a 09 20   src-height)).. 
05e0: 20 09 09 28 65 72 72 6f 72 20 27 63 61 6e 76 61   ..(error 'canva
05f0: 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 21  s-image-set/rgb!
0600: 20 22 62 61 64 20 69 6d 61 67 65 20 73 69 7a 65   "bad image size
0610: 22 20 28 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74  " (blob-size dat
0620: 61 29 20 28 2a 20 33 20 73 72 63 2d 77 69 64 74  a) (* 3 src-widt
0630: 68 20 73 72 63 2d 68 65 69 67 68 74 29 29 29 0a  h src-height))).
0640: 09 20 20 09 28 63 61 6e 76 61 73 2d 69 6d 61 67  .  .(canvas-imag
0650: 65 2d 73 65 74 2f 72 67 62 2f 72 61 77 21 0a 09  e-set/rgb/raw!..
0660: 20 20 09 09 63 61 6e 76 61 73 20 64 73 74 2d 78    ..canvas dst-x
0670: 20 64 73 74 2d 79 20 73 72 63 2d 77 69 64 74 68   dst-y src-width
0680: 20 73 72 63 2d 68 65 69 67 68 74 20 64 61 74 61   src-height data
0690: 0a 09 20 20 09 09 77 69 64 74 68 20 68 65 69 67  ..  ..width heig
06a0: 68 74 20 78 30 20 78 31 20 79 30 20 79 31 29 29  ht x0 x1 y0 y1))
06b0: 29 29 0a 0a 28 64 65 66 69 6e 65 20 63 61 6e 76  ))..(define canv
06c0: 61 73 2d 69 6d 61 67 65 2d 70 75 74 2f 72 67 62  as-image-put/rgb
06d0: 61 21 0a 09 28 6c 65 74 72 65 63 20 28 5b 63 61  a!..(letrec ([ca
06e0: 6e 76 61 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72  nvas-image-set/r
06f0: 67 62 61 2f 72 61 77 21 0a 09 20 20 20 20 20 20  gba/raw!..      
0700: 20 20 20 20 28 66 6f 72 65 69 67 6e 2d 6c 61 6d      (foreign-lam
0710: 62 64 61 2a 20 76 6f 69 64 20 28 5b 6e 6f 6e 6e  bda* void ([nonn
0720: 75 6c 6c 2d 63 61 6e 76 61 73 20 63 61 6e 76 61  ull-canvas canva
0730: 73 5d 20 5b 69 6e 74 20 64 73 74 5f 78 5d 20 5b  s] [int dst_x] [
0740: 69 6e 74 20 64 73 74 5f 79 5d 0a 09 20 20 20 20  int dst_y]..    
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e               [in
0770: 74 20 73 72 63 5f 77 69 64 74 68 5d 20 5b 69 6e  t src_width] [in
0780: 74 20 73 72 63 5f 68 65 69 67 68 74 5d 20 5b 6e  t src_height] [n
0790: 6f 6e 6e 75 6c 6c 2d 62 6c 6f 62 20 64 61 74 61  onnull-blob data
07a0: 5d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..             
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 20 20 20 20 5b 69 6e 74 20 64 73 74 5f 77 69 64      [int dst_wid
07d0: 74 68 5d 20 5b 69 6e 74 20 64 73 74 5f 68 65 69  th] [int dst_hei
07e0: 67 68 74 5d 0a 09 20 20 20 20 20 20 20 20 20 20  ght]..          
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 20 20 20 20 20 20 20 5b 69 6e 74 20 73 72 63 5f         [int src_
0810: 78 30 5d 20 5b 69 6e 74 20 73 72 63 5f 78 31 5d  x0] [int src_x1]
0820: 20 5b 69 6e 74 20 73 72 63 5f 79 30 5d 20 5b 69   [int src_y0] [i
0830: 6e 74 20 73 72 63 5f 79 31 5d 29 0a 09 20 20 20  nt src_y1])..   
0840: 20 20 20 20 20 20 20 20 20 22 63 6f 6e 73 74 20           "const 
0850: 69 6e 74 20 6e 63 68 61 6e 73 20 3d 20 34 3b 5c  int nchans = 4;\
0860: 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 22  n"..          ."
0870: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 68  unsigned char ch
0880: 61 6e 73 5b 6e 63 68 61 6e 73 5d 5b 73 72 63 5f  ans[nchans][src_
0890: 77 69 64 74 68 20 2a 20 73 72 63 5f 68 65 69 67  width * src_heig
08a0: 68 74 5d 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20  ht];\n"..       
08b0: 20 20 20 09 22 69 6e 74 20 69 3b 5c 6e 22 0a 09     ."int i;\n"..
08c0: 20 20 20 20 20 20 20 20 20 20 09 22 5c 6e 22 0a            ."\n".
08d0: 09 20 20 20 20 20 20 20 20 20 20 09 22 66 6f 72  .          ."for
08e0: 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 6e 63 68   (i = 0; i < nch
08f0: 61 6e 73 20 2a 20 73 72 63 5f 77 69 64 74 68 20  ans * src_width 
0900: 2a 20 73 72 63 5f 68 65 69 67 68 74 3b 20 2b 2b  * src_height; ++
0910: 69 29 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20  i)\n"..         
0920: 20 09 22 09 63 68 61 6e 73 5b 69 20 25 20 6e 63   .".chans[i % nc
0930: 68 61 6e 73 5d 5b 69 20 2f 20 6e 63 68 61 6e 73  hans][i / nchans
0940: 5d 20 3d 20 64 61 74 61 5b 69 5d 3b 5c 6e 22 0a  ] = data[i];\n".
0950: 09 20 20 20 20 20 20 20 20 20 20 09 22 5c 6e 22  .          ."\n"
0960: 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 63 64  ..          ."cd
0970: 43 61 6e 76 61 73 50 75 74 49 6d 61 67 65 52 65  CanvasPutImageRe
0980: 63 74 52 47 42 41 28 5c 6e 22 0a 09 20 20 20 20  ctRGBA(\n"..    
0990: 20 20 20 20 20 20 09 22 09 63 61 6e 76 61 73 2c        .".canvas,
09a0: 20 73 72 63 5f 77 69 64 74 68 2c 20 73 72 63 5f   src_width, src_
09b0: 68 65 69 67 68 74 2c 5c 6e 22 0a 09 20 20 20 20  height,\n"..    
09c0: 20 20 20 20 20 20 09 22 09 63 68 61 6e 73 5b 30        .".chans[0
09d0: 5d 2c 20 63 68 61 6e 73 5b 31 5d 2c 20 63 68 61  ], chans[1], cha
09e0: 6e 73 5b 32 5d 2c 20 63 68 61 6e 73 5b 33 5d 2c  ns[2], chans[3],
09f0: 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09  \n"..          .
0a00: 22 09 64 73 74 5f 78 2c 20 64 73 74 5f 79 2c 20  ".dst_x, dst_y, 
0a10: 64 73 74 5f 77 69 64 74 68 2c 20 64 73 74 5f 68  dst_width, dst_h
0a20: 65 69 67 68 74 2c 22 0a 09 20 20 20 20 20 20 20  eight,"..       
0a30: 20 20 20 09 22 09 73 72 63 5f 78 30 2c 20 73 72     .".src_x0, sr
0a40: 63 5f 78 31 2c 20 73 72 63 5f 79 30 2c 20 73 72  c_x1, src_y0, sr
0a50: 63 5f 79 31 22 0a 09 20 20 20 20 20 20 20 20 20  c_y1"..         
0a60: 20 09 22 29 3b 22 29 5d 29 0a 09 20 20 28 6c 61   .");")])..  (la
0a70: 6d 62 64 61 20 28 63 61 6e 76 61 73 20 64 73 74  mbda (canvas dst
0a80: 2d 78 20 64 73 74 2d 79 20 73 72 63 2d 77 69 64  -x dst-y src-wid
0a90: 74 68 20 73 72 63 2d 68 65 69 67 68 74 20 64 61  th src-height da
0aa0: 74 61 0a 09 20 20 20 20 20 20 20 20 20 20 20 23  ta..           #
0ab0: 21 6b 65 79 20 5b 77 69 64 74 68 20 30 5d 20 5b  !key [width 0] [
0ac0: 68 65 69 67 68 74 20 30 5d 20 5b 78 30 20 30 5d  height 0] [x0 0]
0ad0: 20 5b 78 31 20 30 5d 20 5b 79 30 20 30 5d 20 5b   [x1 0] [y0 0] [
0ae0: 79 31 20 30 5d 29 0a 09 20 20 09 28 75 6e 6c 65  y1 0])..  .(unle
0af0: 73 73 20 28 3d 20 28 62 6c 6f 62 2d 73 69 7a 65  ss (= (blob-size
0b00: 20 64 61 74 61 29 20 28 2a 20 34 20 73 72 63 2d   data) (* 4 src-
0b10: 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 68 74  width src-height
0b20: 29 29 0a 09 20 20 09 09 28 65 72 72 6f 72 20 27  ))..  ..(error '
0b30: 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d 73 65 74  canvas-image-set
0b40: 2f 72 67 62 61 21 20 22 62 61 64 20 69 6d 61 67  /rgba! "bad imag
0b50: 65 20 73 69 7a 65 22 20 28 62 6c 6f 62 2d 73 69  e size" (blob-si
0b60: 7a 65 20 64 61 74 61 29 20 28 2a 20 34 20 73 72  ze data) (* 4 sr
0b70: 63 2d 77 69 64 74 68 20 73 72 63 2d 68 65 69 67  c-width src-heig
0b80: 68 74 29 29 29 0a 09 20 20 09 28 63 61 6e 76 61  ht)))..  .(canva
0b90: 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 61  s-image-set/rgba
0ba0: 2f 72 61 77 21 0a 09 20 20 09 09 63 61 6e 76 61  /raw!..  ..canva
0bb0: 73 20 64 73 74 2d 78 20 64 73 74 2d 79 20 73 72  s dst-x dst-y sr
0bc0: 63 2d 77 69 64 74 68 20 73 72 63 2d 68 65 69 67  c-width src-heig
0bd0: 68 74 20 64 61 74 61 0a 09 20 20 09 09 77 69 64  ht data..  ..wid
0be0: 74 68 20 68 65 69 67 68 74 20 78 30 20 78 31 20  th height x0 x1 
0bf0: 79 30 20 79 31 29 29 29 29 0a 0a 28 64 65 66 69  y0 y1))))..(defi
0c00: 6e 65 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 2f  ne canvas-image/
0c10: 72 67 62 0a 09 28 67 65 74 74 65 72 2d 77 69 74  rgb..(getter-wit
0c20: 68 2d 73 65 74 74 65 72 0a 09 09 28 6c 65 74 72  h-setter...(letr
0c30: 65 63 20 28 5b 63 61 6e 76 61 73 2d 69 6d 61 67  ec ([canvas-imag
0c40: 65 2f 72 67 62 2f 72 61 77 0a 09 09 09 09 09 09  e/rgb/raw.......
0c50: 09 28 66 6f 72 65 69 67 6e 2d 6c 61 6d 62 64 61  .(foreign-lambda
0c60: 2a 20 76 6f 69 64 20 28 5b 6e 6f 6e 6e 75 6c 6c  * void ([nonnull
0c70: 2d 63 61 6e 76 61 73 20 63 61 6e 76 61 73 5d 20  -canvas canvas] 
0c80: 5b 69 6e 74 20 78 5d 20 5b 69 6e 74 20 79 5d 0a  [int x] [int y].
0c90: 09 09 09 09 09 09 09 20 20 20 20 20 20 20 20 20  .......         
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69                [i
0cb0: 6e 74 20 77 69 64 74 68 5d 20 5b 69 6e 74 20 68  nt width] [int h
0cc0: 65 69 67 68 74 5d 20 20 5b 6e 6f 6e 6e 75 6c 6c  eight]  [nonnull
0cd0: 2d 62 6c 6f 62 20 64 61 74 61 5d 29 0a 09 09 09  -blob data])....
0ce0: 09 09 09 09 20 20 22 63 6f 6e 73 74 20 69 6e 74  ....  "const int
0cf0: 20 6e 63 68 61 6e 73 20 3d 20 33 3b 5c 6e 22 0a   nchans = 3;\n".
0d00: 09 09 09 09 09 09 09 20 20 22 75 6e 73 69 67 6e  .......  "unsign
0d10: 65 64 20 63 68 61 72 20 63 68 61 6e 73 5b 6e 63  ed char chans[nc
0d20: 68 61 6e 73 5d 5b 77 69 64 74 68 20 2a 20 68 65  hans][width * he
0d30: 69 67 68 74 5d 3b 5c 6e 22 0a 09 09 09 09 09 09  ight];\n".......
0d40: 09 20 20 22 69 6e 74 20 69 3b 5c 6e 22 0a 09 09  .  "int i;\n"...
0d50: 09 09 09 09 09 20 20 22 5c 6e 22 0a 09 09 09 09  .....  "\n".....
0d60: 09 09 09 20 20 22 63 64 43 61 6e 76 61 73 47 65  ...  "cdCanvasGe
0d70: 74 49 6d 61 67 65 52 47 42 28 5c 6e 22 0a 09 09  tImageRGB(\n"...
0d80: 09 09 09 09 09 20 20 22 09 63 61 6e 76 61 73 2c  .....  ".canvas,
0d90: 5c 6e 22 0a 09 09 09 09 09 09 09 20 20 22 09 63  \n"........  ".c
0da0: 68 61 6e 73 5b 30 5d 2c 20 63 68 61 6e 73 5b 31  hans[0], chans[1
0db0: 5d 2c 20 63 68 61 6e 73 5b 32 5d 2c 5c 6e 22 0a  ], chans[2],\n".
0dc0: 09 09 09 09 09 09 09 20 20 22 09 78 2c 20 79 2c  .......  ".x, y,
0dd0: 20 77 69 64 74 68 2c 20 68 65 69 67 68 74 5c 6e   width, height\n
0de0: 22 0a 09 09 09 09 09 09 09 20 20 22 29 3b 5c 6e  "........  ");\n
0df0: 22 0a 09 09 09 09 09 09 09 20 20 22 5c 6e 22 0a  "........  "\n".
0e00: 09 09 09 09 09 09 09 20 20 22 66 6f 72 20 28 69  .......  "for (i
0e10: 20 3d 20 30 3b 20 69 20 3c 20 6e 63 68 61 6e 73   = 0; i < nchans
0e20: 20 2a 20 77 69 64 74 68 20 2a 20 68 65 69 67 68   * width * heigh
0e30: 74 3b 20 2b 2b 69 29 5c 6e 22 0a 09 09 09 09 09  t; ++i)\n"......
0e40: 09 09 20 20 22 09 64 61 74 61 5b 69 5d 20 3d 20  ..  ".data[i] = 
0e50: 63 68 61 6e 73 5b 69 20 25 20 6e 63 68 61 6e 73  chans[i % nchans
0e60: 5d 5b 69 20 2f 20 6e 63 68 61 6e 73 5d 3b 5c 6e  ][i / nchans];\n
0e70: 22 29 5d 29 0a 09 09 09 28 6c 61 6d 62 64 61 20  ")])....(lambda 
0e80: 28 63 61 6e 76 61 73 20 78 20 79 20 77 69 64 74  (canvas x y widt
0e90: 68 20 68 65 69 67 68 74 29 0a 09 09 09 09 28 6c  h height).....(l
0ea0: 65 74 20 28 5b 64 61 74 61 20 28 6d 61 6b 65 2d  et ([data (make-
0eb0: 62 6c 6f 62 20 28 2a 20 33 20 77 69 64 74 68 20  blob (* 3 width 
0ec0: 68 65 69 67 68 74 29 29 5d 29 0a 09 09 09 09 09  height))])......
0ed0: 28 63 61 6e 76 61 73 2d 69 6d 61 67 65 2f 72 67  (canvas-image/rg
0ee0: 62 2f 72 61 77 20 63 61 6e 76 61 73 20 78 20 79  b/raw canvas x y
0ef0: 20 77 69 64 74 68 20 68 65 69 67 68 74 20 64 61   width height da
0f00: 74 61 29 0a 09 09 09 09 09 64 61 74 61 29 29 29  ta)......data)))
0f10: 0a 09 09 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d  ...canvas-image-
0f20: 70 75 74 2f 72 67 62 21 29 29 0a 0a 3b 3b 20 7d  put/rgb!))..;; }
0f30: 7d 7d 0a                                         }}.