opensource COBOLには多数の組み込みサブルーチンが含まれており、一般的にMicro Focus COBOL(CBL_…)またはACUCOBOL(C$ …)で使用可能なルーチンと一致することを目的としている。
これらのルーチンはすべて大文字表記で実行され、次の機能を実行することができる。
スリープ時間をナノ秒単位で指定して、プログラムを「スリープ状態」にする
警告:時間をナノ秒で表すが、Windowsシステムはミリ秒単位でしかスリープできない
次の表では様々な組み込みサブルーチンについて説明する。明示的に記載されている場合を除き、すべてのサブルーチン引数は必須である。値をRETURN-CODEに返すサブルーチンは、CALL文のRETURNING/GIVING句を利用して、選択したフルワードのバイナリCOMP-5データ項目に結果を返すことができる。これについて6.7で説明している。
このルーチンは、実行中のCOBOLプログラムを呼出したプログラム名を返す。呼出しプログラムが存在しないか未知の場合には、空白を戻す。
program-nameには呼出しプログラム名か、呼出しプログラムが存在しないか未知の場合には空白を含む。呼出されたプログラムがオブジェクトライブラリにあると、プログラムはPROGRAM-IDを戻す。オブジェクトライブラリにもないと、ディスク名が戻される。
statusは次のいずれかの値を受け取る。
1 | ルーチンは他のCOBOLプログラムによって呼出された。 |
0 | ルーチンは主プログラムである。呼出しプログラムは存在しない。 |
-1 | 呼出しプログラムは未知である。ルーチンはCOBOLプログラムから呼出されたのではない。 |
このルーチンは、directory-path(英数字定数または一意名)を現在のディレクトリにする。
操作の戻り値は、result引数(編集されていない数値一意名)とRETURN-CODE特殊レジスタの両方で返される。操作の戻り値は、0=成功または128=失敗のいずれかである。
ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のC$CHDIRが実行されるまで有効である。
8.3.1.15章―CBL_CHANGE_DIRを参照
このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、src-file-pathをdest-file-pathにファイルをコピーする。
どちらのファイルパス引数も、英数字定数または一意名にすることができる。
第3引数は必須ではあるが、使用されない。
ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。
8.3.1.18章―CBL_COPY_FILEを参照
このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。
第2引数は必須ではあるが、使用されない。
ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。
8.3.1.22章―CBL_DELETE_FILEを参照
このルーチンを使用すると、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を参照
C$JUSTIFYを使用して、英字、英数字、または数字の編集されたデータ項目を左、右、または中央揃えにする。justification-type引数は、実行する位置揃えのタイプを示す。その引数の値は次のように解釈される。
このルーチンは、選択されたディレクトリの内容をリストする。各オペレーティングシステムには、このタスクを果たす独特の方法がある。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.
このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、dir-path引数(英数字定数または一意名)として指定される。
指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。
RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。
8.3.1.19章―CBL_CREATE_DIRを参照
C$NARGを呼び出すサブルーチンに渡された引数の数を数値項目arg count-resultに返す。
メインプログラムからCALLされた場合、戻り値は常に0になる。
6.1.7章―NUMBER-OF-CALL-PARAMETERSを参照
このサブルーチンは、argument-numberパラメータ(数字定数またはデータ項目)を使用して指定されたサブルーチン引数のサイズ(バイト単位)を返す。
サイズは、RETURN-CODE特殊レジスタに返される。
指定された引数が存在しない場合、または無効なargument-numberが指定された場合、値には0が返される。
C$SLEEPは、指定された秒数だけプログラムをスリープ状態にする。seconds-to-sleep引数は、数字定数またはデータ項目である。
1未満のスリープ時間は0として解釈され、スリープ遅延なしですぐに戻る。
8.3.1.33章―CBL_OC_NANOSLEEPを参照
このルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を小文字に変換する。
convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。
convert-lengthが負またはゼロの場合、変換は実行されない。
8.3.1.38章―CBL_TOLOWERを参照
C$TOUPPERサブルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を大文字に変換する。
convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。
convert-lengthが負またはゼロの場合、変換は実行されない。
8.3.1.39章―CBL_TOUPPERを参照
このサブルーチンは、ビット単位の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レジスタに戻される。
このルーチンは、directory-path(英数字定数または一意名)を現在のディレクトリにする。
ディレクトリの変更は、プログラムが終了するまで(プログラムが再起動された場合は現在のディレクトリが自動的に復元される)、または別のCBL_CHANGE_DIR(またはC$CHDIR)が実行されるまで有効である。
操作の戻り値は、RETURN-CODE特殊レジスタに返され、0=成功または128=失敗のいずれかである。
8.3.1.2章―C$CHDIRを参照
このルーチンは、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を参照
CBL_CLOSE_FILEサブルーチンは、CBL_OPEN_FILEまたはCBL_CREATE_FILEサブルーチンによって既に開かれているファイルを閉じる。
file-handle引数(PIC X(4) USAGE COMP-Xデータ項目)によって定義されたファイルが出力用に開かれた場合、ファイルが閉じられる前にCBL_FLUSH_FILEが暗黙的に実行される。
サブルーチンが成功するとRETURN-CODEには0の値が返され、失敗すると-1の値が返される。
このサブルーチンは、「CP」(Unix)または「COPY」(Windows)コマンドを介して行われたかのように、src-file-pathをdest-file-pathにファイルをコピーする。
どちらのファイルパス引数も、英数字定数または一意名にすることができる。
ファイルのコピーに失敗した場合(例えば、ファイルまたは宛先ディレクトリが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。
8.3.1.3章―C$COPYを参照
このルーチンを使用すると新しいディレクトリを作成でき、ディレクトリ名は、dir-path引数(英数字定数または一意名)として指定される。
指定されたパスの最下層(最後)のディレクトリのみを作成でき、他のディレクトリは既に存在していなければならない。このサブルーチンは、「mkdir –p」(Unix)または「mkdir /p」(Windows)としては動作しない。
RETURN-CODEは操作の戻り値に設定され、0=成功または128=失敗のいずれかである。
8.3.1.8章―C$MAKEDIRを参照
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を参照
CBL_DELETE_DIRを使って空のディレクトリを削除する。
唯一の引数―dir-path(英数字定数または一意名)―は、削除するディレクトリ名である。
指定したパスの最下層レベル(最後)のディレクトリのみが削除され、そのディレクトリは空でなければならない。
RETURN-CODE は操作の戻り値に設定され、0=成功または128=失敗のいずれかである。
このルーチンは、「RM」(Unix)または「ERASE」(Windows)コマンドを使用して行われたかのように、file-path引数(英数字定数または一意名)で指定されたファイルを削除する。
ファイルの削除に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常に完了すると0に設定される。
8.3.1.4章―C$DELETEを参照
このルーチンは、一般的なエラー処理ルーチンを登録する。
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'
このルーチンは、一般的な終了処理ルーチンを登録する。
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'
このサブルーチンは、項目-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レジスタに戻される。
このサブルーチンをMicro Focus COBOLでCALLすると、file-handleが引数として指定された(出力)ファイルの未書込みメモリバッファがディスクに書き込まれる。
このルーチンはopensource COBOLでは機能しない。Micro Focus COBOL用に開発されたアプリケーションに互換性を提供するためだけに存在する。
現在のディレクトリの完全修飾パス名が取得され、指定された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で失敗する。
このサブルーチンは、ビット単位の「包含」演算を項目-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レジスタに戻される。
このサブルーチンは、ビット単位の否定「包含」演算を項目-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レジスタに戻される。
このサブルーチンは、ビット単位の否定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レジスタに戻される。
このサブルーチンは、項目-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レジスタに戻される。
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-二点鎖線 |
CBL_OC_NANOSLEEPは、指定されたナノ秒数だけプログラムをスリープ状態にする。
nanoseconds-to-sleep引数は数字定数またはデータ項目である。
1秒は10億ナノ秒であるため、プログラムを1/4秒間スリープさせたい場合は、nanoseconds-to-sleepの値に250000000を設定する。
8.3.1.11章―C$SLEEPを参照
このルーチンは、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を参照
このサブルーチンは、ビット単位の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レジスタに戻される。
このルーチンは、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の場合、サブルーチン引数に問題が確認されたことを示す。
このサブルーチンを使用してファイル名を変更できる。
old-file-pathで指定されたファイルは、new-file-pathで指定された名前に「名前変更」される。それぞれの引数は英数字定数またはデータ項目である。
このルーチン名で気づくかもしれないが、このルーチンには単なる「名前変更」以上の機能がある―1番目の引数に指定されたファイルを2番目の引数に指定されたファイルに移動する。これは、最初にold-file-pathをnew-file-pathにコピーし、次にold-file-pathを削除するという2段階の順序と考えられる。
ファイルの移動に失敗した場合(例えば、ファイルが存在しない場合)、RETURN-CODEは128に設定され、正常終了すると0に設定される。
このルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を小文字に変換する。
convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。
convert-lengthが負またはゼロの場合、変換は実行されない。
8.3.1.12章―C$TOLOWERを参照
C$TOUPPERサブルーチンは、convert-length(数字定数またはデータ項目)のdata-item(英数字一意名)の先頭文字を大文字に変換する。
convert-length引数は、BY VALUEで指定する必要がある。data-itemの(先頭)文字がいくつ変換されるかを指定し、それ以降の文字は変更されない。
convert-lengthが負またはゼロの場合、変換は実行されない。
8.3.1.13章―C$TOUPPERを参照
このルーチンは、指定された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の場合、サブルーチン引数に問題が確認されたことを示す。
このサブルーチンは、ビット単位の排他的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レジスタに戻される。
このサブルーチンは、指定された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_FILEはCBL_OPEN_FILEルーチンの特殊なケースであるため、引数2、3、および4の意味についてCBL_OPEN_FILEルーチンで説明している。
41
すべてのオペレーティングシステム/opensource COBOL環境でファイルサイズを取得できるわけではない―そのような場合、ゼロの値が返される。