Recent Entries
Archives
Search


Links
Powered by
Movable Type 2.64

2009年07月16日

OpenCOBOLへの移植

某所で某メーカー系COBOLソースをOpenCOBOLへ移植してるのですが(´ー`)
色々と困った点など。

とりあえず現在はOpenCOBOLには通信関連の機能(COMMUNICATION)は実装されてませんから、コレは何らか代替手段を使う必要(たとえばcob_perlを使用してperlを使った外部通信モジュールの実装など)がありまして、ソースを1対1対応で書き換えるのが難しいというのがあります。ただし、汎用機からLinux上のOpenCOBOLへ持って行くソースでは、そのような機能はほとんど使わないため今のところ問題とはなっていないのですが。同様に、印刷関連についてもメーカー系COBOLではかなり拡張されていますので、これは以前にも書いておりましたが、拡張エスケープシーケンスと仮想ラインプリンタの組み合わせで対応してたりします。

メーカー系COBOLのソースを3000本程度眺めまして、COMMUNICATION、他印刷関連のキーワードが含まれるソース1100本程を除外した残りの1900本のうち1100本についてはほとんど自動的に変換するスクリプトを作成しましたが、残りの800本程については色々と面倒な問題が残っています。

たとえば、項目名に漢字、半角カナが使用されている物もあります。これは処理系(OpenCOBOL)のパーサへのパッチで対応出来そうです。今のところプログラム名(PROGRAM-ID)に漢字、半角カナを使用した物は無いのでいくらか救われています。OpenCOBOLは仕組み上COBOLソースを一旦Cへ変換しgcc等コンパイラを使用してバイナリを生成します。このときPROGRAM-IDは関数名として展開されるため、ここが漢字、半角カナになっている場合は別途変換規則を作ってやる必要があります。項目名は内部的には全く別の連番が降られた変数名(または配列)へ変換されるため、この問題は発生しません。

その他、ファイル関連で汎用機で使えるRDB、VSAS等はOpenCOBOLでは実装されていませんので、vbISAMなど利用したソースへ置き換える必要があります。このときファイル名について汎用機ではバッチからパラメータとして引き渡すことが出来るように、COBOLの処理系が設計されていますが、OpenCOBOLの場合は環境変数なり何かから取り込む必要があります。幸いにしてそのような引き渡しを行っている箇所はファイル名に関する部分だけのようでしたので、これはコマンド起動直前に環境変数へパラメータをセットすることにして対応出来そうです。また、ファイル共有やポインタの引き継ぎに関してBASEDやEXTERNALなどのキーワードが使用されていますが、OpenCOBOLではこれらは実装されおらず、緩い制限にて使用可能のため単純にキーワードを取り去ることで流用可能でした。

COMP-1、COMP-2等の変数についてはメーカー系COBOLによって実装内容は様々ですが、某メーカーCOBOLではCOMP-1が2byteバイナリ整数、COMP-2が4byteバイナリ整数でしたのでそれぞれBINARY-SHORT、COMP-5(またはCOMP-X)にて置き換えてみました。とりあえずバイト長をあわせつつということですが、COMP-5、COMP-5についてx86_64上では8byteとして扱われるという噂(ためしてません)も在りましたので、別のもっと良い代替手段を使う必要があります。

その他FILEに関してLASTが実装されていない等在りますが、当方ではISAMではなくてMySQLへの置き換えを進めておりますので、ORDERを逆にしてやるだけで対応出来ています。

また元のCOBOLソースの定義体自体に問題があったり、長さが異なる項目へのMOVEなども既存ソースには散見されましたので、MOVE用のC言語コードを出力する段でチェックしてwarningとして出力するようにcobcを改造しつつ、安全なmemcpyを出力するようにしました。これでセグメンテーションフォルトも発生せず、問題となる箇所も見えるようになりましたので、元ソースの開発元へ問い合わせを行いながら作業を進めることが出来るようになりました。

その他にもたくさんたくさん在りますが、互換性も残しつつ元々のOpenCOBOLだけでは出来な胃部分については随時拡張していくことでかなりの工数を節約出来るようになっています。

Posted by minemaz at 2009年07月16日 11:12
トラックバック
このエントリーのトラックバックURL:
http://www.lancard.com/mt/mt-tb.cgi/469

Comments
Post a comment









Remember personal info?