X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Ftime%2Fcalendar.m;fp=octave_packages%2Fm%2Ftime%2Fcalendar.m;h=a78451e60e3b905aa87217e78f90872c0406c9f5;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/time/calendar.m b/octave_packages/m/time/calendar.m new file mode 100644 index 0000000..a78451e --- /dev/null +++ b/octave_packages/m/time/calendar.m @@ -0,0 +1,104 @@ +## Copyright (C) 2004-2012 Paul Kienzle +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{c} =} calendar () +## @deftypefnx {Function File} {@var{c} =} calendar (@var{d}) +## @deftypefnx {Function File} {@var{c} =} calendar (@var{y}, @var{m}) +## @deftypefnx {Function File} {} calendar (@dots{}) +## Return the current monthly calendar in a 6x7 matrix. +## +## If @var{d} is specified, return the calendar for the month containing +## the date @var{d}, which must be a serial date number or a date string. +## +## If @var{y} and @var{m} are specified, return the calendar for year @var{y} +## and month @var{m}. +## +## If no output arguments are specified, print the calendar on the screen +## instead of returning a matrix. +## @seealso{datenum, datestr} +## @end deftypefn + +## Author: pkienzle +## Created: 25 July 2004 +## Adapted-By: William Poetra Yoga Hadisoeseno + +function varargout = calendar (varargin) + + switch (nargin) + case 0 + v = clock (); + y = v(1); + m = v(2); + d = v(3); + case 1 + v = datevec (varargin{1}); + y = v(1); + m = v(2); + d = v(3); + case 2 + y = varargin{1}; + m = varargin{2}; + d = []; + otherwise + print_usage (); + endswitch + + c = zeros (7, 6); + dayone = datenum (y, m, 1); + ndays = eomday (y, m); + c(weekday (dayone) - 1 + [1:ndays]) = 1:ndays; + + if (nargout > 0) + varargout{1} = c'; + else + ## Layout the calendar days, 6 columns per day, 7 days per row. + str = sprintf (" %2d %2d %2d %2d %2d %2d %2d\n", c); + + ## Print an asterisk before the specified date + if (! isempty (d)) + pos = weekday (dayone) + d - 1; + idx = 6*pos + fix (pos / 7.1) - ifelse (d < 10, 1, 2); + str(idx) = "*"; + endif + + ## Display the calendar. + s.year = y - 1900; + s.mon = m - 1; + puts (strftime (" %b %Y\n", s)); + puts (" S M Tu W Th F S\n"); + puts (str); + endif + +endfunction + + +## demos +%!demo +%! ## Calendar for current month +%! calendar () +%!demo +%! calendar (1957, 10) + +## tests +%!assert ((calendar(2000,2))'(2:31), [0:29]) +%!assert ((calendar(1957,10))'(2:33), [0:31]) + +%% Test input validation +%!error calendar (1,2,3) +