Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

トップ  >  A−VXのCOBOL

A−VXのCOBOL

NECのオフコンで使用できるCOBOL

オープン系ではJava、C++、VB.NET、Perlなど数えきれないほどいろいろな言語があります。一方、オフコンで使用できる言語と言われてまず思い浮かぶものといえばCOBOL言語。NECのオフコンも過去、アセンブラ言語、FORTRAN、BASIC、C言語・・といろいろ使えたようですが、最終的にはCOBOL言語一択となっています。

ところでJava言語には、Java7とかJava8、Java9などのようにバージョンがあります。同じようにCOBOL言語にもバージョンがあります。第一次規格、第二次規格、第三次規格・・・といいますが、一般的にはCOBOL74(1974年、第二次規格)、COBOL85(1985年、第三次規格)というようにANSIの規格が制定された年で呼ばれることが多いようです。
ちなみに第四次規格が2002年、第五次規格が2014年のようです。

NECのオフコン用のCOBOLもその規格の改訂に合わせて、3つのバージョンがあります。

  • COBOL4という製品のコンパイラ
  • COBOL、高級COBOL、TモードCOBOL、COBOL74といった名前の製品のコンパイラ
  • COBOL85という製品のコンパイラ

(以降それぞれ「COBOL4」「COBOL74」「COBOL85」と略して書きます。)

3バージョンともに今も使える

NECのオフコンは互換性を重視しているので、昔作ったプログラムはそのまま使えます。

例えば40年前のITOS上でCOBOL4でコンパイルしたアプリケーション(ロードモジュール)は、今のA-VX02上でそのまま動きます。コンパイルし直す必要すらありません。

一方、40年前にCOBOL4用に作ったプログラムを修正したい時もあると思います。COBOL4モードでコンパイルできるコンパイラが今も用意されているので、今でもプログラムを修正してコンパイルといったことが可能です。

オープンの世界では、40年前に作ったプログラムは今のパソコン上で動かなかったり、あるいはコンパイラが発売中止になっていたりということは普通だと思います。

それでは3つのバージョンのCOBOLについて簡単に説明していきたいと思います。

COBOL4

最初に謝っておきます。すみません。あまり詳しくは知りません。

とても古く1970年代末〜1980年代前半ごろのコンパイラ製品です。
COBOL言語の正式な仕様から若干はずれているようで、NECオリジナルのCOBOLのように見えます。なので、このCOBOL4コンパイラ用に作られたプログラムをCOBOL85やオープンのMF COBOL用のプログラムに直すのはちょっと大変だと思います。
直すのが大変なこと、今のオフコンでも問題なく動くこと、などから、オープンに移行するためにプログラムを整理したりしていると意外と数本残っているのが見つかったりするようです。

DISPLAY文やACCEPT文の代わりに、DISPCRT文やACEPCRT文を使用します。また文字列を囲むのに”の代わりに@が使われたりするようです。

          :
000000     DISPCRT ( 1, 1 ) ERASE
000000             ( 1,20 ) @***** ファイル ケンサク *****@
000000             ( 4,10 ) @ケンサクキー1 @
000000             ( 6,10 ) @ケンサクキー2 @
000000     ACEPCRT ( 4,20 ) KEY1      WITH FC-ZERO 0V-CHK
000000             ( 6,20 ) KEY2      WITH L-JUST  FC-ZERO 0V-CHK.
000000     IF KEY1 = 0 GO TO PRGEND.
000000     READ  FILE-1 WITH UNLOCK
000000             AT END GO TO PRG-ERR.
          :
          :

こんな感じなので、COBOLを知っている人なら、「んん?何か普通と違うぞ」と見分けることができると思います。

COBOL74

COBOLの第二次規格の仕様に従って作られたコンパイラです。ANSIが1974年に制定したので、このコンパイラや製品のことをCOBOL74と言っています。

発売当時の製品名称はCOBOLです。COBOLxxではなく、何も付かない、単にCOBOLという名前でした。区別する必要があるときは、COBOL4と比べて、規格に従った「高級」なコンパイラということで高級COBOLと呼ばれていました。
COBOL85が発売された後は、COBOL85に対してCOBOL74と呼ばれています。
NECの製品としてTモードCOBOLという名称のものもありますが、これはこのCOBOL74のことです。

言語仕様に従って作られたコンパイラなので、COBOL74規格に従って作ったCOBOLプログラムなら、NEC以外の他の会社のCOBOL74規格対応コンパイラでもそのまま使えそうですが、実際のところNEC独自仕様が追加されたり、規格で明確に決まっていないところがNECオリジナルになっていたりするので、そのままでは動きません。

COBOL74ですが、NECから発売されたのは1980年に入ってからです。(COBOLの場合、規格はCODASYL→ANSI→ISO→日本のJISの順番に決まっていくので、日本で発売されるのはけっこう後になる。)
一番NECのオフコンが売れていた時期に最新のCOBOLとして発売されたので、COBOL74の規格に従って作られたプログラムも多かったと思われ、今世間にあるNECオフコン用のCOBOLプログラムの2,3割程度はこのCOBOL74のプログラムのように私は感じます。

COBOL74とCOBOL85では基本的には上位互換がありますが、やはり少し差異があって、COBOL74規格用に書いたプログラムをそのままCOBOL85でコンパイルすると、コンパイルできるけど動作が少し異なるみたいなことがあったりします。
主なところではキー入力の終了値の違いであるとか、ファイルの終了ステータスの差異などがあります。
というわけでCOBOL74モードでコンパイルすることになります。

COBOL85

COBOLの第三次規格の仕様に従って作られたコンパイラです。ANSIが1985年に制定したので、このコンパイラや製品のことをCOBOL85と言っています。
ちなみに第三次規格には、後に「追補1」で「組み込み関数」という機能が言語仕様に追加されています。
富士通や日立、マイクロフォーカス 、さらにはNECのメインフレーム用やオープン用のCOBOLは、この「追補1」とさらに「追補2」を含めてCOBOL85となっていますが、NECのオフコンは含んでいません。NECのオフコン用のCOBOL85だけ初期の「第三次規格」のみです。なのでNECオフコンのCOBOL85には「組み込み関数」がありません。

NECのオフコンのCOBOLは、この第三次規格のCOBOL85が最新です。COBOLには2002年や2014年に制定された規格もあるので、古いよなと思う人もいるかと思いますが、NECのオフコン用で一番新しいのはこれなので、一般的にはこのコンパイラを使います。

コンパイルについて

先にも少し書きましたが、COBOL4用に作ったCOBOLプログラムも、COBOL74用に作ったCOBOLプログラムも、COBOL85用に作ったプログラムも、A-VX02上でコンパイルすることができます。

COBOL4用のプログラムはかなり独特なので、そのままではCOBOL85コンパイラではコンパイルできないと思います。
COBOL74用に作ったプログラムは、一応COBOL85コンパイラの通常(ネイティブ)のモードでもコンパイルは通ると思います。ただ、COBOL74とCOBOL85では仕様に一部差異があるので、動かしてみるとちょっと動きが変になるということがあります。

というわけで、一般的には、COBOL4用に作ったプログラムはCOBOL4互換モードで、COBOL74用に作ったプログラムはCOBOL74互換モードで、COBOL85用に作ったプログラムはCOBOL85のモードで、コンパイルすることになります。

COBOL85用に作ったプログラムは、COBOL85のコンパイラ(COBOL85ネイティブのモード)でコンパイルします。

COBOL74用に作ったプログラムは、現状2つの方法があります。1つはCOBOL85のコンパイラでCOBOL74互換モードを指定してコンパイルする方法、もう一つはTモードCOBOLという製品のコンパイラを使用する方法です。
COBOL85のCOBOL74互換モードを使用する方法は、すでにCOBOL85の製品を持っていればいいので、一般的にはこの手段を用います。
TモードCOBOLは、簡単に言うと(無印)COBOLの後継製品で、COBOL74用のコンパイラになります。別に購入しないといけないので、よぽどでないとこちらは使用しません。

COBOL4用に作ったプログラムは、TモードCOBOLのコンパイラを使ってCOBOL4互換モードでコンパイルします。
COBOL85にはCOBOL4モードはありません。TモードCOBOLを入手する必要があります。
ちなみにCOBOL4という製品はとても昔(1990年頃?)に販売終了していて今は使えません。

前に書いたように、プログラムを動かすだけならどのプログラムも最新のA-VX02で動きます。
WindowsではWindowsのバージョンが上がったら、そのWindows用にビルドし直し、というようなことをすることもあるようですが、NECのオフコンではその必要はありません。
例えば1980年頃のITOS-4(V)というNECのオフコンOS+COBOL4のコンパイラで作ったロードモジュール(Windowsでいるexeのようなもの)は、そのまま再コンパイルなしにA-VX02上で動かすことができます。(逆は動作保証されていない。例えばA-VX02 R2.0で作ったロードモジュールをA-VX02 R1.0で動かす。なぜなら、A-VX02 R2.0で作ったロードモジュールには、A-VX02 R2.0で新た組み込まれた機能がリンクされている場合がある。この機能は当然A-VX02 R1.0では組み込まれていないので、この機能の部分が動いたときにエラーになる。)

独自部分について

NECのオフコン用のCOBOLには、独自に拡張された部分がたくさんあります。このため、NECオフコン用のCOBOLプログラムをそのままWindowsやLinux用のオープン系COBOLや富士通やマイクロフォーカスなどのCOBOLに持っていこうとしても、コンパイルでエラーになったり、コンパイルが通っても実際に実行してみると動きが変になったりすることがほとんどです。

どこの部分がNECオフコン独自な部分なのか、それはNEC正式のマニュアルである、COBOL85言語説明書を見ればわかります。説明書の文章のなかに「NEC拡張機能」「A−VX拡張機能」と書かれた部分があります。そこが独自部分です。
NECオフコン用に作られたCOBOLプログラムをオープン系COBOLに移行する場合、まずはその「NEC拡張機能」「A−VX拡張機能」と書かれた部分に注意する必要がある、ということです。
例えば、COBOL85言語説明書には次のように書いてあります。

NEC拡張機能の例
NEC拡張機能(データの表現形式)
 USAGE IS COMPUTATIONAL-1、USAGE IS COMPUTATIONAL-2およびUSAGE IS COMPUTATIONAL-3は
 NECの拡張機能である。

次はA−VX拡張機能の例
A−VX拡張機能(初期値)
 本コンパイラでは、VALUE句のないデータ項目の初期値は、次のようになる。
〆邏半貊蠕
 作業場所節内のVALUE句を定義したデータ項目の領域以外はすべて”40”(16)となり、
 空バイトも全て”40”(16)となる。

と書いてありますが、ここが「このあたりは考慮が必要かな」、という判断点になります。
この他にも「NEC拡張機能」「A−VX拡張機能」と書いてある箇所は非常にたくさんあるので、まず最初に見ておく必要があります。(「最初に」と書いたのは、説明書に説明のない、隠されたNEC独自の部分がたくさんあるからです。)