| @@ -2,4 +2,5 @@ $Id$ | |||||
| Sam Hocevar <sam@zoy.org> - main programmer | Sam Hocevar <sam@zoy.org> - main programmer | ||||
| Jean-Yves Lamoureux <jylam@lnxscene.org> - cacaball | Jean-Yves Lamoureux <jylam@lnxscene.org> - cacaball | ||||
| John Beppu <beppu@lbox.org> - Term::Caca Perl wrapper | |||||
| @@ -0,0 +1,22 @@ | |||||
| use Module::Build; | |||||
| my $builder = Module::Build->new ( | |||||
| module_name => 'Term::Caca', | |||||
| license => 'lgpl', | |||||
| requires => { | |||||
| }, | |||||
| build_requires => { | |||||
| 'Test::More' => 0, | |||||
| }, | |||||
| script_files => [ | |||||
| ], | |||||
| extra_compiler_flags => scalar `caca-config --cflags`, | |||||
| extra_linker_flags => scalar `caca-config --libs`, | |||||
| create_makefile_pl => 'passthrough', | |||||
| ); | |||||
| $builder->create_build_script(); | |||||
| @@ -0,0 +1,17 @@ | |||||
| .cvsignore | |||||
| Build.PL | |||||
| lib/Term/Caca.pm | |||||
| lib/Term/Caca.xs | |||||
| lib/Term/Caca/Bitmap.pm | |||||
| lib/Term/Caca/Constants.pm | |||||
| lib/Term/Caca/Sprite.pm | |||||
| lib/Term/Kaka.pm | |||||
| lib/Term/Kaka/Bitmap.pm | |||||
| lib/Term/Kaka/Constants.pm | |||||
| lib/Term/Kaka/Sprite.pm | |||||
| Makefile.PL | |||||
| MANIFEST This list of files | |||||
| MANIFEST.SKIP | |||||
| META.yml | |||||
| README | |||||
| t/data/caca.txt | |||||
| @@ -0,0 +1,11 @@ | |||||
| \bCVS\b | |||||
| ^MANIFEST\.bak$ | |||||
| ^Makefile$ | |||||
| \..*\.swp$ | |||||
| ~$ | |||||
| \bblib\b | |||||
| \b\.xvpics\b | |||||
| \b_build\b | |||||
| ^Build$ | |||||
| ^Linux-Input.*gz$ | |||||
| ^x.pl$ | |||||
| @@ -0,0 +1,29 @@ | |||||
| --- #YAML:1.0 | |||||
| name: Term-Caca | |||||
| version: 0.9_1 | |||||
| author: ~ | |||||
| abstract: |- | |||||
| perl interface for libcaca (Colour AsCii Art library) | |||||
| license: lgpl | |||||
| build_requires: | |||||
| Test::More: 0 | |||||
| provides: | |||||
| Term::Caca: | |||||
| file: lib/Term/Caca.pm | |||||
| version: 0.9_1 | |||||
| Term::Caca::Bitmap: | |||||
| file: lib/Term/Caca/Bitmap.pm | |||||
| Term::Caca::Constants: | |||||
| file: lib/Term/Caca/Constants.pm | |||||
| version: 0.9 | |||||
| Term::Caca::Sprite: | |||||
| file: lib/Term/Caca/Sprite.pm | |||||
| Term::Kaka: | |||||
| file: lib/Term/Kaka.pm | |||||
| Term::Kaka::Bitmap: | |||||
| file: lib/Term/Kaka/Bitmap.pm | |||||
| Term::Kaka::Constants: | |||||
| file: lib/Term/Kaka/Constants.pm | |||||
| Term::Kaka::Sprite: | |||||
| file: lib/Term/Kaka/Sprite.pm | |||||
| generated_by: Module::Build version 0.26 | |||||
| @@ -0,0 +1,31 @@ | |||||
| # Note: this file was auto-generated by Module::Build::Compat version 0.03 | |||||
| unless (eval "use Module::Build::Compat 0.02; 1" ) { | |||||
| print "This module requires Module::Build to install itself.\n"; | |||||
| require ExtUtils::MakeMaker; | |||||
| my $yn = ExtUtils::MakeMaker::prompt | |||||
| (' Install Module::Build now from CPAN?', 'y'); | |||||
| unless ($yn =~ /^y/i) { | |||||
| die " *** Cannot install without Module::Build. Exiting ...\n"; | |||||
| } | |||||
| require Cwd; | |||||
| require File::Spec; | |||||
| require CPAN; | |||||
| # Save this 'cause CPAN will chdir all over the place. | |||||
| my $cwd = Cwd::cwd(); | |||||
| my $makefile = File::Spec->rel2abs($0); | |||||
| CPAN::Shell->install('Module::Build::Compat') | |||||
| or die " *** Cannot install without Module::Build. Exiting ...\n"; | |||||
| chdir $cwd or die "Cannot chdir() back to $cwd: $!"; | |||||
| } | |||||
| eval "use Module::Build::Compat 0.02; 1" or die $@; | |||||
| use lib '_build/lib'; | |||||
| Module::Build::Compat->run_build_pl(args => \@ARGV); | |||||
| require Module::Build; | |||||
| Module::Build::Compat->write_makefile(build_class => 'Module::Build'); | |||||
| @@ -0,0 +1,21 @@ | |||||
| ___________ _________ | |||||
| \__ ___/__________ _____ /\ /\ \_ ___ \_____ ____ _____ | |||||
| | |_/ __ \_ __ \/ \ \/ \/ / \ \/\__ \ _/ ___\\__ \ | |||||
| | |\ ___/| | \/ Y Y \ /\ /\ \ \____/ __ \\ \___ / __ \_ | |||||
| |____| \___ >__| |__|_| / \/ \/ \______ (____ /\___ >____ / | |||||
| \/ \/ \/ \/ \/ \/ | |||||
| --]- a perl wrapper around libcaca (Colour AsCii Art library) | |||||
| ^ ^ ^ ^ | |||||
| http://sam.zoy.org/projects/libcaca/ | |||||
| --]- a note about versioning, | |||||
| Term-Caca-x.y_z.tar.gz | |||||
| | | ^--------- sub-version of this perl wrapper | |||||
| | | | |||||
| `-`----------- version of libcaca c library | |||||
| this wrapper is based on. | |||||
| @@ -0,0 +1,389 @@ | |||||
| package Term::Caca; | |||||
| require Exporter; | |||||
| require DynaLoader; | |||||
| $VERSION = '0.9_1'; | |||||
| @ISA = qw(Exporter DynaLoader); | |||||
| Term::Caca->bootstrap($VERSION); | |||||
| use strict; | |||||
| use Term::Caca::Constants ':all'; | |||||
| # Basic functions | |||||
| # constructor | |||||
| sub new { | |||||
| my ($class) = @_; | |||||
| _init(); | |||||
| my $self = { }; | |||||
| return bless($self => $class); | |||||
| } | |||||
| *init = \*new; | |||||
| # set delay for establishing constant framerate | |||||
| sub set_delay { | |||||
| my ($self, $usec) = @_; | |||||
| $usec ||= 0; | |||||
| _set_delay($usec); | |||||
| } | |||||
| # | |||||
| sub get_feature { | |||||
| my ($self, $feature) = @_; | |||||
| $feature ||= 0; | |||||
| return _get_feature($feature); | |||||
| } | |||||
| # | |||||
| sub set_feature { | |||||
| my ($self, $feature) = @_; | |||||
| $feature ||= 0; | |||||
| _get_feature($feature); | |||||
| } | |||||
| # | |||||
| sub get_feature_name { | |||||
| my ($self, $feature) = @_; | |||||
| $feature ||= 0; | |||||
| return _get_feature_name($feature); | |||||
| } | |||||
| # | |||||
| sub get_rendertime { | |||||
| # my ($self) = @_; | |||||
| return _get_rendertime(); | |||||
| } | |||||
| # | |||||
| sub get_width { | |||||
| # my ($self) = @_; | |||||
| return _get_width(); | |||||
| } | |||||
| # | |||||
| sub get_height { | |||||
| # my ($self) = @_; | |||||
| return _get_height(); | |||||
| } | |||||
| # | |||||
| sub set_window_title { | |||||
| my ($self, $title) = @_; | |||||
| $title ||= ""; | |||||
| return _set_window_title($title); | |||||
| } | |||||
| # | |||||
| sub get_window_width { | |||||
| # my ($self) = @_; | |||||
| return _get_window_width(); | |||||
| } | |||||
| # | |||||
| sub get_window_height { | |||||
| # my ($self) = @_; | |||||
| return _get_window_height(); | |||||
| } | |||||
| # | |||||
| sub refresh { | |||||
| _refresh(); | |||||
| } | |||||
| # destructor | |||||
| sub DESTROY { | |||||
| my ($self) = @_; | |||||
| _end(); | |||||
| } | |||||
| # Event handling | |||||
| # | |||||
| sub get_event { | |||||
| my ($self, $event_mask) = @_; | |||||
| if (!defined($event_mask)) { | |||||
| $event_mask = 0xFFFFFFFF; | |||||
| } | |||||
| return _get_event($event_mask); | |||||
| } | |||||
| # | |||||
| sub get_mouse_x { | |||||
| my ($self) = @_; | |||||
| return _get_mouse_x(); | |||||
| } | |||||
| # | |||||
| sub get_mouse_y { | |||||
| my ($self) = @_; | |||||
| return _get_mouse_y(); | |||||
| } | |||||
| # | |||||
| sub wait_event { | |||||
| my ($self, $event_mask) = @_; | |||||
| $event_mask ||= CACA_EVENT_ANY; | |||||
| return _wait_event($event_mask); | |||||
| } | |||||
| 1; | |||||
| # Character printing | |||||
| # | |||||
| sub set_color { | |||||
| my ($self, $fgcolor, $bgcolor) = @_; | |||||
| $fgcolor ||= CACA_COLOR_LIGHTGRAY; | |||||
| $bgcolor ||= CACA_COLOR_BLACK; | |||||
| return _set_color($fgcolor, $bgcolor); | |||||
| } | |||||
| # | |||||
| sub get_fg_color { | |||||
| my ($self) = @_; | |||||
| return _get_fg_color(); | |||||
| } | |||||
| # | |||||
| sub get_bg_color { | |||||
| my ($self) = @_; | |||||
| return _get_bg_color(); | |||||
| } | |||||
| # | |||||
| sub get_color_name { | |||||
| my ($self, $color) = @_; | |||||
| return undef unless(defined($color)); | |||||
| return _get_color_name($color); | |||||
| } | |||||
| # | |||||
| sub putchar { | |||||
| my ($self, $x, $y, $c) = @_; | |||||
| $x ||= 0; | |||||
| $y ||= 0; | |||||
| $c ||= ""; | |||||
| _putchar($x, $y, $c); | |||||
| } | |||||
| # | |||||
| sub putstr { | |||||
| my ($self, $x, $y, $s) = @_; | |||||
| $x ||= 0; | |||||
| $y ||= 0; | |||||
| $s ||= ""; | |||||
| _putstr($x, $y, $s); | |||||
| } | |||||
| # faking it by doing printf on the perl side | |||||
| sub printf { | |||||
| my ($self, $x, $y, $s, @args) = @_; | |||||
| $x ||= 0; | |||||
| $y ||= 0; | |||||
| my $string = sprintf($s, @args); | |||||
| _putstr($x, $y, $string); | |||||
| } | |||||
| # | |||||
| sub clear { | |||||
| _clear(); | |||||
| } | |||||
| # Primitives drawing | |||||
| # | |||||
| sub draw_line { | |||||
| my ($self, $x1, $y1, $x2, $y2, $c) = @_; | |||||
| _draw_line($x1, $y1, $x2, $y2, $c); | |||||
| } | |||||
| # | |||||
| sub draw_polyline { | |||||
| my ($self, $x, $y, $n, $c) = @_; | |||||
| _draw_polyline($x, $y, $n, $c); | |||||
| } | |||||
| # | |||||
| sub draw_thin_line { | |||||
| my ($self, $x1, $y1, $x2, $y2) = @_; | |||||
| _draw_thin_line($x1, $y1, $x2, $y2); | |||||
| } | |||||
| # | |||||
| sub draw_thin_polyline { | |||||
| my ($self, $x, $y, $n) = @_; | |||||
| _draw_thin_polyline($x, $y, $n); | |||||
| } | |||||
| # | |||||
| sub draw_circle { | |||||
| my ($self, $x, $y, $r, $c) = @_; | |||||
| # TODO : check for sane values | |||||
| _draw_circle($x, $y, $r, $c); | |||||
| } | |||||
| # | |||||
| sub draw_ellipse { | |||||
| my ($self, $x0, $y0, $ra, $rb, $c) = @_; | |||||
| _draw_ellipse($x0, $y0, $ra, $rb, $c); | |||||
| } | |||||
| # | |||||
| sub draw_thin_ellipse { | |||||
| my ($self, $x0, $y0, $ra, $rb) = @_; | |||||
| _draw_ellipse($x0, $y0, $ra, $rb); | |||||
| } | |||||
| # | |||||
| sub fill_ellipse { | |||||
| my ($self, $x0, $y0, $ra, $rb, $c) = @_; | |||||
| _fill_ellipse($x0, $y0, $ra, $rb, $c); | |||||
| } | |||||
| # | |||||
| sub draw_box { | |||||
| my ($self, $x0, $y0, $x1, $y1, $c) = @_; | |||||
| _draw_box($x0, $y0, $x1, $y1, $c); | |||||
| } | |||||
| # | |||||
| sub draw_thin_box { | |||||
| my ($self, $x0, $y0, $x1, $y1) = @_; | |||||
| _draw_thin_box($x0, $y0, $x1, $y1); | |||||
| } | |||||
| # | |||||
| sub fill_box { | |||||
| my ($self, $x0, $y0, $x1, $y1, $c) = @_; | |||||
| _fill_box($x0, $y0, $x1, $y1, $c); | |||||
| } | |||||
| # | |||||
| sub draw_triangle { | |||||
| my ($self, $x0, $y0, $x1, $y1, $x2, $y2, $c) = @_; | |||||
| _draw_triangle($x0, $y0, $x1, $y1, $x2, $y2, $c); | |||||
| } | |||||
| # | |||||
| sub draw_thin_triangle { | |||||
| my ($self, $x0, $y0, $x1, $y1, $x2, $y2) = @_; | |||||
| _draw_thin_triangle($x0, $y0, $x1, $y1, $x2, $y2); | |||||
| } | |||||
| # | |||||
| sub fill_triangle { | |||||
| my ($self, $x0, $y0, $x1, $y1, $x2, $y2, $c) = @_; | |||||
| _fill_triangle($x0, $y0, $x1, $y1, $x2, $y2, $c); | |||||
| } | |||||
| # Mathematical functions | |||||
| # | |||||
| sub rand { | |||||
| my ($self, $min, $max) = @_; | |||||
| return _rand($min, $max); | |||||
| } | |||||
| # | |||||
| sub sqrt { | |||||
| my ($self, $n) = @_; | |||||
| return _sqrt($n); | |||||
| } | |||||
| # Sprite handling | |||||
| # | |||||
| sub load_sprite { | |||||
| my ($self, $file) = @_; | |||||
| my $sprite = _load_sprite($file); | |||||
| } | |||||
| # | |||||
| sub get_sprite_frames { | |||||
| my ($self, $sprite) = @_; | |||||
| return _get_sprite_frames($sprite); | |||||
| } | |||||
| # | |||||
| sub get_sprite_width { | |||||
| my ($self, $sprite) = @_; | |||||
| return _get_sprite_width($sprite); | |||||
| } | |||||
| # | |||||
| sub get_sprite_height { | |||||
| my ($self, $sprite) = @_; | |||||
| return _get_sprite_height($sprite); | |||||
| } | |||||
| # | |||||
| sub get_sprite_dx { | |||||
| my ($self, $sprite) = @_; | |||||
| return _get_sprite_dx($sprite); | |||||
| } | |||||
| # | |||||
| sub get_sprite_dy { | |||||
| my ($self, $sprite) = @_; | |||||
| return _get_sprite_dy($sprite); | |||||
| } | |||||
| # | |||||
| sub draw_sprite { | |||||
| my ($self, $x, $y, $sprite, $f) = @_; | |||||
| _draw_sprite($x, $y, $sprite, $f); | |||||
| } | |||||
| # | |||||
| sub free_sprite { | |||||
| my ($self, $sprite) = @_; | |||||
| _free_sprite($sprite); | |||||
| } | |||||
| # Bitmap handling | |||||
| # | |||||
| sub create_bitmap { | |||||
| my ($self, $bpp, $w, $h, $pitch, $rmask, $gmask, $bmask, $amask) = @_; | |||||
| _create_bitmap($bpp, $w, $h, $pitch, $rmask, $gmask, $bmask, $amask); | |||||
| } | |||||
| # | |||||
| sub set_bitmap_palette { | |||||
| my ($self, $bitmap, $red, $green, $blue, $alpha) = @_; | |||||
| _set_bitmap_palette($bitmap, $red, $green, $blue, $alpha); | |||||
| } | |||||
| # | |||||
| sub draw_bitmap { | |||||
| my ($self, $x1, $y1, $x2, $y2, $bitmap, $pixels) = @_; | |||||
| _draw_bitmap($x1, $y1, $x2, $y2, $bitmap, $pixels); | |||||
| } | |||||
| sub free_bitmap { | |||||
| my ($self, $bitmap) = @_; | |||||
| _free_bitmap($bitmap); | |||||
| } | |||||
| __END__ | |||||
| =head1 NAME | |||||
| Term::Caca - perl interface for libcaca (Colour AsCii Art library) | |||||
| =head1 SYNOPSIS | |||||
| =head1 DESCRIPTION | |||||
| =head2 Class Methods | |||||
| =head2 Object Methods | |||||
| =head1 AUTHOR | |||||
| =head1 SEE ALSO | |||||
| =cut | |||||
| # vim:sw=2 sts=2 expandtab | |||||
| # $Id: Caca.pm,v 1.5 2004/10/25 18:14:57 beppu Exp $ | |||||
| @@ -0,0 +1,650 @@ | |||||
| /* What will I use my programming skill for? */ | |||||
| #include "EXTERN.h" | |||||
| #include "perl.h" | |||||
| #include "XSUB.h" | |||||
| #include "caca.h" | |||||
| /* ref($sprite) eq 'HASH' && $sprite->{__address__} */ | |||||
| void * | |||||
| address_of(SV *sprite) | |||||
| { | |||||
| /* make sure sprite is a hashref */ | |||||
| if (SvTYPE(SvRV(sprite)) != SVt_PVHV) { | |||||
| return NULL; | |||||
| } | |||||
| return (struct caca_sprite *) | |||||
| SvIV(*hv_fetch((HV *) SvRV(sprite), "__address__", 11, 0)); | |||||
| } | |||||
| /* turn a perl array of numbers into a c array */ | |||||
| void * | |||||
| c_array(SV *p_array) | |||||
| { | |||||
| } | |||||
| MODULE = Term::Caca PACKAGE = Term::Caca | |||||
| # -==[- Basic functions -]==-------------------------------------------------- | |||||
| void | |||||
| _init() | |||||
| CODE: | |||||
| caca_init(); | |||||
| void | |||||
| _set_delay(usec) | |||||
| unsigned int usec | |||||
| CODE: | |||||
| caca_set_delay(usec); | |||||
| unsigned int | |||||
| _get_feature(feature) | |||||
| unsigned int feature | |||||
| CODE: | |||||
| RETVAL = caca_get_feature(feature); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| void | |||||
| _set_feature(feature) | |||||
| unsigned int feature | |||||
| CODE: | |||||
| caca_set_feature(feature); | |||||
| const char * | |||||
| _get_feature_name(feature) | |||||
| unsigned int feature | |||||
| CODE: | |||||
| RETVAL = caca_get_feature_name(feature); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_rendertime() | |||||
| CODE: | |||||
| RETVAL = caca_get_rendertime(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_width() | |||||
| CODE: | |||||
| RETVAL = caca_get_width(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_height() | |||||
| CODE: | |||||
| RETVAL = caca_get_height(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| int | |||||
| _set_window_title(title) | |||||
| const char *title | |||||
| CODE: | |||||
| RETVAL = caca_set_window_title(title); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_window_width() | |||||
| CODE: | |||||
| RETVAL = caca_get_window_width(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_window_height() | |||||
| CODE: | |||||
| RETVAL = caca_get_window_height(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| void | |||||
| _refresh() | |||||
| CODE: | |||||
| caca_refresh(); | |||||
| void | |||||
| _end() | |||||
| CODE: | |||||
| caca_end(); | |||||
| # -==[- Event handling -]==--------------------------------------------------- | |||||
| unsigned int | |||||
| _get_event(event_mask) | |||||
| unsigned int event_mask | |||||
| CODE: | |||||
| RETVAL = caca_get_event(event_mask); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_mouse_x() | |||||
| CODE: | |||||
| RETVAL = caca_get_mouse_x(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_mouse_y() | |||||
| CODE: | |||||
| RETVAL = caca_get_mouse_y(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _wait_event(event_mask) | |||||
| unsigned int event_mask | |||||
| CODE: | |||||
| RETVAL = caca_wait_event(event_mask); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| # -==[- Character printing -]==----------------------------------------------- | |||||
| void | |||||
| _set_color(fgcolor, bgcolor) | |||||
| unsigned int fgcolor; | |||||
| unsigned int bgcolor; | |||||
| CODE: | |||||
| caca_set_color(fgcolor, bgcolor); | |||||
| unsigned int | |||||
| _get_fg_color() | |||||
| CODE: | |||||
| RETVAL = caca_get_fg_color(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _get_bg_color() | |||||
| CODE: | |||||
| RETVAL = caca_get_bg_color(); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| const char * | |||||
| _get_color_name(color) | |||||
| unsigned int color | |||||
| CODE: | |||||
| RETVAL = caca_get_color_name(color); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| void | |||||
| _putchar(x, y, c) | |||||
| int x; | |||||
| int y; | |||||
| char c; | |||||
| CODE: | |||||
| caca_putchar(x, y, c); | |||||
| void | |||||
| _putstr(x, y, s) | |||||
| int x; | |||||
| int y; | |||||
| const char *s; | |||||
| CODE: | |||||
| caca_putstr(x, y, s); | |||||
| # skip caca_printf for now. | |||||
| # handle va_args on perl side. | |||||
| void | |||||
| _clear() | |||||
| CODE: | |||||
| caca_clear(); | |||||
| # -==[- Primitives drawing -]==----------------------------------------------- | |||||
| void | |||||
| _draw_line(x1, y1, x2, y2, c) | |||||
| int x1; | |||||
| int y1; | |||||
| int x2; | |||||
| int y2; | |||||
| char c; | |||||
| CODE: | |||||
| caca_draw_line(x1, y1, x2, y2, c); | |||||
| void | |||||
| _draw_polyline(x, y, n, c) | |||||
| SV *x; | |||||
| SV *y; | |||||
| int n; | |||||
| char c; | |||||
| INIT: | |||||
| int *xc; | |||||
| int *yc; | |||||
| int i; | |||||
| /* make sure x and y are perl arrayrefs */ | |||||
| if ( (SvTYPE(SvRV(x)) != SVt_PVAV) | |||||
| || (SvTYPE(SvRV(y)) != SVt_PVAV) ) | |||||
| { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| /* create a C int array out of x and y */ | |||||
| xc = (int *) malloc((n+1) * sizeof(int *)); | |||||
| if (!xc) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| yc = (int *) malloc((n+1) * sizeof(int *)); | |||||
| if (!yc) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| for (i = 0; i <= n; i++) { | |||||
| SV **integer; | |||||
| integer = av_fetch((AV *) SvRV(x), i, 0); | |||||
| if (integer) { | |||||
| xc[i] = SvIV(*integer); | |||||
| } else { | |||||
| xc[i] = 0; | |||||
| } | |||||
| integer = av_fetch((AV *) SvRV(y), i, 0); | |||||
| if (integer) { | |||||
| yc[i] = SvIV(*integer); | |||||
| } else { | |||||
| yc[i] = 0; | |||||
| } | |||||
| } | |||||
| CODE: | |||||
| caca_draw_polyline(xc, yc, n, c); | |||||
| free(yc); | |||||
| free(xc); | |||||
| void | |||||
| _draw_thin_line(x1, y1, x2, y2) | |||||
| int x1; | |||||
| int y1; | |||||
| int x2; | |||||
| int y2; | |||||
| CODE: | |||||
| caca_draw_thin_line(x1, y1, x2, y2); | |||||
| void | |||||
| _draw_thin_polyline(x, y, n) | |||||
| SV *x; | |||||
| SV *y; | |||||
| int n; | |||||
| INIT: | |||||
| int *xc; | |||||
| int *yc; | |||||
| int i; | |||||
| /* make sure x and y are perl arrayrefs */ | |||||
| if ( (SvTYPE(SvRV(x)) != SVt_PVAV) | |||||
| || (SvTYPE(SvRV(y)) != SVt_PVAV) ) | |||||
| { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| /* create a C int array out of x and y */ | |||||
| xc = (int *) malloc((n+1) * sizeof(int *)); | |||||
| if (!xc) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| yc = (int *) malloc((n+1) * sizeof(int *)); | |||||
| if (!yc) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| for (i = 0; i <= n; i++) { | |||||
| SV **integer; | |||||
| integer = av_fetch((AV *) SvRV(x), i, 0); | |||||
| if (integer) { | |||||
| xc[i] = SvIV(*integer); | |||||
| } else { | |||||
| xc[i] = 0; | |||||
| } | |||||
| integer = av_fetch((AV *) SvRV(y), i, 0); | |||||
| if (integer) { | |||||
| yc[i] = SvIV(*integer); | |||||
| } else { | |||||
| yc[i] = 0; | |||||
| } | |||||
| } | |||||
| CODE: | |||||
| caca_draw_thin_polyline(xc, yc, n); | |||||
| free(yc); | |||||
| free(xc); | |||||
| void | |||||
| _draw_circle(x, y, r, c) | |||||
| int x; | |||||
| int y; | |||||
| int r; | |||||
| char c; | |||||
| CODE: | |||||
| caca_draw_circle(x, y, r, c); | |||||
| void | |||||
| _draw_ellipse(x0, y0, a, b, c) | |||||
| int x0; | |||||
| int y0; | |||||
| int a; | |||||
| int b; | |||||
| char c; | |||||
| CODE: | |||||
| caca_draw_ellipse(x0, y0, a, b, c); | |||||
| void | |||||
| _draw_thin_ellipse(x0, y0, a, b) | |||||
| int x0; | |||||
| int y0; | |||||
| int a; | |||||
| int b; | |||||
| CODE: | |||||
| caca_draw_thin_ellipse(x0, y0, a, b); | |||||
| void | |||||
| _fill_ellipse(x0, y0, a, b, c) | |||||
| int x0; | |||||
| int y0; | |||||
| int a; | |||||
| int b; | |||||
| char c; | |||||
| CODE: | |||||
| caca_fill_ellipse(x0, y0, a, b, c); | |||||
| void | |||||
| _draw_box(x0, y0, x1, y1, c) | |||||
| int x0; | |||||
| int y0; | |||||
| int x1; | |||||
| int y1; | |||||
| char c; | |||||
| CODE: | |||||
| caca_draw_box(x0, y0, x1, y1, c); | |||||
| void | |||||
| _draw_thin_box(x0, y0, x1, y1) | |||||
| int x0; | |||||
| int y0; | |||||
| int x1; | |||||
| int y1; | |||||
| CODE: | |||||
| caca_thin_box(x0, y0, x1, y1); | |||||
| void | |||||
| _fill_box(x0, y0, x1, y1, c) | |||||
| int x0; | |||||
| int y0; | |||||
| int x1; | |||||
| int y1; | |||||
| char c; | |||||
| CODE: | |||||
| caca_fill_box(x0, y0, x1, y1, c); | |||||
| void | |||||
| _draw_triangle(x0, y0, x1, y1, x2, y2, c) | |||||
| int x0; | |||||
| int y0; | |||||
| int x1; | |||||
| int y1; | |||||
| int x2; | |||||
| int y2; | |||||
| char c; | |||||
| CODE: | |||||
| caca_draw_triangle(x0, y0, x1, y1, x2, y2, c); | |||||
| void | |||||
| _draw_thin_triangle(x0, y0, x1, y1, x2, y2) | |||||
| int x0; | |||||
| int y0; | |||||
| int x1; | |||||
| int y1; | |||||
| int x2; | |||||
| int y2; | |||||
| CODE: | |||||
| caca_draw_thin_triangle(x0, y0, x1, y1, x2, y2); | |||||
| void | |||||
| _fill_triangle(x0, y0, x1, y1, x2, y2, c) | |||||
| int x0; | |||||
| int y0; | |||||
| int x1; | |||||
| int y1; | |||||
| int x2; | |||||
| int y2; | |||||
| char c; | |||||
| CODE: | |||||
| caca_fill_triangle(x0, y0, x1, y1, x2, y2, c); | |||||
| # -==[- Mathematical functions -]==------------------------------------------- | |||||
| int | |||||
| _rand(min, max) | |||||
| int min; | |||||
| int max; | |||||
| CODE: | |||||
| RETVAL = caca_rand(min, max); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| unsigned int | |||||
| _sqrt(n) | |||||
| unsigned int n; | |||||
| CODE: | |||||
| RETVAL = caca_sqrt(n); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| # -==[- Sprite handling -]==- | |||||
| SV * | |||||
| _load_sprite(file) | |||||
| const char *file | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| HV *sprite; | |||||
| CODE: | |||||
| if (!file) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| c_sprite = caca_load_sprite(file); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } else { | |||||
| sprite = (HV *) sv_2mortal((SV *) newHV()); | |||||
| if (!sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| hv_store(sprite, "__address__", 11, newSViv((int) c_sprite), 0); | |||||
| RETVAL = newRV((SV *) sprite); | |||||
| } | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| int | |||||
| _get_sprite_frames(sprite) | |||||
| SV *sprite | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| RETVAL = caca_get_sprite_frames(c_sprite); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| int | |||||
| _get_sprite_width(sprite, f) | |||||
| SV *sprite; | |||||
| int f; | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| RETVAL = caca_get_sprite_width(c_sprite, f); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| int | |||||
| _get_sprite_height(sprite, f) | |||||
| SV *sprite; | |||||
| int f; | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| RETVAL = caca_get_sprite_height(c_sprite, f); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| int | |||||
| _get_sprite_dx(sprite, f) | |||||
| SV *sprite; | |||||
| int f; | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| RETVAL = caca_get_sprite_dx(c_sprite, f); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| int | |||||
| _get_sprite_dy(sprite, f) | |||||
| SV *sprite; | |||||
| int f; | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| RETVAL = caca_get_sprite_dy(c_sprite, f); | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| void | |||||
| _draw_sprite(x, y, sprite, f) | |||||
| int x; | |||||
| int y; | |||||
| SV *sprite; | |||||
| int f; | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| caca_draw_sprite(x, y, c_sprite, f); | |||||
| void | |||||
| _free_sprite(sprite) | |||||
| SV *sprite; | |||||
| INIT: | |||||
| struct caca_sprite *c_sprite; | |||||
| c_sprite = address_of(sprite); | |||||
| if (!c_sprite) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| caca_free_sprite(c_sprite); | |||||
| # -==[- Bitmap handling -]==-------------------------------------------------- | |||||
| SV * | |||||
| _create_bitmap(bpp, w, h, pitch, rmask, gmask, bmask, amask) | |||||
| unsigned int bpp; | |||||
| unsigned int w; | |||||
| unsigned int h; | |||||
| unsigned int pitch; | |||||
| unsigned int rmask; | |||||
| unsigned int gmask; | |||||
| unsigned int bmask; | |||||
| unsigned int amask; | |||||
| INIT: | |||||
| struct caca_bitmap *c_bitmap; | |||||
| HV *bitmap; | |||||
| CODE: | |||||
| c_bitmap = | |||||
| caca_create_bitmap(bpp, w, h, pitch, rmask, gmask, bmask, amask); | |||||
| if (!c_bitmap) { | |||||
| XSRETURN_UNDEF; | |||||
| } else { | |||||
| bitmap = (HV *) sv_2mortal((SV *) newHV()); | |||||
| if (!bitmap) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| hv_store(bitmap, "__address__", 11, newSViv((int) c_bitmap), 0); | |||||
| hv_store(bitmap, "__bpp__", 7, newSViv((int) bpp ), 0); | |||||
| RETVAL = newRV((SV *) bitmap); | |||||
| } | |||||
| OUTPUT: | |||||
| RETVAL | |||||
| void | |||||
| _set_bitmap_palette(bitmap, red, green, blue, alpha) | |||||
| SV *bitmap; | |||||
| SV *red; | |||||
| SV *green; | |||||
| SV *blue; | |||||
| SV *alpha; | |||||
| INIT: | |||||
| struct caca_bitmap *c_bitmap; | |||||
| unsigned int *c_red; | |||||
| unsigned int *c_green; | |||||
| unsigned int *c_blue; | |||||
| unsigned int *c_alpha; | |||||
| c_bitmap = address_of(bitmap); | |||||
| if (!c_bitmap) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| /* TODO: perl array to c array */ | |||||
| c_red = c_array(red); | |||||
| c_green = c_array(green); | |||||
| c_blue = c_array(blue); | |||||
| c_alpha = c_array(alpha); | |||||
| CODE: | |||||
| caca_set_bitmap_palette(c_bitmap, c_red, c_green, c_blue, c_alpha); | |||||
| void | |||||
| _draw_bitmap(x1, y1, x2, y2, bitmap, pixels) | |||||
| int x1; | |||||
| int y1; | |||||
| int x2; | |||||
| int y2; | |||||
| SV *bitmap; | |||||
| SV *pixels; | |||||
| INIT: | |||||
| /* TODO: implement Tie::Scalar::Pointer for pixel support */ | |||||
| CODE: | |||||
| void | |||||
| _free_bitmap(bitmap) | |||||
| SV *bitmap; | |||||
| INIT: | |||||
| struct caca_bitmap *c_bitmap; | |||||
| c_bitmap = address_of(bitmap); | |||||
| if (!c_bitmap) { | |||||
| XSRETURN_UNDEF; | |||||
| } | |||||
| CODE: | |||||
| caca_free_bitmap(c_bitmap); | |||||
| # vim:sw=2 sts=2 expandtab | |||||
| @@ -0,0 +1,5 @@ | |||||
| package Term::Caca::Bitmap; | |||||
| 1; | |||||
| @@ -0,0 +1,332 @@ | |||||
| package Term::Caca::Constants; | |||||
| use strict; | |||||
| use base 'Exporter'; | |||||
| use vars qw(@EXPORT_OK %EXPORT_TAGS $VERSION); | |||||
| $VERSION = '0.9'; | |||||
| use constant { | |||||
| ## enum caca_color | |||||
| CACA_COLOR_BLACK => 0, | |||||
| CACA_COLOR_BLUE => 1, | |||||
| CACA_COLOR_GREEN => 2, | |||||
| CACA_COLOR_CYAN => 3, | |||||
| CACA_COLOR_RED => 4, | |||||
| CACA_COLOR_MAGENTA => 5, | |||||
| CACA_COLOR_BROWN => 6, | |||||
| CACA_COLOR_LIGHTGRAY => 7, | |||||
| CACA_COLOR_DARKGRAY => 8, | |||||
| CACA_COLOR_LIGHTBLUE => 9, | |||||
| CACA_COLOR_LIGHTGREEN => 10, | |||||
| CACA_COLOR_LIGHTCYAN => 11, | |||||
| CACA_COLOR_LIGHTRED => 12, | |||||
| CACA_COLOR_LIGHTMAGENTA => 13, | |||||
| CACA_COLOR_YELLOW => 14, | |||||
| CACA_COLOR_WHITE => 15, | |||||
| ## enum caca_feature | |||||
| CACA_BACKGROUND => 0x10, | |||||
| CACA_BACKGROUND_BLACK => 0x11, | |||||
| CACA_BACKGROUND_SOLID => 0x12, | |||||
| CACA_BACKGROUND_MIN => 0x11, | |||||
| CACA_BACKGROUND_MAX => 0x12, | |||||
| CACA_ANTIALIASING => 0x20, | |||||
| CACA_ANTIALIASING_NONE => 0x21, | |||||
| CACA_ANTIALIASING_PREFILTER => 0x22, | |||||
| CACA_ANTIALIASING_MIN => 0x21, | |||||
| CACA_ANTIALIASING_MAX => 0x22, | |||||
| CACA_DITHERING => 0x30, | |||||
| CACA_DITHERING_NONE => 0x31, | |||||
| CACA_DITHERING_ORDERED2 => 0x32, | |||||
| CACA_DITHERING_ORDERED4 => 0x33, | |||||
| CACA_DITHERING_ORDERED8 => 0x34, | |||||
| CACA_DITHERING_RANDOM => 0x35, | |||||
| CACA_DITHERING_MIN => 0x31, | |||||
| CACA_DITHERING_MAX => 0x35, | |||||
| CACA_FEATURE_UNKNOWN => 0xffff, | |||||
| ## enum caca_event | |||||
| CACA_EVENT_NONE => 0x00000000, | |||||
| CACA_EVENT_KEY_PRESS => 0x01000000, | |||||
| CACA_EVENT_KEY_RELEASE => 0x02000000, | |||||
| CACA_EVENT_MOUSE_PRESS => 0x04000000, | |||||
| CACA_EVENT_MOUSE_RELEASE => 0x08000000, | |||||
| CACA_EVENT_MOUSE_MOTION => 0x10000000, | |||||
| CACA_EVENT_RESIZE => 0x20000000, | |||||
| CACA_EVENT_ANY => 0xff000000, | |||||
| ## enum caca_key | |||||
| CACA_KEY_UNKNOWN => 0, | |||||
| # /* The following keys have ASCII equivalents */ | |||||
| CACA_KEY_BACKSPACE => 8, | |||||
| CACA_KEY_TAB => 9, | |||||
| CACA_KEY_RETURN => 13, | |||||
| CACA_KEY_PAUSE => 19, | |||||
| CACA_KEY_ESCAPE => 27, | |||||
| CACA_KEY_DELETE => 127, | |||||
| # /* The following keys do not have ASCII equivalents but have been | |||||
| # * chosen to match the SDL equivalents */ | |||||
| CACA_KEY_UP => 273, | |||||
| CACA_KEY_DOWN => 274, | |||||
| CACA_KEY_LEFT => 275, | |||||
| CACA_KEY_RIGHT => 276, | |||||
| CACA_KEY_INSERT => 277, | |||||
| CACA_KEY_HOME => 278, | |||||
| CACA_KEY_END => 279, | |||||
| CACA_KEY_PAGEUP => 280, | |||||
| CACA_KEY_PAGEDOWN => 281, | |||||
| CACA_KEY_F1 => 282, | |||||
| CACA_KEY_F2 => 283, | |||||
| CACA_KEY_F3 => 284, | |||||
| CACA_KEY_F4 => 285, | |||||
| CACA_KEY_F5 => 286, | |||||
| CACA_KEY_F6 => 287, | |||||
| CACA_KEY_F7 => 288, | |||||
| CACA_KEY_F8 => 289, | |||||
| CACA_KEY_F9 => 290, | |||||
| CACA_KEY_F10 => 291, | |||||
| CACA_KEY_F11 => 292, | |||||
| CACA_KEY_F12 => 293, | |||||
| CACA_KEY_F13 => 294, | |||||
| CACA_KEY_F14 => 295, | |||||
| CACA_KEY_F15 => 296, | |||||
| }; | |||||
| @EXPORT_OK = qw( | |||||
| CACA_COLOR_BLACK | |||||
| CACA_COLOR_BLUE | |||||
| CACA_COLOR_GREEN | |||||
| CACA_COLOR_CYAN | |||||
| CACA_COLOR_RED | |||||
| CACA_COLOR_MAGENTA | |||||
| CACA_COLOR_BROWN | |||||
| CACA_COLOR_LIGHTGRAY | |||||
| CACA_COLOR_DARKGRAY | |||||
| CACA_COLOR_LIGHTBLUE | |||||
| CACA_COLOR_LIGHTGREEN | |||||
| CACA_COLOR_LIGHTCYAN | |||||
| CACA_COLOR_LIGHTRED | |||||
| CACA_COLOR_LIGHTMAGENTA | |||||
| CACA_COLOR_YELLOW | |||||
| CACA_COLOR_WHITE | |||||
| CACA_BACKGROUND | |||||
| CACA_BACKGROUND_BLACK | |||||
| CACA_BACKGROUND_SOLID | |||||
| CACA_BACKGROUND_MIN | |||||
| CACA_BACKGROUND_MAX | |||||
| CACA_ANTIALIASING | |||||
| CACA_ANTIALIASING_NONE | |||||
| CACA_ANTIALIASING_PREFILTER | |||||
| CACA_ANTIALIASING_MIN | |||||
| CACA_ANTIALIASING_MAX | |||||
| CACA_DITHERING | |||||
| CACA_DITHERING_NONE | |||||
| CACA_DITHERING_ORDERED2 | |||||
| CACA_DITHERING_ORDERED4 | |||||
| CACA_DITHERING_ORDERED8 | |||||
| CACA_DITHERING_RANDOM | |||||
| CACA_DITHERING_MIN | |||||
| CACA_DITHERING_MAX | |||||
| CACA_FEATURE_UNKNOWN | |||||
| CACA_EVENT_NONE | |||||
| CACA_EVENT_KEY_PRESS | |||||
| CACA_EVENT_KEY_RELEASE | |||||
| CACA_EVENT_MOUSE_PRESS | |||||
| CACA_EVENT_MOUSE_RELEASE | |||||
| CACA_EVENT_MOUSE_MOTION | |||||
| CACA_EVENT_RESIZE | |||||
| CACA_EVENT_ANY | |||||
| CACA_KEY_UNKNOWN | |||||
| CACA_KEY_BACKSPACE | |||||
| CACA_KEY_TAB | |||||
| CACA_KEY_RETURN | |||||
| CACA_KEY_PAUSE | |||||
| CACA_KEY_ESCAPE | |||||
| CACA_KEY_DELETE | |||||
| CACA_KEY_UP | |||||
| CACA_KEY_DOWN | |||||
| CACA_KEY_LEFT | |||||
| CACA_KEY_RIGHT | |||||
| CACA_KEY_INSERT | |||||
| CACA_KEY_HOME | |||||
| CACA_KEY_END | |||||
| CACA_KEY_PAGEUP | |||||
| CACA_KEY_PAGEDOWN | |||||
| CACA_KEY_F1 | |||||
| CACA_KEY_F2 | |||||
| CACA_KEY_F3 | |||||
| CACA_KEY_F4 | |||||
| CACA_KEY_F5 | |||||
| CACA_KEY_F6 | |||||
| CACA_KEY_F7 | |||||
| CACA_KEY_F8 | |||||
| CACA_KEY_F9 | |||||
| CACA_KEY_F10 | |||||
| CACA_KEY_F11 | |||||
| CACA_KEY_F12 | |||||
| CACA_KEY_F13 | |||||
| CACA_KEY_F14 | |||||
| CACA_KEY_F15 | |||||
| ); | |||||
| %EXPORT_TAGS = ( | |||||
| colors => [ qw( | |||||
| CACA_COLOR_BLACK | |||||
| CACA_COLOR_BLUE | |||||
| CACA_COLOR_GREEN | |||||
| CACA_COLOR_CYAN | |||||
| CACA_COLOR_RED | |||||
| CACA_COLOR_MAGENTA | |||||
| CACA_COLOR_BROWN | |||||
| CACA_COLOR_LIGHTGRAY | |||||
| CACA_COLOR_DARKGRAY | |||||
| CACA_COLOR_LIGHTBLUE | |||||
| CACA_COLOR_LIGHTGREEN | |||||
| CACA_COLOR_LIGHTCYAN | |||||
| CACA_COLOR_LIGHTRED | |||||
| CACA_COLOR_LIGHTMAGENTA | |||||
| CACA_COLOR_YELLOW | |||||
| CACA_COLOR_WHITE | |||||
| ) ], | |||||
| features => [ qw( | |||||
| CACA_BACKGROUND | |||||
| CACA_BACKGROUND_BLACK | |||||
| CACA_BACKGROUND_SOLID | |||||
| CACA_BACKGROUND_MIN | |||||
| CACA_BACKGROUND_MAX | |||||
| CACA_ANTIALIASING | |||||
| CACA_ANTIALIASING_NONE | |||||
| CACA_ANTIALIASING_PREFILTER | |||||
| CACA_ANTIALIASING_MIN | |||||
| CACA_ANTIALIASING_MAX | |||||
| CACA_DITHERING | |||||
| CACA_DITHERING_NONE | |||||
| CACA_DITHERING_ORDERED2 | |||||
| CACA_DITHERING_ORDERED4 | |||||
| CACA_DITHERING_ORDERED8 | |||||
| CACA_DITHERING_RANDOM | |||||
| CACA_DITHERING_MIN | |||||
| CACA_DITHERING_MAX | |||||
| CACA_FEATURE_UNKNOWN | |||||
| ) ], | |||||
| events => [ qw( | |||||
| CACA_EVENT_NONE | |||||
| CACA_EVENT_KEY_PRESS | |||||
| CACA_EVENT_KEY_RELEASE | |||||
| CACA_EVENT_MOUSE_PRESS | |||||
| CACA_EVENT_MOUSE_RELEASE | |||||
| CACA_EVENT_MOUSE_MOTION | |||||
| CACA_EVENT_RESIZE | |||||
| CACA_EVENT_ANY | |||||
| ) ], | |||||
| 'keys' => [ qw( | |||||
| CACA_KEY_UNKNOWN | |||||
| CACA_KEY_BACKSPACE | |||||
| CACA_KEY_TAB | |||||
| CACA_KEY_RETURN | |||||
| CACA_KEY_PAUSE | |||||
| CACA_KEY_ESCAPE | |||||
| CACA_KEY_DELETE | |||||
| CACA_KEY_UP | |||||
| CACA_KEY_DOWN | |||||
| CACA_KEY_LEFT | |||||
| CACA_KEY_RIGHT | |||||
| CACA_KEY_INSERT | |||||
| CACA_KEY_HOME | |||||
| CACA_KEY_END | |||||
| CACA_KEY_PAGEUP | |||||
| CACA_KEY_PAGEDOWN | |||||
| CACA_KEY_F1 | |||||
| CACA_KEY_F2 | |||||
| CACA_KEY_F3 | |||||
| CACA_KEY_F4 | |||||
| CACA_KEY_F5 | |||||
| CACA_KEY_F6 | |||||
| CACA_KEY_F7 | |||||
| CACA_KEY_F8 | |||||
| CACA_KEY_F9 | |||||
| CACA_KEY_F10 | |||||
| CACA_KEY_F11 | |||||
| CACA_KEY_F12 | |||||
| CACA_KEY_F13 | |||||
| CACA_KEY_F14 | |||||
| CACA_KEY_F15 | |||||
| ) ], | |||||
| all => [ ], | |||||
| ); | |||||
| # add all the other ":class" tags to the ":all" class, | |||||
| # deleting duplicates | |||||
| { | |||||
| my %seen; | |||||
| push @{$EXPORT_TAGS{all}}, | |||||
| grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} foreach keys %EXPORT_TAGS; | |||||
| } | |||||
| 1; | |||||
| __END__ | |||||
| =head1 NAME | |||||
| Term::Caca::Constants - libcaca constants from caca.h | |||||
| =head1 SYNOPSIS | |||||
| Import all constants into current package/namespace: | |||||
| use Term::Caca::Constants ':all'; | |||||
| Only import the constants pertaining to events and keys: | |||||
| use Term::Caca qw(:events :keys); | |||||
| =head1 DESCRIPTION | |||||
| =cut | |||||
| # $Id: Constants.pm,v 1.1 2004/10/18 21:00:56 beppu Exp $ | |||||
| @@ -0,0 +1,5 @@ | |||||
| package Term::Caca::Sprite; | |||||
| 1; | |||||
| @@ -0,0 +1,71 @@ | |||||
| package Term::Kaka; | |||||
| use base 'Term::Caca'; | |||||
| 1; | |||||
| __END__ | |||||
| =head1 NAME | |||||
| Term::Kaka - a subclass of Term::Caca with virtually identical behavior | |||||
| =head1 SYNOPSIS | |||||
| Extra thin wrapper for your pleasure | |||||
| package Term::Kaka; | |||||
| use base 'Term::Caca'; | |||||
| 1; | |||||
| =head1 WHY? | |||||
| Somewhere deep in the bowels of gmail.google.com.... | |||||
| Subject: B<libcaca <-- our framebuffer> | |||||
| B<John Beppu> to Pip | |||||
| Pip, | |||||
| Based on the name alone, I think this should be the basis of the | |||||
| framebuffer for ASCIIker. Even if the name weren't so apropos, the | |||||
| library itself looks really good to me in terms of how it's coded and | |||||
| the API that it provides. I think making a set of perl modules around | |||||
| this and making a Term::Caca distribution would be the right thing for | |||||
| me to do. | |||||
| http://sam.zoy.org/projects/libcaca/ | |||||
| B<Pip Stuart> to me | |||||
| My only gripe is ... well the spelling. I believe it should almost | |||||
| always be spelled 'kaka'. Both spellings have been understood && | |||||
| acceptable according to linguists for quite some time but... my | |||||
| highschool friends && I agreed that the K makes it harder && harsher | |||||
| ... && when you're discussing kaka... it should be harsh... it should | |||||
| sound harsh... it should smell harsh. The C is like a lame copout && | |||||
| should only be used by the uninformed or for temperament (which I have | |||||
| never employed when referring to kaka). Maybe it's like eskimos with | |||||
| tons of names for snow. I think of all sorts of stuff ... refuse... | |||||
| somewhat affectionately yet recognizing the crap nature... in order of | |||||
| use: kaka, dung, poop, crap, plop, slop, spit, stuf, shat, stul... | |||||
| shit is reserved for extreme occasion. These are all my 4-letter | |||||
| variable names that have been with me for a long time. This is deeply | |||||
| rooted in me &&... I can't imagine ever accepting the C spelling. | |||||
| It's weird... I could accept alternate spellings of any of the others | |||||
| but I must protest for kaka. I know it's rather difficult to take | |||||
| this complaint seriously since it... well has no technical basis ... | |||||
| but kaka is kaka... it's like KAKA!!! I know that's a lame argument. | |||||
| I'm not prepared to defend it more soundly... maybe the module could | |||||
| be Term::Kaka that wraps libcaca? I know that's probably weird but... | |||||
| what else can I say? It should be libkaka. | |||||
| -Pip | |||||
| =head2 but kaka is kaka... it's like KAKA!!! -Pip | |||||
| ...as opposed to 'caca', and thus, Term::Kaka was born to make Term::Caca | |||||
| be, sound, and smell harsh. | |||||
| =cut | |||||
| # $Id: Kaka.pm,v 1.2 2004/10/22 21:12:01 beppu Exp $ | |||||
| @@ -0,0 +1,5 @@ | |||||
| package Term::Kaka::Bitmap; | |||||
| use base 'Term::Caca::Bitmap'; | |||||
| 1; | |||||
| @@ -0,0 +1,9 @@ | |||||
| package Term::Kaka::Constants; | |||||
| use Term::Caca::Constants qw(:all); | |||||
| push @ISA, 'Term::Caca::Constants'; | |||||
| *Term::Kaka::Constants::EXPORT_OK = *Term::Caca::Constants::EXPORT_OK; | |||||
| *Term::Kaka::Constants::EXPORT_TAGS = *Term::Caca::Constants::EXPORT_TAGS; | |||||
| 1; | |||||
| @@ -0,0 +1,5 @@ | |||||
| package Term::Kaka::Sprite; | |||||
| use base 'Term::Caca::Sprite'; | |||||
| 1; | |||||
| @@ -0,0 +1,26 @@ | |||||
| 12 6 6 3 | |||||
| , | |||||
| ` ,_ , | |||||
| ` _( )_ | |||||
| _( ` )_ | |||||
| ( `-. ' ) | |||||
| `-.____,-' | |||||
| h | |||||
| h gg h | |||||
| h gggggg | |||||
| gggggggggg | |||||
| gggggggggggg | |||||
| gggggggggg | |||||
| 12 6 6 3 | |||||
| . , | |||||
| ` ,_ | |||||
| _( )_ ' | |||||
| _( ` )_ | |||||
| ( `-. ' ) | |||||
| `-.____,-' | |||||
| h h | |||||
| h gg | |||||
| gggggg h | |||||
| gggggggggg | |||||
| gggggggggggg | |||||
| gggggggggg | |||||