package HTML::CalendarMonth::DateTool::Cal;
{
  $HTML::CalendarMonth::DateTool::Cal::VERSION = '1.26';
}

# Interface to unix 'cal' command

use strict;
use warnings;
use Carp;

use base qw( HTML::CalendarMonth::DateTool );

sub dow1st_and_lastday {
  my($self, $month, $year) = @_;
  $month ||= $self->month;
  $year  ||= $self->year;
  my $cmd = $self->_cal_cmd or croak "cal command not found\n";

  my @cal = grep(!/^\s*$/,`$cmd $month $year`);
  chomp @cal;
  my @days     = grep(/\d+/,split(/\s+/,$cal[2]));
  my $dow1st   = 6 - $#days;
  my($lastday) = $cal[$#cal] =~ /(\d+)\s*$/;
  # With dow1st and lastday, one builds a calendar sequentially.
  # Historically, in particular Sep 1752, days have been skipped. Here's
  # the chance to catch that.
  $self->_skips(undef);
  if ($month == 9 && $year == 1752) {
    my %skips;
    grep(++$skips{$_}, 3 .. 13);
    $self->_skips(\%skips);
  }
  ($dow1st, $lastday);
}

1;