※注意! (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を入れてみました。

参考URL

セットアップ手順

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)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@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] ※コンパイル&実行用シェル
1
2
3
4
5
6
7
8
#!/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] ※検証用ソース
 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
       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.
      *

実行結果

1
2
3
4
5
6
7
8
9
$ _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使うと非常に楽っぽい予感がするのですよね~
ファイル圧縮とか。