an annual calendar somewhere?
Richard Gaskin
ambassador at fourthworld.com
Fri Feb 26 09:21:50 EST 2010
FWIW, here's a a function I pulled out of my archives which is a sort of
variant of Cal in native RevTalk, making a single month from a date
passed to it. I'll leave it as an exercise to the user to make a year
out of it if needed.
One of the nice things about RevTalk is that the weekDayNames and
monthNames functions return values in the current system's local
language, so this is localized without having to do anything.
Interestingly, without the overhead involved in going to shell it's
about 20 times faster on my machine than calling shell("cal").
function Cal pDate
-- Returns a plain-text calendar representation of
-- the month the date specified in pDate is in.
-- If no month is provided it uses the current
-- month. Month and day names use the user's current
-- system settings.
--
-- Use current date as default:
if pDate is empty then put the date into pDate
-- Verify date is valid:
convert pDate to dateitems
if the result is not empty then return "Error: "& the result
--
put empty into tCal
--
-- Make month/year header:
put item 1 of pDate into tYear
put line (item 2 of pDate) of the monthNames into tMonth
put tMonth && tYear into tHeader
-- Center it:
repeat for ( (20 - len(tHeader)) div 2)
put " " after tCal
end repeat
put tHeader &cr after tCal
--
-- Make day names header:
put the abbr weekdayNames into tWeekdayNames
repeat for each line tDay in tWeekdayNames
put char 1 to 2 of tDay &" " after tCal
end repeat
put cr after tCal
--
-- Pad beginning with empty days:
put tMonth && "1"&& tYear into tStartDay
convert tStartDay to dateitems
repeat for (last item of tStartDay - 1)
put " " after tCal
end repeat
--
-- Walk through 31 days, stopping when we reach a
-- number not valid for the month we're doing:
repeat with i = 1 to 31
-- Get day number:
put tMonth &&i&& tYear into tDate
convert tDate to dateitems
if the result is not empty then exit repeat
put item 3 of tDate into tDayNum
--
-- Pad it and add it:
if len(i) = 1 then put " " before i
put i &" " after tCal
--
-- Go to next line if we're at the end of the week:
if last item of tDate = 7 then put cr after tCal
end repeat
--
-- Pad empty lines at end for uniform appearance
-- when using multiple calendars in a field:
repeat for (8-the number of lines of tCal)
put cr after tCal
end repeat
--
-- Send it to the caller:
return tCal
end Cal
--
Richard Gaskin
Fourth World
Rev training and consulting: http://www.fourthworld.com
Webzine for Rev developers: http://www.revjournal.com
revJournal blog: http://revjournal.com/blog.irv
More information about the use-livecode
mailing list