UNIX::Cal - Perl wrapper for the original cal UNIX command line tool


UNIX-Cal documentation Contained in the UNIX-Cal distribution.

Index


Code Index:

NAME

Top

UNIX::Cal - Perl wrapper for the original cal UNIX command line tool

SYNOPSIS

Top

  use Data::Dumper;
  use UNIX::Cal;
  use UNIX::Cal qw(monday julian year);

  print Dumper(cal());

DESCRIPTION

Top

UNIX::Cal is an implementation of good ol' UNIX command line cal.

It is really paying homage to the original code from The Regents of the University of California and Berkeley by Kim Letkeman.

As with UNIX cal, you can specify the switches to change the behaviour

use UNIX::Cal qw(monday); give the -m switch effect.

  -m  = monday  - set monday as the first day of the week
  -j  = julian  - generate the days in julian format
  -y  = year    - automatically create a years calendar

There is only one method - cal(). This method is pushed into the calling packages namespace, so it doesn't need to be fully qualified. cal() is called in three forms:

 cal();   - no arguments gives the current month unless -y was specified.
 cal(5, 2002); - returns the calendar for May, 2002.
 cal(2002); - returns the calendar ( each month ) for 2002.




The result of the cal() method is an array ref.

For a single months results: $VAR1 = [ [ 'May', 2002 ], [ 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa' ], [ '', '', '', 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, '' ] ];

The results for a year are like so: $VAR1 = [ [ 2002 ], [ [ 'January', 2002 ], [ 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa' ], [ '', '', 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, '', '' ] ], [ [ 'February', 2002 ], [ 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa' ], [ '', '', '', '', '', 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, '', '' ] ], ...................

VERSION

Top

very new

AUTHOR

Top

Piers Harding

SEE ALSO

Top

man cal


UNIX-Cal documentation Contained in the UNIX-Cal distribution.

package UNIX::Cal;
use strict;

# Ensure that the build directory exists
BEGIN { `mkdir /tmp/_Inline` if ! -d '/tmp/_Inline' }

use vars qw($VERSION);
$VERSION = '0.01';

use Cwd qw(abs_path); 

# Config for Inline::MakeMaker
use Inline C=> 'DATA',
                NAME => 'UNIX::Cal',
		MYEXTLIB => abs_path((-d "./mylib" ? "./mylib" :"."))."/libcal.a",
                VERSION => '0.01';

my $mflag = 0;
my $jflag = 0;
my $yflag = 0;

my $onload;

my @export_ok = ("cal");


sub import {

  my %parms = ();

  map { $parms{$_} = 1 } @_;

  $mflag = 1 if exists $parms{'monday'};
  $jflag = 1 if exists $parms{'julian'};
  $yflag = 1 if exists $parms{'year'};


  my ( $caller ) = caller;

  no strict 'refs';
  foreach my $sub ( @export_ok ){
    *{"${caller}::${sub}"} = \&{$sub};
  }

}

# Create a component profile
#  passing in all the connection information
# and the name of the callback routine for handling the packet
sub cal {

  my ($month, $year);
  die "usage: cal(month, year) or cal(year) \n" if scalar @_ > 2;
  if ( scalar @_ == 2 ){
    ($month, $year) = @_;
  } else {
    ($year, $month) = (@_, 0, 0);
  }

  on_load( $mflag, $jflag, $yflag ) unless $onload++;
  return do_cal( $month, $year );

}

1;

__DATA__

__C__

SV* on_load(SV* month, SV* julian, SV* year){

    return newSViv(onLoad(SvIV(month), 
                          SvIV(julian),
			  SvIV(year))); 

}

SV* do_cal(SV* month, SV* year){

    return doCal(SvIV(month), SvIV(year));

}