2016 Update

This commit is contained in:
Tina Müller 2016-12-05 22:15:40 +01:00
parent 948b86eafa
commit dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions

View file

@ -0,0 +1,180 @@
* calendar 08/06/2016
CALENDAR CSECT
USING CALENDAR,R13 base register
B 72(R15) skip savearea
DC 17F'0' savearea
STM R14,R12,12(R13) prolog
ST R13,4(R15) "
ST R15,8(R13) "
LR R13,R15 "
L R4,YEAR year
SRDA R4,32 .
D R4,=F'4' year//4
LTR R4,R4 if year//4=0
BNZ LYNOT
L R4,YEAR year
SRDA R4,32 .
D R4,=F'100' year//100
LTR R4,R4 if year//100=0
BNZ LY
L R4,YEAR year
SRDA R4,32 .
D R4,=F'400' if year//400
LTR R4,R4 if year//400=0
BNZ LYNOT
LY MVC ML+2,=H'29' ml(2)=29 leapyear
LYNOT SR R10,R10 ltd1=0
LA R6,1 i=1
LOOPI1 C R6,=F'31' do i=1 to 31
BH ELOOPI1
XDECO R6,XDEC edit i
LA R14,TD1 td1
AR R14,R10 td1+ltd1
MVC 0(3,R14),XDEC+9 sub(td1,ltd1+1,3)=pic(i,3)
LA R10,3(R10) ltd1+3
LA R6,1(R6) i=i+1
B LOOPI1
ELOOPI1 LA R6,1 i=1
LOOPI2 C R6,=F'12' do i=1 to 12
BH ELOOPI2
ST R6,M m=i
MVC D,=F'1' d=1
MVC YY,YEAR yy=year
L R4,M m
C R4,=F'3' if m<3
BNL GE3
L R2,M m
LA R2,12(R2) m+12
ST R2,M m=m+12
L R2,YY yy
BCTR R2,0 yy-1
ST R2,YY yy=yy-1
GE3 L R2,YY yy
LR R1,R2 yy
SRA R1,2 yy/4
AR R2,R1 yy+(yy/4)
L R4,YY yy
SRDA R4,32 .
D R4,=F'100' yy/100
SR R2,R5 yy+(yy/4)-(yy/100)
L R4,YY yy
SRDA R4,32 .
D R4,=F'400' yy/400
AR R2,R5 yy+(yy/4)-(yy/100)+(yy/400)
A R2,D r2=yy+(yy/4)-(yy/100)+(yy/400)+d
LA R5,153 153
M R4,M 153*m
LA R5,8(R5) 153*m+8
D R4,=F'5' (153*m+8)/5
AR R5,R2 ((153*m+8)/5+r2
LA R4,0 .
D R4,=F'7' r4=mod(r5,7) 0=sun 1=mon ... 6=sat
LTR R4,R4 if j=0
BNZ JNE0
LA R4,7 j=7
JNE0 BCTR R4,0 j-1
MH R4,=H'3' j*3
LR R10,R4 j1=j*3
LR R1,R6 i
SLA R1,1 *2
LH R11,ML-2(R1) ml(i)
MH R11,=H'3' j2=ml(i)*3
MVC TD2,BLANK td2=' '
LA R4,TD1 @td1
LR R5,R11 j2
LA R2,TD2 @td2
AR R2,R10 @td2+j1
LR R3,R5 j2
MVCL R2,R4 sub(td2,j1+1,j2)=sub(td1,1,j2)
LR R1,R6 i
MH R1,=H'144' *144
LA R14,DA-144(R1) @da(i)
MVC 0(144,R14),TD2 da(i)=td2
LA R6,1(R6) i=i+1
B LOOPI2
ELOOPI2 L R1,YEAR year
XDECO R1,PG+23 edit year
XPRNT PG,35 print year
MVC WDLINE,BLANK wdline=' '
LA R10,1 lwdline=1
LA R8,1 k=1
LOOPK3 C R8,=F'3' do k=1 to 3
BH ELOOPK3
LA R4,WDLINE @wdline
AR R4,R10 +lwdline
MVC 0(20,R4),WDNA sub(wdline,lwdline+1,20)=wdna
LA R10,20(R10) lwdline=lwdline+20
C R8,=F'3' if k<3
BNL ITERK3
LA R10,2(R10) lwdline=lwdline+2
ITERK3 LA R8,1(R8) k=k+1
B LOOPK3
ELOOPK3 LA R6,1 i=1
LOOPI4 C R6,=F'12' do i=1 to 12 by 3
BH ELOOPI4
MVC MOLINE,BLANK moline=' '
LA R10,6 lmoline=6
LR R8,R6 k=i
LOOPK4 LA R2,2(R6) i+2
CR R8,R2 do k=i to i+2
BH ELOOPK4
LR R1,R8 k
MH R1,=H'10' *10
LA R3,MO-10(R1) mo(k)
LA R4,MOLINE @moline
AR R4,R10 +lmoline
MVC 0(10,R4),0(R3) sub(moline,lmoline+1,10)=mo(k)
LA R10,22(R10) lmoline=lmoline+22
LA R8,1(R8) k=k+1
B LOOPK4
ELOOPK4 XPRNT MOLINE,L'MOLINE print months
XPRNT WDLINE,L'WDLINE print days of week
LA R7,1 j=1
LOOPJ4 C R7,=F'106' do j=1 to 106 by 21
BH ELOOPJ4
MVC PG,BLANK clear buffer
LA R9,PG pgi=0
LR R8,R6 k=i
LOOPK5 LA R2,2(R6) i+2
CR R8,R2 do k=i to i+2
BH ELOOPK5
LR R1,R8 k
MH R1,=H'144' *144
LA R4,DA-144(R1) da(k)
BCTR R4,0 -1
AR R4,R7 +j
MVC 0(21,R9),0(R4) substr(da(k),j,21)
LA R9,22(R9) pgi=pgi+22
LA R8,1(R8) k=k+1
B LOOPK5
ELOOPK5 XPRNT PG,L'PG print buffer
LA R7,21(R7) j=j+21
B LOOPJ4
ELOOPJ4 LA R6,3(R6) i=i+3
B LOOPI4
ELOOPI4 L R13,4(0,R13) epilog
LM R14,R12,12(R13) "
XR R15,R15 "
BR R14 exit
LTORG
YEAR DC F'1969' <==
MO DC CL10' January ',CL10' February ',CL10' March '
DC CL10' April ',CL10' May ',CL10' June '
DC CL10' July ',CL10' August ',CL10'September '
DC CL10' October ',CL10' November ',CL10' December '
ML DC H'31',H'28',H'31',H'30',H'31',H'30'
DC H'31',H'31',H'30',H'31',H'30',H'31'
WDNA DC CL20'Mo Tu We Th Fr Sa Su'
M DS F
D DS F
YY DS F
TD1 DS CL93
TD2 DS CL144
MOLINE DS CL66
WDLINE DS CL66
PG DC CL66' '
XDEC DS CL12
BLANK DC CL144' '
DA DS 12CL144
YREG
END CALENDAR

View file

@ -0,0 +1,71 @@
let getCalendar year =
let day_of_week month year =
let t = [|0; 3; 2; 5; 0; 3; 5; 1; 4; 6; 2; 4|]
let y = if month < 3 then year - 1 else year
let m = month
let d = 1
(y + y / 4 - y / 100 + y / 400 + t.[m - 1] + d) % 7
//0 = Sunday, 1 = Monday, ...
let last_day_of_month month year =
match month with
| 2 -> if (0 = year % 4 && (0 = year % 400 || 0 <> year % 100)) then 29 else 28
| 4 | 6 | 9 | 11 -> 30
| _ -> 31
let get_month_calendar year month =
let min (x: int, y: int) = if x < y then x else y
let ld = last_day_of_month month year
let dw = 7 - (day_of_week month year)
[|[|1..dw|];
[|dw + 1..dw + 7|];
[|dw + 8..dw + 14|];
[|dw + 15..dw + 21|];
[|dw + 22..min(ld, dw + 28)|];
[|min(ld + 1, dw + 29)..ld|]|]
let sb_fold (f:System.Text.StringBuilder -> 'a -> System.Text.StringBuilder) (sb:System.Text.StringBuilder) (xs:'a array) =
for x in xs do (f sb x) |> ignore
sb
let sb_append (text:string) (sb:System.Text.StringBuilder) = sb.Append(text)
let sb_appendln sb = sb |> sb_append "\n" |> ignore
let sb_fold_in_range a b f sb = [|a..b|] |> sb_fold f sb |> ignore
let mask_builder mask = Printf.StringFormat<string -> string>(mask)
let center n (s:string) =
let l = (n - s.Length) / 2 + s.Length
let f n s = sprintf (mask_builder ("%" + (n.ToString()) + "s")) s
(f l s) + (f (n - l) "")
let left n (s:string) = sprintf (mask_builder ("%-" + (n.ToString()) + "s")) s
let right n (s:string) = sprintf (mask_builder ("%" + (n.ToString()) + "s")) s
let array2string xs =
let ys = xs |> Array.map (fun x -> sprintf "%2d " x)
let sb = ys |> sb_fold (fun sb y -> sb.Append(y)) (new System.Text.StringBuilder())
sb.ToString()
let xsss =
let m = get_month_calendar year
[|1..12|] |> Array.map (fun i -> m i)
let months = [|"January"; "February"; "March"; "April"; "May"; "June"; "July"; "August"; "September"; "October"; "November"; "December"|]
let sb = new System.Text.StringBuilder()
sb |> sb_append "\n" |> sb_append (center 74 (year.ToString())) |> sb_appendln
for i in 0..3..9 do
sb |> sb_appendln
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append (center 21 months.[i]) |> sb_append " ")
sb |> sb_appendln
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append "Su Mo Tu We Th Fr Sa " |> sb_append " ")
sb |> sb_appendln
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append (right 21 (array2string (xsss.[i].[0]))) |> sb_append " ")
sb |> sb_appendln
for j = 1 to 5 do
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append (left 21 (array2string (xsss.[i].[j]))) |> sb_append " ")
sb |> sb_appendln
sb.ToString()
let printCalendar year = getCalendar year

View file

@ -71,10 +71,8 @@ center :: Int -> String -> String
center i a = T.unpack . (T.center i ' ') $ T.pack a
printCal :: [[[T.Text]]] -> IO ()
printCal [] = return ()
printCal (c:cx) = do
mapM_ (putStrLn . T.unpack) rows
printCal cx
printCal = mapM_ f where
f c = mapM_ (putStrLn . T.unpack) rows
where rows = map (T.intercalate calMargin) $ transpose c
printCalendar :: Integer -> Int -> IO ()

View file

@ -0,0 +1,52 @@
import java.text.*
import java.util.*
import java.io.PrintStream
internal fun PrintStream.printCalendar(year: Int, nCols: Byte, locale: Locale?) {
if (nCols < 1 || nCols > 12)
throw IllegalArgumentException("Illegal column width.")
val w = nCols * 24
val nRows = Math.ceil(12.0 / nCols).toInt()
val date = GregorianCalendar(year, 0, 1)
var offs = date.get(Calendar.DAY_OF_WEEK) - 1
val days = DateFormatSymbols(locale).shortWeekdays.slice(1..7).map { it.slice(0..1) }.joinToString(" ", " ")
val mons = Array(12) { Array(8) { "" } }
DateFormatSymbols(locale).months.slice(0..11).forEachIndexed { m, name ->
val len = 11 + name.length / 2
val format = MessageFormat.format("%{0}s%{1}s", len, 21 - len)
mons[m][0] = String.format(format, name, "")
mons[m][1] = days
val dim = date.getActualMaximum(Calendar.DAY_OF_MONTH)
for (d in 1..42) {
val isDay = d > offs && d <= offs + dim
val entry = if (isDay) String.format(" %2s", d - offs) else " "
if (d % 7 == 1)
mons[m][2 + (d - 1) / 7] = entry
else
mons[m][2 + (d - 1) / 7] += entry
}
offs = (offs + dim) % 7
date.add(Calendar.MONTH, 1)
}
printf("%" + (w / 2 + 10) + "s%n", "[Snoopy Picture]")
printf("%" + (w / 2 + 4) + "s%n%n", year)
for (r in 0..nRows - 1) {
for (i in 0..7) {
var c = r * nCols
while (c < (r + 1) * nCols && c < 12) {
printf(" %s", mons[c][i])
c++
}
println()
}
println()
}
}
fun main(args: Array<String>) {
System.out.printCalendar(1969, 3, Locale.US)
}

View file

@ -0,0 +1,63 @@
function print_cal(year)
local months={"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE",
"JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"}
local daysTitle="MO TU WE TH FR SA SU"
local daysPerMonth={31,28,31,30,31,30,31,31,30,31,30,31}
local startday=((year-1)*365+math.floor((year-1)/4)-math.floor((year-1)/100)+math.floor((year-1)/400))%7
if year%4==0 and year%100~=0 or year%400==0 then
daysPerMonth[2]=29
end
local sep=5
local monthwidth=daysTitle:len()
local calwidth=3*monthwidth+2*sep
function center(str, width)
local fill1=math.floor((width-str:len())/2)
local fill2=width-str:len()-fill1
return string.rep(" ",fill1)..str..string.rep(" ",fill2)
end
function makeMonth(name, skip,days)
local cal={
center(name,monthwidth),
daysTitle
}
local curday=1-skip
while #cal<9 do
line={}
for i=1,7 do
if curday<1 or curday>days then
line[i]=" "
else
line[i]=string.format("%2d",curday)
end
curday=curday+1
end
cal[#cal+1]=table.concat(line," ")
end
return cal
end
local calendar={}
for i,month in ipairs(months) do
local dpm=daysPerMonth[i]
calendar[i]=makeMonth(month, startday, dpm)
startday=(startday+dpm)%7
end
print(center("[SNOOPY]",calwidth),"\n")
print(center("--- "..year.." ---",calwidth),"\n")
for q=0,3 do
for l=1,9 do
line={}
for m=1,3 do
line[m]=calendar[q*3+m][l]
end
print(table.concat(line,string.rep(" ",sep)))
end
end
end
print_cal(1969)