home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / tutorial / eg / ncal < prev    next >
Encoding:
Text File  |  1990-03-16  |  989 b   |  58 lines

  1. #!/usr/bin/perl
  2.  
  3. $[ = 1;
  4.  
  5. $CALPATH = '/usr/bin/cal';
  6.  
  7. ($program = $0) =~ s%.*/%%;
  8.  
  9. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  10.  
  11. @months = ( "january ", "february", "march", "april", "may", "june", 
  12.         "july", "august", "september", "october", "november",
  13.         "december" );
  14.  
  15. $mon++;
  16. $year += 1900;
  17.  
  18. if ($#ARGV == 0) {
  19.     do cal($mon, $year);
  20.  
  21. if ($#ARGV > 2) {
  22.     print stderr "usage: $program [month] year\n";
  23.     exit 1;
  24.  
  25. if ($#ARGV == 2) {
  26.     $year = $ARGV[2];
  27.  
  28. if ($ARGV[1] =~ /^\d+$/) {
  29.     if ($ARGV[1] > 12) {
  30.     die "month too big" if $#ARGV == 2;
  31.     do cal($ARGV[1]);
  32.     } else {
  33.     do cal($ARGV[1], $year);
  34.     } 
  35. } else {
  36.     do cal(&getmonth($ARGV[1]), $year);
  37.  
  38.  
  39. sub cal { 
  40.     die "year too big"  if $_[2] > 9999;
  41.     exec $CALPATH, @_;
  42.     die "can't exec $CALPATH: $!";
  43. }
  44.  
  45. sub getmonth {
  46.     local($mon) = @_;
  47.  
  48.     for ($i = 1; $i <= 12; $i++) {
  49.     return $i if $months[$i] =~ /^$mon/oi;
  50.     } 
  51.  
  52.     die "$mon is not a month name";
  53.