57 lines
1.5 KiB
Text
57 lines
1.5 KiB
Text
----------------------------------------
|
|
-- @desc Class "Calendar"
|
|
-- @file parent script "Calendar"
|
|
----------------------------------------
|
|
property _months
|
|
property _weekdayStr
|
|
property _refDateObj
|
|
property _year
|
|
property _calStr
|
|
|
|
on new (me)
|
|
me._months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
|
|
me._weekdayStr = "Mo Tu We Th Fr Sa Su"
|
|
me._refDateObj = date(1905,1,2)
|
|
return me
|
|
end
|
|
|
|
on make (me, year)
|
|
me._year = year
|
|
me._calStr = ""
|
|
-- prefill cal string with spaces
|
|
emptyLine = bytearray(68,32).readRawString(68)&RETURN
|
|
repeat with i = 1 to 38
|
|
put emptyLine after _calStr
|
|
end repeat
|
|
me._write (string(year), 32, 1)
|
|
repeat with i = 1 to 12
|
|
me._writeMonth(i)
|
|
end repeat
|
|
return me._calStr
|
|
end
|
|
|
|
on _writeMonth (me, monthNum)
|
|
xOffset = (monthNum-1) mod 3 * 24
|
|
yOffset = (monthNum-1)/3 * 9 + 2
|
|
pre = (20 - me._months[monthNum].length)/2
|
|
me._write(me._months[monthNum], 1+xOffset+pre, 1+yOffset)
|
|
me._write(me._weekdayStr, 1+xOffset, 2+yOffset)
|
|
y = 3
|
|
x = ((date(me._year, monthNum, 1) - me._refDateObj) mod 7)+1
|
|
repeat with i = 1 to 31
|
|
if date(me._year, monthNum, i).month<>monthNum then exit repeat
|
|
dayStr = string(i)
|
|
if i<10 then put " " before dayStr
|
|
me._write(dayStr, x*3-2+xOffset, y+yOffset)
|
|
if x=7 then
|
|
y = y+1
|
|
x = 1
|
|
else
|
|
x = x+1
|
|
end if
|
|
end repeat
|
|
end
|
|
|
|
on _write (me, str, x, y)
|
|
put str into char x to x+str.length-1 of line y of _calStr
|
|
end
|