※注意! (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 ```
#### OpenCOBOLのインストール
  • msysを起動し、下記コマンドでパッケージのインストールを行う
    • mingw-get update
    • mingw-get upgrade
    • mingw-get install mingw32-libpdcurses
    • mingw-get install mingw32-gmp
    • mingw-get install mingw32-pdcurses
※readme.txtには「mingw-get install msys-mintty」したほうがいいよ、って書いてありますが、やりません。おこのみで。
  • OpenCOBOL or opensourceCOBOL と vbisam の入手
    • http://www12.ocn.ne.jp/~peg/bin/download.html より、下記のファイルをDL
      • opensource-cobol-1.3J-1.zip
      • vbisam-2.0-1.zip
    • 解凍したものを、フォルダごと MinGW インストールフォルダの直下にコピー
      • ※ファイルの上書きは発生しない
  • 起動確認
    • cobc -v
  • ソースを書いてひと通り実行してみる
    • **ソース・shellどちらも、文字コードはShift-JIS、改行コードはCRLF(0x0D0A)で作成**
[_compile_run.sh] ※コンパイル&実行用シェル ```sh #!/bin/bash cblsrc=$1 cblbin=${cblsrc}.bin cobc -x -o $cblbin $cblsrc && $cblbin | nkf32 -xS echo "RETURNCODE:$?">/dev/stderr [ -e "$cblbin" ] && rm $cblbin ```
[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 '/'. 03 TEST-9. 10 VAR PIC 9(08). 10 END-POINT PIC X(01) VALUES '/'. 03 TEST-S. 10 VAR PIC S9(07). 10 END-POINT PIC X(01) VALUES '/'. 03 TEST-COMP3. 10 VAR PIC S9(09)V9(2) COMP-3. 10 END-POINT PIC X(01) VALUES '/'. 03 TEST-N. 10 VAR PIC N(09). 10 END-POINT PIC X(01) VALUES '/'. 03 TEST-B. 10 VAR PIC S9(4) COMP. 10 END-POINT PIC X(01) VALUES '/'. * PROCEDURE DIVISION. MAIN-RTN. PERFORM EDIT-RTN. PERFORM OUTPUT-RTN. MOVE 9 TO RETURN-CODE. EXIT. STOP RUN. * EDIT-RTN SECTION. MOVE 'This is X Type' 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 'こんにちは、世界!' TO VAR OF TEST-N. MOVE 38533 TO VAR OF TEST-B. *> 38533 = 0x9685 = '妹' EXIT. * OUTPUT-RTN SECTION. DISPLAY 'TEST-X :' TEST-X. DISPLAY 'TEST-9 :' TEST-9. DISPLAY 'TEST-S9 :' TEST-S. DISPLAY 'TEST-COMP3:' TEST-COMP3. DISPLAY 'TEST-N :' TEST-N. DISPLAY 'TEST-BYTE :' 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使うと非常に楽っぽい予感がするのですよね~
ファイル圧縮とか。