※注意! (2017/5/27 追記)
 Bash on Ubuntu on Windowsを使ったセットアップ方法を書きました。
 → 【COBOL】Bash on Ubuntu on WindowsでCOBOL - くんすとの備忘録
※注意! (2015/5/8 追記)
 本記事の内容が古くなってきたため、同様の内容を、2015/5/8時点で書き直しました
 → WindowsにMSYS2を使ってCOBOL環境を構築する - くんすとの備忘録

Windows上でOpenCOBOLを使いたくなったので、MinGWとOpenCOBOLを入れてみました。

### セットアップ手順
#### MinGWのインストール(portableな設定で)
  • ここから、Windows用のインストーラをダウンロード
    • mingw-get-inst-20120426.exe
  • インストール
    • D:\tmp など、やる気のないフォルダを作成し、一旦そこへインストール
    • 下記のパッケージを選択
      • C Compiler
      • C++ Compiler
      • MYSY Basic System
      • MinGW Development ToolKit
  • 本命のディレクトリへコピー
    • D:\tmp\MinGW を、C:\usr\MinGW へコピー
  • おもむろにアンインストール
    • アンインストーラでアンインストール後、フォルダ(D:\tmp\MinGW)を削除
  • msysの設定を行う
    • fstabの書き換え(C:\usr\MinGW\msys\1.0\etc\fstab)
      • C:\usr\MinGW\ /mingw
  • 起動BATの作成(C:\usr\MinGW\mingw.bat)
```dosbatch @echo off

REM — MinGW用の環境変数の設定 set MINGW=%~dp0 set C_INCLUDE_PATH=%MINGW%\include set CPLUS_INCLUDE_PATH=%MINGW%\include set LIBRARY_PATH=%MINGW%\lib

REM — 環境変数 PATHの設定 set PATH=%MINGW%\msys\1.0\bin;%MINGW%\bin;%PATH%

REM — OpenCOBOL コンパイル用 set COB_CONFIG_DIR=/mingw/share/opensource-cobol-1.3J/config

REM — MSYS の起動 CALL %MINGW%\msys\1.0\msys.bat

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
</div>
<div class="section">
    #### OpenCOBOLのインストール
    
<ul>
<li>msysを起動し、下記コマンドでパッケージのインストールを行う
<ul>
<li>mingw-get update</li>
<li>mingw-get upgrade</li>
<li>mingw-get install mingw32-libpdcurses</li>
<li>mingw-get install mingw32-gmp</li>
<li>mingw-get install mingw32-pdcurses</li>
</ul></li>
</ul>   ※readme.txtには「mingw-get install msys-mintty」したほうがいいよ、って書いてありますが、やりません。おこのみで。

<ul>
<li>Shift-JISでDisplayする為に、nkfをインストール
<ul>
<li><a href="http://www.vector.co.jp/soft/win95/util/se295331.html">http://www.vector.co.jp/soft/win95/util/se295331.html</a>
<ul>
<li>上記でDLしたexeを、msysのbin(C:\usr\MinGW\msys\1.0\bin)へコピー</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>OpenCOBOL or opensourceCOBOL と vbisam の入手
<ul>
<li><a href="http://www12.ocn.ne.jp/~peg/bin/download.html">http://www12.ocn.ne.jp/~peg/bin/download.html</a> より、下記のファイルをDL
<ul>
<li>opensource-cobol-1.3J-1.zip</li>
<li>vbisam-2.0-1.zip</li>
</ul></li>
<li>解凍したものを、フォルダごと MinGW インストールフォルダの直下にコピー
<ul>
<li>※ファイルの上書きは発生しない</li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>起動確認
<ul>
<li>cobc -v</li>
</ul></li>
</ul>
<ul>
<li>ソースを書いてひと通り実行してみる
<ul>
<li>**ソース・shellどちらも、文字コードはShift-JIS、改行コードはCRLF(0x0D0A)で作成**</li>
</ul></li>
</ul>[_compile_run.sh] ※コンパイル&実行用シェル
```sh
#!/bin/bash
cblsrc=$1
cblbin=${cblsrc}.bin

cobc -x -o $cblbin $cblsrc &amp;&amp; $cblbin | nkf32 -xS
echo "RETURNCODE:$?">/dev/stderr
[ -e "$cblbin" ] &amp;&amp; rm $cblbin

```<br/>
[test1.cbl] ※検証用ソース
```cobol
       IDENTIFICATION DIVISION.
       PROGRAM-ID. test1.
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
      *
       WORKING-STORAGE SECTION.
       01  FILLER.
            03 TEST-X.
             10 VAR         PIC X(14).
             10 END-POINT   PIC X(01) VALUES &#39;/&#39;.
            03 TEST-9.
             10 VAR         PIC 9(08).
             10 END-POINT   PIC X(01) VALUES &#39;/&#39;.
            03 TEST-S.
             10 VAR         PIC S9(07).
             10 END-POINT   PIC X(01) VALUES &#39;/&#39;.
            03 TEST-COMP3.
             10 VAR         PIC S9(09)V9(2) COMP-3.
             10 END-POINT   PIC X(01) VALUES &#39;/&#39;.
            03 TEST-N.
             10 VAR         PIC N(09).
             10 END-POINT   PIC X(01) VALUES &#39;/&#39;.
            03 TEST-B.
             10 VAR         PIC S9(4) COMP.
             10 END-POINT   PIC X(01) VALUES &#39;/&#39;.
      *
       PROCEDURE DIVISION.
       MAIN-RTN.
           PERFORM EDIT-RTN.
           PERFORM OUTPUT-RTN.
           MOVE 9 TO RETURN-CODE.
       EXIT.
       STOP RUN.
      *
       EDIT-RTN SECTION.
           MOVE &#39;This is X Type&#39;        TO VAR OF TEST-X.
           MOVE 12345678                TO VAR OF TEST-9.
           MOVE -12345                  TO VAR OF TEST-S.
           MOVE 123456789.12            TO VAR OF TEST-COMP3.
           MOVE &#39;こんにちは、世界!&#39;    TO VAR OF TEST-N.
           MOVE 38533                   TO VAR OF TEST-B. *> 38533 = 0x9685 = &#39;妹&#39;
       EXIT.
      *
       OUTPUT-RTN SECTION.
           DISPLAY &#39;TEST-X    :&#39;    TEST-X.
           DISPLAY &#39;TEST-9    :&#39;    TEST-9.
           DISPLAY &#39;TEST-S9   :&#39;    TEST-S.
           DISPLAY &#39;TEST-COMP3:&#39;    TEST-COMP3.
           DISPLAY &#39;TEST-N    :&#39;    TEST-N.
           DISPLAY &#39;TEST-BYTE :&#39;    TEST-B.
       EXIT.
      *

```実行結果
```sh
$ _compile_run.sh test1.cbl
TEST-X    :This is X Type/
TEST-9    :12345678/
TEST-S9   :001234u/
TEST-COMP3:4Vx/
TEST-N    :こんにちは、世界!/
TEST-BYTE :妹/
RETURNCODE:0

#### コンパイル時に「/mingw/share/opensource-cobol-1.3J/config/default.conf: No such file or directory」って出るときの対処法
  • 自分がやったこと
    • export COB_CONFIG_DIR=/mingw/share/opensource-cobol-1.3J/config
      • 起動時に自動的に環境変数が反映されるよう、起動BATに仕込みました。(環境によっては.bashrcでもよいと思います)
      • 全く同じパスを設定しているだけの筈なんだけど、とりあえずこれでコンパイル通るようになりました。
      • readme.txtに「OpenCOBOL 1.1 prerelease MinGW Binary が抱える問題(未更新)」って記述があるのだけれど、これのことかな。

以上。
バイナリファイルをいじくりまわすのって、COBOL使うと非常に楽っぽい予感がするのですよね~
ファイル圧縮とか。