ちょっとネタ記事ばかり書いてしまったので、まともな記事を書こうと思います。
このブログのアクセス解析をしたところ、ダントツのアクセス数を叩き出しているのはこの記事でした。
【COBOL】WindowsにOpenCOBOL環境を構築 - くんすとの備忘録
つまり、WindowsでCOBOLを動かす、ということには需要がある!!
というわけで、Bash on Ubuntu on Windows(以後「BoW」)でCOBOLを動かしてみました。
以前はMSYS2やMinGWで動かしていましたが、そのときよりも若干セットアップは簡単です。
概要
COBOLのコンパイラをインストールし、簡単なCOBOLのプログラムをコンパイル・実行できるところまでを検証します。
検証環境
Windows 10 Pro 64bit
※Creators Update後のWindows10です
また、BoWは既に使えるようになっている前提です。セットアップ方法はこの辺り(Bash on Ubuntu on Windowsをインストールしてみよう! - Qiita)を参考にすればよさそう。
セットアップ手順
opensource COBOLのインストール
OSSコンソーシアムのサイト(https://www.osscons.jp/osscobol/)から、opensource COBOL1をダウンロードします。
1
2
|
wget "https://www.osscons.jp/osscobol/files/?action=cabinet_action_main_download&block_id=414&room_id=21&cabinet_id=11&file_id=380&upload_id=759" -O opensource-cobol-1.5.1J.tar.gz
|
ビルドに必要なライブラリをインストールします。
(何が必要か、ということは README に書いてありました)
1
2
|
$ sudo apt-get install build-essential libgmp-dev libdb-dev libncurses5-dev
|
解凍
1
2
|
$ tar -xvf opensource-cobol-1.5.1J.tar.gz
|
ビルドとインストール
1
2
3
4
5
6
|
$ cd opensource-cobol-1.5.1J
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
|
※ldconfig しないと、libcob.so.1が見つからない旨のエラーが発生してしまいます
確認
と表示されればインストールが成功しています。
作業フォルダの作成
BoWとWindowsで連携しながら開発を行うため、Windowsのエクスプローラから作業フォルダを作成します。
作業フォルダを C:\work\cobol に作成した場合、BoWからは /mnt/c/work/cobol のパスで参照できます。
BoWを作成した作業フォルダまで移動します。
検証用ソースの作成
検証用のソースを適当なエディタで作成します。
文字コードはShiftJISにしてください。改行コードはLFでもCRLFでもどちらでも大丈夫です。
C:\work\cobol\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.
*
|
実行準備
COBOLソースやファイルにはShiftJISのファイルを扱うことを想定していますが、BoWの文字コードはUTF-8です。なので、そのままプログラムを実行すると出力が文字化けしてしまいます。
文字化けを解消するためのツールとして nkf をインストールしておおきます。
1
|
$ sudo apt-get install nkf
|
コンパイルと実行
検証用のソースをコンパイルします。
→ test1 というファイルができます。
ひとまず、そのまま実行してみます。
実行結果
1
2
3
4
5
6
|
TEST-X :This is X Type/
TEST-9 :12345678/
TEST-S9 :001234u
TEST-COMP3:4Vx,/
TEST-N :ɂ́AEI/
TEST-BYTE :/
|
このように、日本語の部分が文字化けしてしまっています。
出力結果に nkf を通すことで文字化けを解消できます。
もう一度実行してみましょう。
実行結果
1
2
3
4
5
6
|
TEST-X :This is X Type/
TEST-9 :12345678/
TEST-S9 :001234u/
TEST-COMP3:4Vx/
TEST-N :こんにちは、世界!/
TEST-BYTE :妹/
|
日本語の文字化けが解消されました。
(pack項目はそもそもバイナリなのでこのままです。)
参考URL