# Copyright (c) 1998-2000 by Jonathan Swartz. All rights reserved.
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.

#
# Old-style mc_ commands left in for backwards compatibility. All are now
# implemented in terms of Request methods.
#

package HTML::Mason::Commands;

use strict;

use vars qw($m @ISA @EXPORT_OK @EXPORT);

require Exporter;
@ISA=qw(Exporter);
@EXPORT = qw
    (mc_abort
     mc_auto_comp
     mc_auto_next
     mc_cache
     mc_cache_self
     mc_caller
     mc_call_self
     mc_comp
     mc_comp_exists
     mc_comp_source
     mc_comp_stack
     mc_date 
     mc_dhandler_arg
     mc_file 
     mc_file_root 
     mc_out 
     mc_time
     );

@EXPORT_OK=@EXPORT;

my $no_auto_error = "called when no autohandler invoked";

sub check_request
{
    if (!defined($m)) {
	my ($caller) = ((caller)[3] =~ /[^:]+$/);
	die "$caller called outside of request environment\n";
    }
}

sub mc_abort { check_request; $m->abort(@_) }

sub mc_auto_comp
{
    check_request;
    my $comp = $m->fetch_next or die "mc_auto_comp $no_auto_error";
    my $path = $comp->path;
    
    # return relative path if possible
    my $curdir = $m->current_comp->dir_path;
    $path =~ s{^$curdir/}{};
    return $path;
}

sub mc_auto_next { check_request; $m->call_next(@_) }
sub mc_cache { check_request; $m->cache(@_) }
sub mc_cache_self { check_request; $m->cache_self(@_) }
sub mc_caller { check_request; $m->caller->path }
sub mc_call_self { check_request; $m->call_self(@_) }
sub mc_call_stack { check_request; map($_->title,$m->callers) }
sub mc_comp { check_request; $m->comp(@_) }
sub mc_comp_exists { check_request; $m->comp_exists(@_) }
sub mc_comp_source { check_request; $m->fetch_comp(shift)->source_file }
sub mc_comp_stack { check_request; map($_->title,$m->callers) }
sub mc_dhandler_arg { check_request; $m->dhandler_arg }
sub mc_file { check_request; $m->file(@_) }
sub mc_file_root { check_request; $m->file_root }
sub mc_out { check_request; $m->out(@_) }
sub mc_time { check_request; $m->time(@_) } 

1;

__END__