サイトのロゴ opensource COBOL Programmer’s Guide

前へ/目次/次へ

8.3. 組み込みサブルーチン

8.3.1. 「名前による呼び出し」ルーチン

opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_…)またはACUCOBOL(C$ …)で使用可能なルーチンと一致することを目的としている。

これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。

次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて6.7で説明している。

8.3.1.1. CALL “C$CALLEDBY” USING program-name GIVING status

このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。

program-nameには呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。

statusは次のいずれかの値を受け取る。

   
1 ルーチンは他のCOBOLプログラムによって呼出された。
0 ルーチンは主プログラムである。呼出しプログラムは存在しない。
-1 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。

8.3.1.2. CALL “C$CHDIR” USING directory-path, result

このルーチンは、directory-path(英数字定数または一意名)を現在のディレクトリにする。

操作の戻り値は、result引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。

ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。

8.3.1.15章CBL_CHANGE_DIRを参照

8.3.1.3. CALL “C$COPY” USING src-file-path, dest-file-path, 0

このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、src-file-pathdest-file-pathにファイルをコピーする。

どちらのファイルパス引数も、英数字定数または一意名にすることができる。

第3引数は必須ではあるが、使用されない。

ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。

8.3.1.18章CBL_COPY_FILEを参照

8.3.1.4. CALL “C$DELETE” USING file-path, 0

このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。

第2引数は必須ではあるが、使用されない。

ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。

8.3.1.22章CBL_DELETE_FILEを参照

8.3.1.5. CALL “C$FILEINFO” USING file-path, file-info

このルーチンを使用すると、file-path引数(英数字定数または一意名)として指定されたファイルサイズ38と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義されるfile-info引数に返される。

01 File-Info.
   05 File-Size-In-Bytes   PIC 9(18) COMP.
   05 Mod-YYYYMMDD         PIC 9(8)  COMP. *> Modification Date
   05 Mod-HHMMSS00         PIC 9(8)  COMP. *> Modification Time

変更時刻の小数点以下2桁は常に0である。

サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。

8.3.1.16章CBL_CHECK_FILE_EXISTを参照

8.3.1.6. CALL “C$JUSTIFY” USING data-item, “justification-type”

C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。justification-type引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。

8.3.1.7. CALL “C$LIST-DIRECTORY” USING item-1, item-2, item-3

このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。C$LIST-DIRECTORYは、すべてのオペレーティングシステムのために機能する一つの方法を提供する。

与えられたディレクトリにあるファイルの名前を取得することを可能にする。3つの明白な操作によってこれを成し遂げる。最初の操作は指定されたディレクトリを開き、そして、ファイルのリストを作成する。第2の操作で1つずつリストにあるファイル名を返し、第3の操作でディレクトリを閉じ、ルーチンによって使われた全てのメモリを解放する。

   
item-1が1の時 指定されたディレクトリを開く。item-2にはDIRECTORY、item-3にはPATTERNを設定する。
item-1が2の時 開かれたディレクトリからファイル名を読み取る。item-2にはMYDIR、item-3にはFILENAMEを設定する。
item-1の3の時 他の操作によって使用された資源を解放する。メモリ漏洩を回避するために、呼ばれなければならない。item-2にはLISTDIR-NEXT操作で設定するデータ項目と同じものを設定する。
    01 PATTERN      PIC X(5) VALUE "*".
    01 DIRECTORY    PIC X(256) VALUE
    "./list".
    01 FILENAME     PIC X(30).
    01 MYDIR        PIC 9(8) COMP-5.
    PROCEDURE      DIVISION.
        CALL "C$LIST-DIRECTORY" USING 1,
                                      DIRECTORY,
                                      PATTERN
        END-CALL.
        MOVE RETURN-CODE TO MYDIR.
        CALL "C$LIST-DIRECTORY" USING 2,
                                      MYDIR,
                                      FILENAME
        END-CALL.
        PERFORM WITH TEST AFTER UNTIL FILENAME = SPACES
          DISPLAY FUNCTION TRIM(FILENAME)
          CALL "C$LIST-DIRECTORY" USING 2,
                                        MYDIR,
                                        FILENAME
          END-CALL
        END-PERFORM.
        CALL "C$LIST-DIRECTORY" USING 3, MYDIR
        END-CALL.

8.3.1.8. CALL “C$MAKEDIR” USING dir-path

このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、dir-path引数(英数字定数または一意名)として指定される。

指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。

RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。

8.3.1.19章CBL_CREATE_DIRを参照

8.3.1.9. CALL “C$NARG” USING arg-count-result

C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目arg count-resultに返す。

メインプログラムからCALLされた場合、戻り値は常に0になる。

6.1.7章NUMBER-OF-CALL-PARAMETERSを参照

8.3.1.10. CALL “C$PARAMSIZE” USING argument-number

このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。

サイズは、RETURN-CODE特殊レジスタに返される。

指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。

8.3.1.11. CALL “C$SLEEP” USING seconds-to-sleep

C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。

1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。

8.3.1.33章CBL_OC_NANOSLEEPを参照

8.3.1.12. CALL “C$TOLOWER” USING data-item, BY VALUE convert-length

このルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を小文字に変換する。

convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。

convert-lengthが負またはゼロの場合、変換は実行されない。

8.3.1.38章CBL_TOLOWERを参照

8.3.1.13. CALL “C$TOUPPER” USING data-item, BY VALUE convert-length

C$TOUPPERサブルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を大文字に変換する。

convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。

convert-lengthが負またはゼロの場合、変換は実行されない。

8.3.1.39章CBL_TOUPPERを参照

8.3.1.14. CALL “CBL_AND” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、ビット単位のAND演算を項目-1と項目-2の左端の8*byte-lengthの位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「AND」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 0
0 1 0
1 0 0
1 1 1

項目-2の8*byte-length ポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.15. CALL “CBL_CHANGE_DIR” USING directory-path

このルーチンは、directory-path(英数字定数または一意名)を現在のディレクトリにする。

ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。

操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。

8.3.1.2章C$CHDIRを参照

8.3.1.16. CALL “CBL_CHECK_FILE_EXIST” USING file-path, file-info

このルーチンは、file-path引数(英数字定数または一意名)として指定されたファイルサイズ39と、ファイルが最後に変更された日付/時刻を取得できる。この情報は、次の16バイト領域として定義されるfile-info引数に返される。

01 Argument-2.
    05 File-Size-In-Bytes       PIC 9(18) COMP.
    05 Mod-DD                   PIC 9(2) COMP.       *> Modification Time
    05 Mod-MO                   PIC 9(2) COMP.
    05 Mod-YYYY                 PIC 9(4) COMP.       *> Modification Date
    05 Mod-HH                   PIC 9(2) COMP.
    05 Mod-MM                   PIC 9(2) COMP.
    05 Mod-SS                   PIC 9(2) COMP.
    05 FILLER                   PIC 9(2) COMP.       *> This will always be 00

サブルーチンが成功すると、RETURN-CODEには0の値が返され、ファイルで必要な統計を取得できないと、RETURN-CODEには35の値が返される。2つ未満の引数を指定すると、RETURN-CODEには128の値が生成される。

8.3.1.5章C$FILEINFOを参照

8.3.1.17. CALL “CBL_CHANGE_DIR” USING directory-path

CBL_CLOSE_FILEサブルーチンは、CBL_OPEN_FILEまたはCBL_CREATE_FILEサブルーチンによって既に開かれているファイルを閉じる。

file-handle引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前にCBL_FLUSH_FILEが暗黙的に実行される。

サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。

8.3.1.18. CALL “CBL_COPY_FILE” USING src-file-path, dest-file-path

このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、src-file-pathdest-file-pathにファイルをコピーする。

どちらのファイルパス引数も、英数字定数または一意名にすることができる。

ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。

8.3.1.3章C$COPYを参照

8.3.1.19. CALL “CBL_CREATE_DIR” USING dir-path

このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、dir-path引数(英数字定数または一意名)として指定される。

指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。

RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。

8.3.1.8章C$MAKEDIRを参照

8.3.1.20. CALL “CBL_CREATE_FILE” USING file-path, 2, 0, 0, file-handle

CBL_CREATE_FILEサブルーチンは、file-path引数を使用して指定された新しいファイルを作成し、CBL_WRITE_FILEで使用できるファイルとして出力用に開く。

引数2、3、および4は、示されている定数値としてコーディングする必要がある。40

後続のCBL_WRITE_FILEまたはCBL_CLOSE_FILE呼び出しに対して、file handle(PIC X(4) USAGE COMP-X)が返される。

サブルーチンの成功または失敗はRETURN-CODEレジスタに報告され、RETURN-CODEで-1の値は無効な引数、0の値は成功を示す。

8.3.1.34章CBL_OPEN_FILEを参照

8.3.1.21. CALL “CBL_DELETE_DIR” USING dir-path

CBL_DELETE_DIRを使って空のディレクトリを削除する。

唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。

指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。

RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。

8.3.1.22. CALL “CBL_DELETE_FILE” USING file-path

このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。

ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。

8.3.1.4章C$DELETEを参照

8.3.1.23. CALL “CBL_ERROR_PROC” USING function, program-pointer

このルーチンは、一般的なエラー処理ルーチンを登録する。

functionの引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0はエラー手続きを登録(「インストール」)、値1は以前にインストールされたエラー手続きを登録解除(「アンインストール」)することを意味する。

program-pointerは、エラー手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。

成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。

カスタムエラーハンドラルーチンがある場合は、ランタイムエラー条件が発生したときにトリガーされる。ハンドラ内のコードが実行され―EXIT PROGRAMまたはGOBACKが発行されると―システム標準のエラー処理ルーチンが実行される。

一度に有効にできるユーザ定義のエラー手続きは1つだけである。

エラー手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでランタイムエラーが発生したときにトリガーされる。エラー手続きがサブプログラムによって定義された場合は、エラー手続きの実行時にそのプログラムをロードする必要がある

エラー手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。

以下は、エラー手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果は、ご覧の通り、エラーハンドラのメッセージに続いて標準のopensource COBOLメッセージが表示される。

    IDENTIFICATION DIVISION.
     PROGRAM-ID. demoerrproc.
     ENVIRONMENT DIVISION.
     DATA DIVISION.
      WORKING-STORAGE SECTION.
      78 Exit-Proc-Install          VALUE 0.
      01 Current-Date               PIC X(8).
      01 Current-Time               PIC X(8).
      01 Exit-Proc-Address          USAGE PROCEDURE-POINTER.
      01 Formatted-Date             PIC XXXX/XX/XX.
      01 Formatted-Time             PIC XX/XX/XX.
     PROCEDURE DIVISION.
     000-Register-Err-Proc.
         SET Err-Proc-Address TO ENTRY "999-Err"
         CALL "CBL_ERROR_PROC"
              USING Err-Proc-Install, Err-Proc-Address
         END-CALL
         IF RETURN-CODE NOT = 0
             DISPLAY 'Error: Could not' &
                     'register Error Procedure'
         END-IF
         .
     099-Now-Test-Err-Proc.
         CALL "Tilt" END-CALL
         GOBACK
         .
     999-Err-Proc.
         ENTRY "999-Err"
         DISPLAY
             '** A Runtime Error Has Occurred **'
         END-DISPLAY
         ACCEPT
             Current-Date FROM DATE YYYYMMDD
         END-ACCEPT
         ACCEPT
             Current-Time FROM TIME
         END-ACCEPT
         MOVE Current-Date TO Formatted-Date
         MOVE Current-Time TO Formatted-Time
         INSPECT Formatted-Time REPLACING ALL '/' BY ':'
         DISPLAY
             '*** ' Formatted-Date ' ' Formatted-Time ' ***'
         END-DISPLAY
         GOBACK
         .

プログラムの出力結果は・・・

** A Runtime Error Has Occurred **
    *** 2009/08/28 10:35:10 ***
libcob: Cannot find module 'Tilt'

8.3.1.24. CALL “CBL_EXIT_PROC” USING function, program-pointer

このルーチンは、一般的な終了処理ルーチンを登録する。

functionの引数は、値が0または1の数字定数または32ビットのバイナリCOMP-5データ項目(例えばUSAGE BINARY-LONG)でなければならない。値0は終了手続きを登録(「インストール」)、値1は以前にインストールされた終了手続きを登録解除(「アンインストール」)することを意味する。

program-pointerは、終了手続きのアドレスを含むUSAGE PROGRAM-POINTERデータ項目でなければならない。このようなデータ項目を入力する方法については、6.39.2章で説明している。

成功(0)または失敗(0以外)の結果は、RETURN-CODEレジスタに返される。

「STOP RUN」またはそれに相当するもの(つまりメインプログラムで実行される「GOBACK」)が実行されると、終了手続きがトリガーされる。終了手続きコードが実行され、EXIT PROGRAMまたはGOBACKが発行されると、システム標準のプログラム終了ルーチンが実行される。

一度に有効にできるユーザ定義の終了手続きは1つだけである。

終了手続きはメインプログラムまたはサブプログラムによって定義できるが、登録された場所に関係なくプログラムコンパイルユニット全体に適用され、実行可能プログラムのどこかでSTOP RUNが実行されたときにトリガーされる。終了手続きがサブプログラムによって定義された場合、終了手続きの実行時にそのプログラムをロードする必要がある

終了手続きは、EXIT PROGRAMまたはGOBACKを使用して終了する必要がある。

以下は、終了手続きを登録するopensource COBOLプログラムのサンプルである。プログラムの出力結果も示している。

    IDENTIFICATION DIVISION.
      PROGRAM-ID. demoexitproc.
      ENVIRONMENT DIVISION.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      78 Exit-Proc-Install          VALUE 0.
      01 Current-Date               PIC X(8).
      01 Current-Time               PIC X(8).
      01 Exit-Proc-Address          USAGE PROCEDURE-POINTER.
      01 Formatted-Date             PIC XXXX/XX/XX.
      01 Formatted-Time             PIC XX/XX/XX.
      PROCEDURE DIVISION.
      000-Register-Exit-Proc.
          SET Exit-Proc-Address TO ENTRY "999-Exit"
          CALL "CBL_EXIT_PROC"
              USING Exit-Proc-Install, Exit-Proc-Address
          END-CALL
          IF RETURN-CODE NOT = 0
              DISPLAY 'Error: Could not register Exit Procedure'
          END-IF
      099-Now-Test-Exit-Proc.
          DISPLAY
              'Executing a STOP RUN...'
          END-DISPLAY
          GOBACK
          .
      999-Exit-Proc.
          ENTRY "999-Exit"
          DISPLAY
              '*** STOP RUN has been executed ***'
          END-DISPLAY
          ACCEPT
              Current-Date FROM DATE YYYYMMDD
          END-ACCEPT
          ACCEPT
              Current-Time FROM TIME
          END-ACCEPT
          MOVE Current-Date TO Formatted-Date
          MOVE Current-Time TO Formatted-Time
          INSPECT Formatted-Time REPLACING ALL '/' BY ':'
          DISPLAY
              '*** ' Formatted-Date ' ' Formatted-Time ' ***'
          END-DISPLAY
          GOBACK
          .

プログラムの出力結果は・・・

** A Runtime Error Has Occurred **
    *** 2009/08/28 10:35:10 ***
libcob: Cannot find module 'Tilt'

8.3.1.25. CALL “CBL_EQ” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、項目-1と項目-2の左端の8*byte-lengthの位置同士のビットが等しいかどうか、ビット単位のテストを実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「EQ」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 1
0 1 0
1 0 0
1 1 1

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。 結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.26. CALL “CBL_FLUSH_FILE” USING file-handle

このサブルーチンをMicro Focus COBOLでCALLすると、file-handleが引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。

このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。

8.3.1.27. CALL “CBL_GET_CURRENT_DIR” USING BY VALUE 0, BY VALUE length, BY REFERENCE buffer

現在のディレクトリの完全修飾パス名が取得され、指定されたbufferにパス名のlength文字が保存される。

第1引数は使用されないが、BY VALUEで指定する必要がある。

length引数はBY VALUEで指定する必要がある。

buffer引数はBY REFERENCEで指定する必要がある。

length引数(数字定数またはデータ項目)に指定する値は、buffer引数の長さを超えてはならない。

length引数に指定された値がbuffer引数の長さよりも小さい場合、現在のディレクトリパスは左寄せされ、bufferの最初のlengthバイト内に空白が埋められる―そのポイント以降のbuffer内のバイトは変更されない。

ルーチンが成功すると、0の値がRETURN-CODEレジスタに返される。引数(負または0lengthなど)が原因でルーチンが失敗した場合、RETURN-CODEの値は128になる。第1引数の値がゼロ以外の場合、ルーチンはRETURN-CODEが129で失敗する。

8.3.1.28. CALL “CBL_IMP” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、ビット単位の「包含」演算を項目-1と項目-2の左端の8*byte-lengthの位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「IMP」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 1
0 1 1
1 0 0
1 1 1

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.29. CALL “CBL_NIMP” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、ビット単位の否定「包含」演算を項目-1と項目-2の左端の8*byte-lengthの位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「NIMP」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 0
0 1 0
1 0 1
1 1 0

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.30. CALL “CBL_NOR” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、ビット単位の否定OR演算を項目-1と項目-2の左端の8*byte-lengthの位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「NOR」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 1
0 1 0
1 0 0
1 1 0

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.31. CALL “CBL_NOT” USING item-1, BY VALUE byte-length

このサブルーチンは、項目-2の左端の8*byte-lengthのビットを「反転」し、結果のビット文字列を項目-2に格納する。

項目-2はデータ項目である必要があり、項目-2の長さは少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「NOT」プロセスを示している。

古い引数2ビット 新しい引数2ビット
0 1
1 0

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.32. CALL “CBL_OC_KEISEN” USING item-1

CBL_OC_KEISENは、画面に縦・横の罫線を表示することができる。

item-1として次の集団項目を定義する。

    01 KEISEN.
      02 KEI-CMD   PIC 9(1) COMP-X.
      02 KEI-LINE  PIC 9(2) COMP-X.
      02 KEI-COL   PIC 9(2) COMP-X.
      02 KEI-LNG1  PIC 9(2) COMP-X.
      02 KEI-LNG2  PIC 9(2) COMP-X.
      02 KEI-COLOR PIC 9(2) COMP-X.
      02 KEI-PRN   PIC 9(2) COMP-X.

各項目の意味を以下に示す。

   
KEI-CMD 0-初期設定(画面消去)
1-アンダーライン(下)
2-オーバーライン(上)
3-バーティカルライン(左)
4-バーティカルライン(右)
5-ボックス
6-バーティカル(左)とアンダーライン(下)
9-終了処理
KEI-LINE 開始ライン(1~24)
KEI-COL 開始カラム(1~80)
KEI-LNG1 線長
 横線(1~80) KEI-CMD:1、2、5
 縦線(1~24) KEI-CMD:3、4
KEI-LNG2 線長
 縦線(1~24) KEI-CMD:5
KEI-COLOR 線の色
 0-黒 1-青 2-緑 3-青緑
 4-赤 5-深紅 6-茶 7-白
 モノクロ端末では、白に設定される。
KEI-PTN 線種
 1-実線 2-破線 3-点線
 4-一点鎖線 5-二点鎖線

8.3.1.33. CALL “CBL_OC_NANOSLEEP” USING nanoseconds-to-sleep

CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。

nanoseconds-to-sleep引数は数字定数またはデータ項目である。

1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、nanoseconds-to-sleepの値に250000000を設定する。

8.3.1.11章C$SLEEPを参照

8.3.1.34. CALL “CBL_OPEN_FILE” file-path, access-mode, 0, 0, handle

このルーチンは、CBL_WRITE_FILEまたはCBL_READ_FILEで使用できる既存のファイルを開く。

file-path引数は、英数字定数またはデータ項目である。

access-mode引数は、PIC X USAGE COMP-X(またはUSAGE BINARY-CHAR)で定義された数字定数またはデータ項目である。次のようにファイルの使用方法を指定する。

第3、第4引数ではロックモードとデバイス仕様を指定するが、opensource COBOLには実装されていない(少なくとも現時点では)―それぞれに0を指定する。

最後の引数―handle―はPIC X(4) USAGE COMP-X項目で、ファイルへのハンドルを受け取る。ハンドルは特定のファイルを参照するために、他のバイトストリーム関数で使用される。

RETURN-CODE -1の値は無効な引数、0の値は成功を示す。35の値はファイルが存在しないことを意味する。

8.3.1.20章CBL_CREATE_FILEを参照

8.3.1.35. CALL “CBL_OR” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、ビット単位のOR演算を項目-1と項目-2の左端の8*byte-lengthの位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「OR」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 0
0 1 1
1 0 1
1 1 1

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.36. CALL “CBL_READ_FILE” USING handle, offset, nbytes, flag, buffer

このルーチンは、handleで定義されたファイルから指定されたbufferに、バイト番号offsetで始まるnbytesのデータを読み取る。

handle引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。

offset引数(PIC X(8) USAGE COMP-X)は、読み取るファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。

nbytes引数(PIC X(4) USAGE COMP-X)は、読み取るバイト数(最大値)を指定する。

flags引数が128として指定されている場合、ファイルのサイズ(バイト単位)が完了時にファイルオフセット引数(引数2)に返される。41それ以外に有効なflagsの値は0だけである。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。

完了時に、読み取りが成功した場合はRETURN-CODEが0に設定され、「ファイルの終わり」条件が発生した場合は10に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。

8.3.1.37. CALL “CBL_RENAME_FILE” USING old-file-path, new-file-path

このサブルーチンを使用してファイル名を変更できる。

old-file-pathで指定されたファイルは、new-file-pathで指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。

このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初にold-file-pathnew-file-pathにコピーし、次にold-file-pathを削除するという2段階の順序と考えられる。

ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。

8.3.1.38. CALL “CBL_TOLOWER” USING data-item, BY VALUE convert-length

このルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を小文字に変換する。

convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。

convert-lengthが負またはゼロの場合、変換は実行されない。

8.3.1.12章C$TOLOWERを参照

8.3.1.39. CALL “CBL_TOUPPER” USING data-item, BY VALUE convert-length

C$TOUPPERサブルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を大文字に変換する。

convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。

convert-lengthが負またはゼロの場合、変換は実行されない。

8.3.1.13章C$TOUPPERを参照

8.3.1.40. CALL “CBL_WRITE_FILE” USING handle, offset, nbytes, 0, buffer

このルーチンは、指定されたbufferからhandleで定義されたファイルに、nbytesのデータをバイト番号offsetから書き込む。

handle引数(PIC X(4) USAGE COMP-X)は、CBL_OPEN_FILEへの事前の呼び出しによって取り込まれている必要がある。

offset引数(PIC X(8) USAGE COMP-X)は、書き込まれるファイルの最初のバイト位置を定義する。ファイルの最初のバイトは、バイトオフセット0である。

nbytes引数(PIC X(4) USAGE COMP-X) は、書き込まれるバイト数(最大値)を指定する。 唯一の許容値またはflags引数は0である。この引数は、数字定数またはPIC X USAGE COMP-Xデータ項目として指定される。

完了時に、書き込みが成功した場合はRETURN-CODEが0に設定され、I/Oエラー条件が発生した場合は30に設定される。RETURN-CODEの値が-1の場合、サブルーチン引数に問題が確認されたことを示す。

8.3.1.41. CALL “CBL_XOR” USING item-1, item-2, BY VALUE byte-length

このサブルーチンは、ビット単位の排他的OR演算を項目-1と項目-2の左端の8*byte-lengthの位置同士のビットで実行し、結果のビット文字列を項目-2に格納する。

項目-1は英数字定数またはデータ項目で、項目-2はデータ項目である必要がある。項目-1と項目-2の長さは、少なくとも8*byte-lengthでなければならない。

byte-lengthは数字定数またはデータ項目であり、BY VALUEで指定する必要がある。

下の真理値表は「XOR」プロセスを示している。

引数1ビット 引数2ビット 新しい引数2ビット
0 0 0
0 1 1
1 0 1
1 1 0

項目-2の8*byte-lengthポイントの後のビットは影響を受けない。

結果のゼロがRETURN-CODEレジスタに戻される。

8.3.1.42. CALL “SYSTEM” USING command

このサブルーチンは、指定されたcommand(英数字定数またはデータ項目)をコマンドシェルに送信する。

CALLをSYSTEMに発行するopensource COBOLプログラムに従属するシェルが開かれる。

コマンドからの出力 (コマンドが存在する場合)は、opensource COBOLプログラムが実行されたコマンドウィンドウに表示される。

Unixシステムでは、シェル環境は標準のシェルプログラムを使用して構築される。これは、Cygwin Unixエミュレータで作成された opensource COBOLビルドを使用する場合も同様である。

ネイティブWindows Windows/MinGWビルドでは、シェル環境は使用しているWindowsのバージョンに適したWindowsコンソールウィンドウコマンドプロセッサ(通常は「cmd.exe」)となる。

実行されたコマンドからの出力をトラップしてopensource COBOLプログラム内で処理するには、パイプ(>)を使用してコマンド出力を一時ファイルに送信し、制御が戻ったらプログラム内から読み取る。


38 ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
39 ファイルサイズ情報は、使用している特定のopensource COBOLビルド/オペレーティングシステムの組み合わせでは利用できず常にゼロとして返される場合がある。
40 CBL_CREATE_FILECBL_OPEN_FILEルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
41 すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。

ページトップへ