{ カレンダーを表示します。 実行時のコマンドライン引数で何年何月のカレンダーを出力するかを指定します。 指定しなければ今月のカレンダーを表示します。 } const title: []char :: "Calendar" var font: draw@Font var year: int var month: int var h: int var d: int func main() do lib@intToDate(lib@now(), &@year, &@month, &, &, &, &) if(^lib@cmdLine() > 0) do @year :: lib@cmdLine()[0].toInt(&) if(^lib@cmdLine() > 1) do @month :: lib@cmdLine()[1].toInt(&) end if end if assert @year >= 1582 assert 1 <= @month & @month <= 12 var m: int :: (@month + 9) % 12 + 3 var y: int :: @year - (m > 12 ?(1, 0)) do @h :: (y + y / 4 - y / 100 + y / 400 + (13 * (m + 1)) / 5) % 7 do y :+ 1 do @d :: 28 + [3, 3, (y % 400 = 0 | y % 100 <> 0 & y % 4 = 0) ?(1, 0), 3, 2, 3, 2, 3, 3, 2, 3, 2][m % 12] const wndSizeW: int :: 360 const wndSizeH: int :: 240 var wndMain: wnd@Wnd :: wnd@makeWnd(null, %aspect, wndSizeW, wndSizeH, @title) var drawMain: wnd@Draw :: wnd@makeDraw(wndMain, 0, 0, wndSizeW, wndSizeH, %scale, %scale, false) do @font :: draw@makeFont("Meiryo", 20, false, false, false, 20.0) do drawMain.onPaint :: onPaint func onPaint(wnd: wnd@WndBase, width: int, height: int) do @font.draw(10.0, 5.0, "\{@year}/\{@month.toStrFmt("02d")}", 0xFFFFFFFF) for i(@h, @d + @h - 1) do @font.draw(10.0 + 50.0 * (i % 7) $ float, 40.0 * (i / 7 + 1) $ float, (i - @h + 1).toStrFmt("2d"), 0xFFFFFFFF) end for do draw@render(0) end func while(wnd@act()) end while end func