File: Shell.pm

package info (click to toggle)
sdlperl 1.20.3dfsg-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,796 kB
  • ctags: 2,171
  • sloc: perl: 7,394; ansic: 232; makefile: 75; sh: 1
file content (66 lines) | stat: -rw-r--r-- 1,330 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package SDL::Shell;

use IO::File;
use SDL::Console;
@ISA = qw/ SDL::Console /;

my %cmds = (
	'sub' => sub { my ($self,$params) = @_; 
		my ($routine,$body) = ($params =~ /(\w+)\s+{(.*)}/);
		print "Defining $routine as { $body }\n";
		my $tmpsub;
		eval "sub $routine { $body }";
		eval "\$tmpsub = sub { $body }"; 
		$@ ? $self->print("Error $@") : $self->print("OK");
		SDL::Console::AddCommand($routine,$tmpsub);
	},
	':' => sub { my ($self, $params) = @_; 
		$params =~ s/;$//g;
		eval "\$self->print($params)";
		$@ ? $self->print("Error $@"):  $self->print("OK");
	},
	'!' => sub { my ($self,$params) = @_; $self->print(`$params`); },
	'?' => sub { my ($self,$params) = @_; $self->print(`perldoc $params`); },
	':q' => sub { exit(0); },
);


for (keys %cmds ) {
	SDL::Console::AddCommand($_,$cmds{$_});
}

sub new {
	my ($class,%options) = @_;
	my $self = new SDL::Console %options;
	bless $self, ref($class) || $class;	$self;
}

sub process {
	my ($self,$event) = @_;
	SDL::Console::Event($event);	
}

1;

__END__;

=pod

=head1 NAME

SDL::Shell - a perl extension

=head1 DESCRIPTION

L<SDL::Shell> is a module for creating a simple interactive programming L<SDL::Console>.
This module is very incomplete and buggy.  Use at your own risk.

=head1 AUTHOR

David J. Goehrig

=head1 SEE ALSO

L<perl> L<SDL::Console>

=cut