Rc - parser and backends for 'rc' shell


Rc documentation Contained in the Rc distribution.

Index


Code Index:

NAME

Top

Rc - parser and backends for 'rc' shell

SYNOPSIS

Top

If you need a synposis, you should start with an easier project.

DESCRIPTION

Top

The design of this module is similar to the design of B, the perl compiler backend.

WHY RC?

Top

'rc' has a cleaner syntax in comparison to sh or csh. If your going to go through the unpleasantness of learning to program in a shell, it might as well be 'rc'.

SUPPORT

Top

Send any questions or comments to envy@listbox.com!

If you'd like to subscribe to this mailing list send email to majordomo@listbox.com. Thanks!

AUTHOR

Top

Copyright © 1998 Joshua Nathaniel Pritikin. All rights reserved.

This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html)

Portions of this sortware include source code from the 'rc' shell. These portions are Copyright © 1991 Byron Rakitzis. 'rc' is free, open-source package and is available at most ftp sites that distribute GNU software.


Rc documentation Contained in the Rc distribution.

use strict;
package Rc;
use IO::Handle;
use base ('Exporter','DynaLoader');
use vars qw($VERSION @EXPORT_OK $OutputFH);
$VERSION = '0.03';
@EXPORT_OK = qw(walk set_output
	       $OutputFH);
$OutputFH = \*STDOUT;

__PACKAGE__->bootstrap($VERSION);

sub walk {
    local $SIG{__WARN__} = sub {
	if ($_[0] =~ m/^Deep recursion/) {
	    #ignore
	} else {
	    warn $_[0]
	}
    };
    &_walk;
}

sub set_output {
    $OutputFH = shift;
}

no strict 'refs';
for(qw(Undef WordX Cmd RedirX Pipe)) {
    my $c = 'Rc::'.$_.'::ISA';
    @{"$c"} = 'Rc::Node';
}

for (qw(UnaryCmd BinCmd Forin)) {
    my $c = 'Rc::'.$_.'::ISA';
    @{"$c"} = 'Rc::Cmd';
}

# WordX
@Rc::Word::ISA = 'Rc::WordX';
@Rc::Qword::ISA = 'Rc::WordX';

# Cmd <= UnaryCmd
for (qw(Bang Nowait Count Flat Rmfn Subshell Var Case)) {
    my $c = 'Rc::'.$_.'::ISA';
    @{"$c"} = 'Rc::UnaryCmd';
}

# Cmd <= BinCmd
for (qw(Andalso Assign Backq Body Brace Concat Else Epilog
	If Newfn Cbody Orelse Pre Args Switch Match Varsub While Lappend)) {
    my $c = 'Rc::'.$_.'::ISA';
    @{"$c"} = 'Rc::BinCmd';
}

# Node <= RedirX
for (qw(Dup Redir Nmpipe)) {
    my $c = 'Rc::'.$_.'::ISA';
    @{"$c"} = 'Rc::RedirX';
}

package Rc::Undef;
sub type { 'undef' }

package Rc::Nmpipe;

*fd = \&Rc::Redir::fd;
*to = \&Rc::Redir::to;

1;
__END__