From a2cf0416541cddf0d37ba22e7c39bd2ff6a34528 Mon Sep 17 00:00:00 2001 From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org> Date: Thu, 27 May 1999 18:40:50 +0200 Subject: [PATCH] print_month added Rev: lib/modules/Calendar.pmod/module.pmod:1.3 --- lib/modules/Calendar.pmod/module.pmod | 89 ++++++++++++++------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/lib/modules/Calendar.pmod/module.pmod b/lib/modules/Calendar.pmod/module.pmod index b87f1b3041..3dcbc46022 100644 --- a/lib/modules/Calendar.pmod/module.pmod +++ b/lib/modules/Calendar.pmod/module.pmod @@ -4,50 +4,6 @@ //! This module implements calendar calculations, and base classes //! for time units. //! -//! example program: -//! <pre> -//! void write_month(object m) -//! { -//! object w; -//! object today; -//! -//! today=function_object(object_program(m))->Day(); -//! -//! write(sprintf(" %|28s\n", -//! Simulate.capitalize(m->name()+" ") -//! +m->year()->name())); -//! -//! w=m->day(1)->week(); -//! -//! write(" "); -//! foreach (Array.map(w->days(),w->day)->week_day_name(),string n) -//! write(sprintf("%3s ",n[0..2])); -//! write("\n"); -//! -//! do -//! { -//! array a; -//! object d; -//! a=Array.map(Array.map(w->days(),w->day), -//! lambda(object d,object m) -//! { if (d->month()!=m) return 0; else return d; },m); -//! -//! write(sprintf("%3s ",w->name())); -//! foreach (a,d) -//! if (d) -//! if (d!=today) write(sprintf(" %2d ",d->month_day())); -//! else write(sprintf(">%2d<",d->month_day())); -//! else write(" "); -//! -//! write("\n"); -//! w++; -//! } -//! while (w->day(0)->month()==m); -//! } -//! </pre> -//! call with, for example, -//! <tt>write_month(Calendar.Swedish.Month());</tt>. -//! //! class time_unit //! //! method array(string) lesser() @@ -232,3 +188,48 @@ string datetime_short_name(int|void unix_time) t->year, t->month, t->day, t->hour, t->minute, t->second); } + +string print_month(void|object month,void|mapping options) +{ + object w; + object today; + string res=""; + + if (!month) // resolv thing here is to avoid compile-time resolve + month=master()->resolv("Calendar")["Gregorian"]["Month"](); + + today=function_object(object_program(month))->Day(); + + res=sprintf(" %|28s\n", + String.capitalize(month->name()+" ") + +month->year()->name()); + + w=month->day(1)->week(); + + res+=" "; + foreach (Array.map(w->days(),w->day)->week_day_name(),string n) + res+=sprintf("%3s ",n[0..2]); + res+="\n"; + + do + { + array a; + object d; + a=Array.map(Array.map(w->days(),w->day), + lambda(object d) + { if (d->month()!=month) return 0; else return d; }); + + res+=sprintf("%3s ",w->name()); + foreach (a,d) + if (d) + if (d!=today) res+=sprintf(" %2d ",d->month_day()); + else res+=sprintf(">%2d<",d->month_day()); + else res+=" "; + + res+="\n"; + w++; + } + while (w->day(0)->month()==month); + + return res; +} -- GitLab