1.1.2 コーディング規約

<この項の構成>
(1) コーディング上の注意
(2) 名称の付け方の注意
(3) 終了のしかたについて
(4) Windowsを使う場合

(1) コーディング上の注意

OpenTP1で使うUAPをCOBOL言語でコーディングするときは,COBOL85またはCOBOL2002の様式に従ってください。OpenTP1の機能を使うときは,OpenTP1のライブラリにあるCOBOL-UAP作成用プログラムを使います。

さらに,システムコールや任意のプログラムのライブラリも使えますが,コーディング時には,UAPの移植性を高めるため,OSで標準的に提供している命令文やシステムコールを使うことをお勧めします。

システムコールや任意のプログラムのライブラリを使うUAPをCOBOL言語で作成するときは,次のことに注意してください。

  1. UAPでシグナルを使うときは,SIGILLやSIGBUSなどシグナルのデフォルト動作がコアファイルを作成するタイプのシグナルハンドラは登録しないでください。これらのシグナルハンドラを登録すると,プログラムが異常終了してもコアファイルが作成されないため,トラブルシュートができない場合があります。
  2. UAPでシグナルを使うときは,シグナルハンドラからはOpenTP1のライブラリにある関数に該当するCOBOL-UAP作成用プログラムは使わないでください。
  3. 次のシステムコールは使わないでください。
    • chdir(カレントワーキングディレクトリを変更)
  4. CBLDCRPC('OPEN ')を呼び出したあとには,次のシステムコールは使わないでください。
    • fork(新プロセスの生成)
    • exec(ファイルの実行)
    • system(シェルコマンドの発行)
  5. サービスプログラム間にわたるジャンプ(GOTO文など)は使わないでください。
  6. ほかのプログラムのライブラリを使うときは,XlibやOSF/Motifなど,イベント駆動型のディスパッチング制御をするプログラムは使えません。
  7. COBOL言語でUAPを作成する場合,一意名1などのデータ領域は,必ず偶数番地から始まるように設定してください。一意名1などのデータ領域の先頭アドレスが奇数番地だとバスエラーが発生します。
    例えば,CBLDCMCFで使用する一意名3を配列で定義し,送信データが奇数バイトで,かつ構造体に"SYNC"の指定がない(境界調整されていない)場合,配列の2件目のデータをCBLDCMCFの引数に設定すると,関数処理中にバスエラーが発生します。
  8. COBOL言語で作成したC系およびV系MCFイベント用MHPで受け取るMCFイベント情報領域には,C言語用のMCFイベント情報の予備領域長に加えて2以上の予備領域を設定してください。
  9. データ部(DATA DIVISION)の2進形式のデータ項目にPICTURE句で指定したけた数を超える値を指定する場合(CBLDCRTS('RTSPUT ')の一意名2にデータ名C PIC S9(9) COMP VALUE2147483647を指定するなど),コンパイル時にエラーが発生します。この場合,次のどちらかで対処してください。
    • データ部(DATA DIVISION)では値を指定しないで,手続き部(PROCEDURE DIVISION)でMOVE文などによって値を指定するようにコーディングする。
    • 2進形式のデータ項目に指定できる初期値を拡張するコンパイルオプション(COBOL85の場合:-Vx,COBOL2002の場合:-BinExtend)を指定して,コンパイルする。
  10. CBLDCRPC('OPEN ')を呼び出したあとには,UAPプロセスでオープンするファイルディスクリプタの最大数を変更しないでください。変更した場合の動作は保証できません。

OSがHP-UXの場合,リンケージ時のバインドモードには必ず "immediate"を指定してください。"immediate"以外のバインドモードで作成した実行形式ファイルをOpenTP1のUAPとして使った場合,システムの動作は保証しません。作成したUAPのバインドモードが"immediate"かどうかは,OSのchatrコマンドで確認してください。

(2) 名称の付け方の注意

ユーザがコーディングする変数名や定義名などは,先頭に何文字かのプレフィックスを付加することをお勧めします。OSやOpenTP1などと名称が重複した場合の動作は保証しません。

(a) サービスプログラム名プログラム名入り口名

サービスプログラムの名称は,20文字以内の長さで,先頭が英字で始まる英数字を付けます。サービスプログラム名,プログラム名,入り口名には,次の名称は使わないでください。

(b) 外部変数名

外部変数名には,次の名称は使わないでください。ただし,このマニュアルの記述に従って使う場合を除きます。

(3) 終了のしかたについて

OpenTP1から直接起動されるプログラム(メインプログラム)は,STOP RUNで終了して,サービスプログラムは,EXIT PROGRAMで終了してください。メインプログラムをSTOP RUNを出さないで終了すると,COBOLのカウント情報などが出力されません。

(4) Windowsを使う場合

OpenTP1(TP1/LiNK)をWindowsで使う場合に,UAPをコンパイル,リンケージするときは,Windowsで使うCOBOLコンパイラの仕様に従ってください。