___.          .__.                  .__         ,
 |  * _  *  * [__]._.._. _.  . *  * [__) _ *._ -+- _ ._.
 |  |(/, *  * |  |[  [  (_]\_| *  * |   (_)|[ ) | (/,[
                           ._|


                           the xs-friendly way
                           to tie perl arrays
                           to c arrays


 # Perl

     tie my @palette, 'Tie::Array::Pointer', {
       length => 256 * 3,  # 768
       type   => 'C',      # unsigned chars (see perldoc -f pack)
     }

     do_something_with_palette(\@palette);


 # perl sub

       sub do_something_with_palette {
         my $array = shift;

         # .**** this is how we share *******.
         # *                                 *

         my $address = tied(@$array)->address;

         # *                                 *
         # `*********************************'

         xsub_manipulate_palette($address, scalar(@$array));
       }



 # XSUB

                   void
                   xsub_manipulate_palette(addr, len)
                       unsigned char *addr;
                       int            len;
                     CODE:
                       memfrob(addr, len); /* man 3 memfrob */


 # Back in Perl Land

     foreach (@palette) {
       $_; # has been manipulated by funky gnu c code.
     }




# # # # # # # # # # # # # # # # # # # # # # # ## yet another buppu creation ##