37 lines
1.3 KiB
Plaintext
37 lines
1.3 KiB
Plaintext
Param([int]$Year = 1969)
|
||
Begin {
|
||
$COL_WIDTH = 21
|
||
$COLS = 3
|
||
$MONTH_COUNT = 12
|
||
$MONTH_LINES = 9
|
||
|
||
Function CenterStr([string]$s, [int]$lineSize) {
|
||
$padSize = [int](($lineSize - $s.Length) / 2)
|
||
($(if ($padSize -gt 0) { ' ' * $padSize } else { '' }) + $s).PadRight($lineSize,' ')
|
||
}
|
||
|
||
Function MonthLines([int]$month) {
|
||
$dt = [System.DateTime]::new($Year, $month, 1)
|
||
$line = CenterStr $dt.ToString("MMMM") $COL_WIDTH
|
||
$line += 'Su Mo Tu We Th Fr Sa'
|
||
$line += $(' ' * $dt.DayOfWeek.value__)
|
||
$line += (-join ($(1..$($dt.AddMonths(1).AddDays(-1).Day)) | %{ $("" + $_).PadLeft(3) }))
|
||
$line = $line.PadRight($MONTH_LINES * $COL_WIDTH)
|
||
New-Object –TypeName PSObject –Prop(@{
|
||
'Lines'=(0..($MONTH_LINES - 1)) | %{ $_ * $COL_WIDTH } | %{ -join $line[$_..($_ + $COL_WIDTH - 1)] }
|
||
'Dt'=$dt})
|
||
}
|
||
}
|
||
Process {
|
||
Write-Output (CenterStr $Year ($COL_WIDTH * $COLS + 4))
|
||
$(0..($MONTH_COUNT / $COLS - 1)) | %{
|
||
$fm = $_ * $COLS
|
||
$monthNums = $fm..($fm + $COLS - 1) | %{ $_ + 1 }
|
||
$months = $monthNums | %{ MonthLines $_ }
|
||
$(0..($MONTH_LINES - 1)) | %{
|
||
$ml = $_
|
||
Write-Output $(-join ($(0..($COLS - 1)) | %{ $(if ($_ -eq 0) { '' } else {' '}) + $months[$_].Lines[$ml] }))
|
||
}
|
||
}
|
||
}
|