@@ -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 |