プログラミング

フリーのGnuCOBOL(OpenCOBOL)をLinux(Ubuntu)で使ってみた

*記事内に商品プロモーションを含む場合があります

Ubuntu(Linux)に Gnu COBOL(Open COBOL) をインストールする手順とコンパイル方法などを紹介します。

GNU COBOLのインストール

インストール

$ sudo apt-get update

$ sudo apt install open-cobol

エラーが出たら「gnucobol4」を試してください。
$ sudo apt install gnucobol4

正常にインストールされたかを確認します。

# 

$ cobc -version

cobc (GnuCOBOL) 4.0-early-dev.0
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Built     Sep 14 2021 19:23:38
Packaged  Jun 06 2020 20:56:36 UTC
C version "11.2.0"

COBOLソースのコンパイル/実行

COBOLのソースプログラムを作成

専用のCOBOLエディタなどはありません。

Ubuntuのviだと、COBOL用に色付けしてくれます。
以下は、TeraTermでUbuntuサーバに接続し、viでCOBOLソースプログラムを表示させた画面です。

・COBOLの予約語(DIVISIONやPICなど)の色付け
・コメント行の色付け(7桁目に”*”がある行はコメント行です。)

COBOLソースのコンパイル

コンパイルにcobc コマンドを使います。
実行可能プログラムの作成には、-x オプションを付けます。

# 
#
$ cobc -x cobol-test1.cbl

$ ./cobol-test1

HELLO world!
0.3529411

複数のソースファイルで構成される場合

MAIN01.cbl から、SUB01.cblを呼び出すプログラムです。

# 
#
$ cat MAIN01.cbl

       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN01.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       01 PARAMETRES.
         02 PA-RETURN-CODE PIC 99 VALUE 0.
       PROCEDURE DIVISION.
       MAIN-PROCEDURE.
            DISPLAY "Hello world (MAIN) !"
            MOVE 1 TO PA-RETURN-CODE.
            CALL "SUB01" USING BY REFERENCE  PARAMETRES .
            STOP RUN.
       END PROGRAM MAIN01.

$ cat SUB01.cbl

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUB01.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       LINKAGE SECTION.
       01 PARAMETRES.
           02 PA-RETURN-CODE PIC 99 .
       PROCEDURE DIVISION USING PARAMETRES.
       MAIN-PROCEDURE.
           DISPLAY "Hello world (SUB01) !"
           DISPLAY "PA-RETURN-CODE=" PA-RETURN-CODE .
           STOP RUN.
       END PROGRAM SUB01.

cobc -xでコンパイルします。

MAIN01 という実行可能プログラムが作成されます。

# 
#
$ cobc -x MAIN01.cbl SUB01.cbl

$ ls -ltrF
-rw-rw-r-- 1 testuser testuser   438 Jan 28 08:30 MAIN01.cbl
-rw-rw-r-- 1 testuser testuser   410 Jan 28 08:30 SUB01.cbl
-rwxrwxr-x 1 testuser testuser 17568 Jan 28 08:31 MAIN01*

$ ./MAIN01

Hello world (MAIN) !
Hello world (SUB01) !
PA-RETURN-CODE=01

Gnu COBOLコンパイラの特長

Gnu COBOLは、COBOLソースを C言語のソースへ変換して、C言語のソースをGCC(GnuのCコンパイラ)でコンパイルして実行可能プログラムを生成しています。

COBOLのソースを C言語のソースへ変換するだけもできます。
-x の代わりに -C オプションを指定します。

cobc -C -v cobol-test1.cbl

# 
#
$ cobc -C -v cobol-test1.cbl
cobc (GnuCOBOL) 4.0-early-dev.0
Built     Sep 14 2021 19:23:38  Packaged  Jun 06 2020 20:56:36 UTC
C version "11.2.0"
loading standard configuration file 'default.conf'
command line:   cobc -C -v cobol-test1.cbl
preprocessing:  cobol-test1.cbl -> /tmp/cob5103_0.cob
return status:  0
parsing:        /tmp/cob5103_0.cob (cobol-test1.cbl)
return status:  0
translating:    /tmp/cob5103_0.cob -> cobol-test1.c (cobol-test1.cbl)
# 
#
$ ls -ltrF
-rw-rw-r-- 1 testuser testuser  1052 Jan 28 08:35 cobol-test1.c.l.h
-rw-rw-r-- 1 testuser testuser   882 Jan 28 08:35 cobol-test1.c.h
-rw-rw-r-- 1 testuser testuser  5277 Jan 28 08:35 cobol-test1.c

$ cat cobol-test1.c
/* Generated by           cobc 4.0-early-dev.0 */
/* Generated from         cobol-test1.cbl */
/* Generated at           Jan 28 2023 08:35:17 */
/* GnuCOBOL build date    Sep 14 2021 19:23:38 */
/* GnuCOBOL package date  Jun 06 2020 20:56:36 UTC */
/* Compile command        cobc -C -v cobol-test1.cbl */

#include 
#include 
#define  COB_KEYWORD_INLINE __inline
#include 
#include 
#define  COB_SOURCE_FILE                "cobol-test1.cbl"
/* Global variables */
#include "cobol-test1.c.h"

/* Function prototypes */
int             SAMPLE1 (void);
static int              SAMPLE1_ (const int);
static void             SAMPLE1_module_init (cob_module *module);

/* PROGRAM-ID 'SAMPLE1' */
int SAMPLE1 ()
{
  return SAMPLE1_ (0);
}

static int SAMPLE1_ (const int entry)
{
  #include "cobol-test1.c.l.h"
  static const unsigned int st_name_hash [] = {
        0x9B860601,     /* SAMPLE1 */
  0};
  
  ★省略

最後に

GnuCOBOLの公式の情報は以下です。
https://sourceforge.net/projects/gnucobol/

Linuxの標準のデバッガGDBを使って、デバッグできそうな雰囲気ですが、分かりませんでした。
全般的にGnuCOBOLの情報は少ないですね。

ちょっとだけ試す目的なら、OpenCobolIDE。

フリーのCOBOL総合開発環境(IDE) OpenCobolIDEでプログラミング(Windows)プログラミング言語COBOLの統合開発環境(IDE)の「OpenCobolIDE」を試してみました。 Windows 10やWin...

本格的に使うなら、Visual COBOLがいいです。

【1年無料】Visual COBOL Personal Editionの使い方。Windows版のダウンロードからプログラム作成までプログラミング言語COBOLの開発環境(IDE)の「Visual COBOL Personal Edition」を使ってみました。 ...