Calendar: Difference between revisions
Content deleted Content added
→{{header|D}}: simplified print code |
|||
Line 247: | Line 247: | ||
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 |
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 |
||
30</pre> |
30</pre> |
||
=={{header|Icon}} and {{header|Unicon}}== |
|||
The procedures ''printCalendar'' handles formatting of large components and uses co-expressions to keep the formatting of week elements in each column synchronized. The procedure ''CalendarFormatWeek'' is a generator that returns heading elements, alignment spacing, and individual days. |
|||
<lang Icon>procedure main(A) |
|||
printCalendar(\A[1]|1969) |
|||
end |
|||
procedure printCalendar(year) #: Print a 3 column x 80 char calendar |
|||
cols := 3 # fixed width |
|||
mons := [] # table of months |
|||
"January February March April May June " || |
|||
"July August September October November December " ? |
|||
while put(mons, tab(find(" "))) do move(1) |
|||
write(center("[Snoopy Picture]",cols * 24 + 4)) # mandatory .. |
|||
write(center(year,cols * 24 + 4), "\n") # ... headers |
|||
M := list(cols) # coexpr container |
|||
every mon := 0 to 9 by cols do { # go through months by cols |
|||
writes(" ") |
|||
every i := 1 to cols do { |
|||
writes(center(mons[mon+i],24)) # header months |
|||
M[i] := create CalendarFormatWeek(1969,mon + i) # formatting coexpr |
|||
} |
|||
write() |
|||
every 1 to 7 do { # 1 to max rows |
|||
every c := 1 to cols do { # for each column |
|||
writes(" ") |
|||
every 1 to 7 do writes(right(@M[c],3)) # each row day element |
|||
} |
|||
write() |
|||
} |
|||
} |
|||
end |
|||
link datetime |
|||
procedure CalendarFormatWeek(year,m) #: Format Week for Calendar |
|||
static D |
|||
initial D := [31,28,31,30,31,30,31,31,30,31,30,31] |
|||
every suspend "Su"|"Mo"|"Tu"|"We"|"Th"|"Fr"|"Sa" # header |
|||
every 1 to (d := (julian(m,1,year)+1)%7) do suspend "" # lead day alignment |
|||
every suspend 1 to D[m] do d +:= 1 # days |
|||
if m = 2 & IsLeapYear(year) then suspend (d +:= 1, 29) # LY adjustment |
|||
every d to (6*7) do suspend "" # trailer alignment |
|||
end</lang> |
|||
{{libheader|Icon Programming Library}} |
|||
[http://www.cs.arizona.edu/icon/library/src/procs/datetime.icn datetime.icn provides julian and IsLeapYear] |
|||
Output:<pre> [Snoopy Picture] |
|||
1969 |
|||
January February March |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 1 1 |
|||
5 6 7 8 9 10 11 2 3 4 5 6 7 8 2 3 4 5 6 7 8 |
|||
12 13 14 15 16 17 18 9 10 11 12 13 14 15 9 10 11 12 13 14 15 |
|||
19 20 21 22 23 24 25 16 17 18 19 20 21 22 16 17 18 19 20 21 22 |
|||
26 27 28 29 30 31 23 24 25 26 27 28 23 24 25 26 27 28 29 |
|||
30 31 |
|||
April May June |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 5 1 2 3 1 2 3 4 5 6 7 |
|||
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14 |
|||
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21 |
|||
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28 |
|||
27 28 29 30 25 26 27 28 29 30 31 29 30 |
|||
July August September |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 5 1 2 1 2 3 4 5 6 |
|||
6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13 |
|||
13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20 |
|||
20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27 |
|||
27 28 29 30 31 24 25 26 27 28 29 30 28 29 30 |
|||
31 |
|||
October November December |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 1 1 2 3 4 5 6 |
|||
5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13 |
|||
12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20 |
|||
19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27 |
|||
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 |
|||
30</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |