森の木ちゅうおう、つまり、京橋図書館に行ってみた。最初は建物に興味があった。中に入ってみると、窓際に閲覧席と言うか、学習コーナーがあった。そこでノート整理と図書館の本を読んでみた。なんか心地良い。
リラックス出来るんだな。

本を読む速度は遅い。昔、速読術をやってみたがダメだった。遅読は私の劣等感になっていた。ある本を読んだ。遅読、大いに結構。色々考えながら読むのは良い事だと。

なんかスッキリした。自分のペースで読書を続けようと思った。

今の読書は小説が中心だ。色々勉強したいとも思っている。

実用書は、目次を見て、興味あるところを読んでも良いらしい。

読書は、自分を作り変えて行く作業だと思う。
COBOLでカレンダー表示プログラムを書きました。昔と違うのは、小文字が使えること。

新人の頃は、大文字で、コメントはカタカナで打っていました。端末からは小文字が打てませんでした。

コンピュータの端末は、専用のものでした。

暫くして、パソコンが端末として使えるようになりましたが、まだ、日本語の入力は出来ませんでした。

カナモードがあって、アルファベットの大文字、シフトして小文字、カナモードでカタカナと打ち分けていました。

アルファベットは、英文タイプライターでブランドタッチが出来るようにしていたので、苦になりませんでしたが、カナは苦労しました。

そこで、アルファベットに倣って、かなタイプライターを購入して、ブランドタッチを覚えました。

多分、今は、みんな、ローマ字入力で日本語を入力していると思います。

私は、かなで入力しています。

キータッチが少なく、楽です。

COBOLのカレンダー表示プログラムを載せました。



*********************************************************
*   カレンダー     ver 1.0
*********************************************************
identification division.
program-id. prog.
environment division.
data division.
working-storage section.
01  in-area.
    03  in-nen.
        05  in-nen-9     pic  9(04).
    03  in-tsuki.
        05  in-tsuki-9    pic  9(02).
01  wk-area.
    03  wk-uru-area.
        05  wk-a               pic  9(07).
        05  wk-b               pic  9(07).
    03  wk-uru.
        05  wk-uru-nen       pic  9(04).
        05  wk-uru-kekka    pic  x(01).
    03  wk-calc.
        05  wk-nen              pic  9(4).
        05  wk-nisu             pic 9(07).
        05  wk-yobi           pic 9(4).
        05  wk-w1          pic 9(07).
01  ss-area.
    03  ss-1                 pic  9(03).
    03  ss-2                 pic  9(03).
01  ct-area.
    03  ct-nen    pic  9(04) value 2000.
    03  ct-yobi    pic 9(04) value 7.
    03  ct-title  pic x(21) value
         "  S  M  T  W  T  F  S".
01  tb-area.
    03  tb-data            pic  x(24)
    value "312831303130313130313031".
    03  tb-data-r redefines tb-data.
        05  tb-tsuki pic  9(02) occurs 12.
        
01 ot-area.
    03  ot-data            pic  x(126).
    03  ot-data-r  redefines  ot-data.
        05  ot-tbl  pic  x(03) occurs 42.
    03  ot-disp-r  redefines  ot-data.
        05  ot-disp  pic x(21) occurs 6.
    03  ot-hi          pic 9(03).
    03  ot-hi-set    pic zz9.
    03  ot-ss1        pic  9(02).
    03  ot-midashi.
        05  filler      pic  x(02) value space.
        05  ot-nen   pic  9(4).
        05  ot-sura  pic  x(03).
        05  ot-tsuki pic  x(02).
procedure division.
main-rtn.
    perform s00-init.
    
    accept in-nen.
    accept in-tsuki.
    
    if  in-nen not numeric
        display in-nen
        display "not numeric"
        go to main-rtn-ext
    end-if.
    if  in-tsuki not numeric
        display in-tsuki
        display "not numeric"
        go to main-rtn-ext
    end-if.
    
    if  in-nen-9 >= ct-nen
        perform c10-nencal
        perform c11-tsukical
        perform c12-yobi
    else
        perform c20-nencal
        perform c21-tsukical
        perform c22-yobi
    end-if.
    
    move  in-nen-9  to  ot-nen.
    move  " / "           to  ot-sura.
    move  in-tsuki-9 to ot-tsuki.
    move in-nen to wk-uru-nen.
    perform c00-uruchk.
    if  wk-uru-kekka = "1"
        move 29 to tb-tsuki(2)
    end-if.
    perform c13-edit.
    perform c14-disp.
    
main-rtn-ext.
  stop run.
  
*********************************************************
*   初期処理
*********************************************************
s00-init.
    initialize in-area wk-area ot-area.
s00-init-ext.
    exit.
*********************************************************
*   うるう年チェック
*********************************************************
c00-uruchk.
    move  zero  to  wk-uru-kekka.
    compute  wk-a = wk-uru-nen / 4.
    compute  wk-b = wk-a * 4.
    if  wk-b = wk-uru-nen
        compute wk-a = wk-uru-nen / 100
        compute wk-b = wk-a * 100
        if  wk-b = wk-uru-nen
            compute wk-a = wk-uru-nen / 400
            compute wk-b = wk-a * 400
            if  wk-b = wk-uru-nen
                move "1" to wk-uru-kekka
            end-if
        else
            move "1" to wk-uru-kekka
        end-if
    end-if.
c00-uruchk-ext.
    exit.
*********************************************************
*   2000年から対象年の前年までに日数算出
*********************************************************
c10-nencal.
    move in-nen-9 to wk-nen.
    compute  wk-nen = wk-nen - 1.
    perform until wk-nen < ct-nen
        move wk-nen to wk-uru-nen
        perform c00-uruchk
        if  wk-uru-kekka = "1"
            compute wk-nisu = wk-nisu + 366
        else
            compute wk-nisu = wk-nisu + 365
        end-if
        compute wk-nen = wk-nen - 1
    end-perform.
c10-nencal-ext.
    exit.
*********************************************************
*   対象年の翌年から1999年までの日数算出
*********************************************************
c20-nencal.
    move in-nen-9 to wk-nen.
    compute  wk-nen = wk-nen + 1.
    perform until wk-nen >= ct-nen
        move wk-nen to wk-uru-nen
        perform c00-uruchk
        if  wk-uru-kekka = "1"
            compute wk-nisu = wk-nisu + 366
        else
            compute wk-nisu = wk-nisu + 365
        end-if
        compute wk-nen = wk-nen + 1
    end-perform.
c20-nencal-ext.
    exit.
*********************************************************
*   対象年の1/1から対象月の前月までの日数算出
**********************************************************
c11-tsukical.
    move  1  to ss-1.
    perform until ss-1 = in-tsuki-9
        compute wk-nisu = wk-nisu + tb-tsuki(ss-1)
        compute ss-1 = ss-1 + 1
    end-perform.

c11-tsukical-ext.
    exit.
*********************************************************
*   対象月から対象年の12月までの日数算出
**********************************************************
c21-tsukical.
    move  in-tsuki-9 to ss-1.
    perform until ss-1 > 12
        compute wk-nisu = wk-nisu + tb-tsuki(ss-1)
        compute ss-1 = ss-1 + 1
    end-perform.

c21-tsukical-ext.
    exit.
*********************************************************
*   対象月の1日の曜日算出
**********************************************************
c12-yobi. 
    compute  wk-w1 = wk-nisu / 7.
    compute  wk-yobi = wk-nisu - wk-w1 * 7.
    compute  wk-yobi = wk-yobi + ct-yobi.
    if  wk-yobi > 7
        compute wk-yobi = wk-yobi - 7
    end-if.
c12-yobi-ext.
    exit.
*********************************************************
*   対象月の1日の曜日算出
**********************************************************
c22-yobi. 
    compute  wk-w1 = wk-nisu / 7.
    compute  wk-yobi = wk-nisu - wk-w1 * 7.
    compute  wk-yobi = ct-yobi - wk-yobi.
c22-yobi-ext.
    exit.
*********************************************************
*    カレンダー編集
**********************************************************
c13-edit.
    move  wk-yobi to  ot-ss1.
    move  1  to  ot-hi.
    perform  until  ot-hi > tb-tsuki(in-tsuki-9)
        move  ot-hi  to  ot-hi-set
        move  ot-hi-set to ot-tbl(ot-ss1)
        add  1  to  ot-hi
        add  1  to  ot-ss1
    end-perform.
c13-edit-ext.
    exit.
*********************************************************
*   カレンダー表示
**********************************************************
c14-disp.
    display ot-midashi.
    display "".
    display ct-title.
    move  1  to  ot-ss1.
    perform  until ot-ss1 > 6
        display  ot-disp(ot-ss1)
        add 1 to ot-ss1
    end-perform.

c14-disp-ext.
    exit.
カレンダー表示プログラムが完成しました。
Ruby で書きました。
生まれ月を表示してみました。
私は、月曜日生まれ。
妻は水曜日生まれでした。

Python版とCOBOL版を作成中です。

下記にプログラムソースを載せました。
改善の余地はありますが、ひとまず完成と言うことにしました。

一年分を表示するとか、
複数月を選択出来るとか、
機能アップも試みたいと思います。

#######
# Ruby
#######

#カレンダー ver 1.0

$bs_nen = 2000
$bs_yobi = 6
$mmdd = [99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99]
#うるう年チェック
def uruchk(nen)
    ck1 = nen % 4
    ck2 = nen % 100
    ck3 = nen % 400
    rt=0
    if ck1 == 0
        if ck2 == 0
            if ck3 == 0
                rt = 1
            end
        else
            rt = 1
        end
    end
    return rt
end

# 2000年から対象年の前年までに日数算出
def nen_nisu(nen) 
    w_nisu = 0
    w_nen = nen - 1
    while w_nen >= $bs_nen 
        if uruchk(w_nen) == 1 
            w_nisu = w_nisu + 366
        else 
            w_nisu = w_nisu + 365
        end
        w_nen = w_nen - 1
    end
    return w_nisu
end

# 対象年の翌年から1999までの日数算出
def nen_nisu2(nen) 
    w_nisu = 0
    w_nen = nen + 1
    while w_nen < $bs_nen 
        if uruchk(w_nen) == 1 
            w_nisu = w_nisu + 366
        else
            w_nisu = w_nisu + 365
        end
        w_nen = w_nen + 1
    end
    return w_nisu
end

# 対象年の1/1から対象月の前月までの日数算出
def tsuki_nisu(nen,tsuki) 
    w_nisu = 0
    tsuki_dt = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if uruchk(nen) == 1 
        tsuki_dt[1] = 29
    end
    w_tsuki = 1
    while w_tsuki < tsuki
        w_nisu = w_nisu + tsuki_dt[w_tsuki-1]
        w_tsuki = w_tsuki + 1
    end
    return w_nisu
end

# 対象月から対象年の12月までの日数算出
def tsuki_nisu2(nen,tsuki)
    w_nisu = 0
    tsuki_dt = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if uruchk(nen) == 1
        tsuki_dt[1] = 29
    end
    w_tsuki = tsuki
    while w_tsuki <= 12
        w_nisu = w_nisu + tsuki_dt[w_tsuki - 1]
        w_tsuki = w_tsuki + 1
    end
    return w_nisu
end
# 対象月の1日の曜日算出 日:0 月:1 ...
def yobi_edit(nisu) 
    w_sa = 0
    yobi = $bs_yobi
    w_sa = nisu % 7
    yobi = yobi + w_sa
    if  yobi > 6 
        yobi = yobi % 7
    end
    return yobi
end

# 対象月の1日の曜日算出 日:0 月:1 ...
def yobi_edit2(nisu)
    w_sa = 0
    yobi = $bs_yobi
    w_sa = nisu % 7
    yobi = yobi - w_sa
    return yobi
end

# カレンダー編集
def cal_edit(s1,mx)
    hi = 1
    while hi <= mx
        $mmdd[s1] = hi
        s1 = s1 + 1
        hi = hi + 1
    end
end
# 対象月の最終日
def tsuki_max(nen,tsuki)
    tsuki_dt = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if uruchk(nen) == 1
        tsuki_dt[1] = 29
    end
    return tsuki_dt[tsuki-1]
end
# カレンダー出力
def cal_out(nen,tsuki) 
    print(nen, "/",tsuki)
    print("\n\n")
    print("  S  M  T  W  T  F  S\n")
    ss1  = 0
    while ss1 < 42 
        if $mmdd[ss1] == 99 
            print("   ")
        else
            print sprintf("%3d",$mmdd[ss1])
        end
        ss1 = ss1 + 1
        if ss1%7 == 0
            print("\n")
        end
    end
end
### main 

bs_nen = 2000
bs_yobi = 6

nisu = 0
yobi = 0

in_nen = gets.to_i
in_tsuki = gets.to_i

if in_nen >= $bs_nen
    nisu = nen_nisu(in_nen)          
    nisu = nisu + tsuki_nisu(in_nen, in_tsuki) 
    yobi = yobi_edit(nisu)
else 
    nisu = nen_nisu2(in_nen)
    nisu = nisu + tsuki_nisu2(in_nen,in_tsuki)
    yobi = yobi_edit2(nisu)
end
max2 = tsuki_max(in_nen, in_tsuki)
cal_edit(yobi, max2)
cal_out(in_nen, in_tsuki)