第10章 組み込みサブルーチン

10.1 概要

SIT COBOLは、Windowsのファイルやディレクトリについての操作機能を、組み込みサブルーチンとして提供している。
提供しているサブルーチンは下記のとおりである。

組み込みサブルーチンの名前および機能については、opensource COBOLに準拠している。

(サンプルプログラム名:組み込みサブルーチン.cob)

10.2 カレントディレクトリの取得(CBL_GET_CURRENT_DIR)

カレントディレクトリの取得を行うには、CBL_GET_CURRENT_DIRを使用する。

書き方
CALL "CBL_GET_CURRENT_DIR" USING
     BY VALUE 0 
     BY VALUE { 定数-1 | データ名-1 }
     BY REFERENCE データ名-2
構文規則
  1. 第1引数は使用されないが、BY VALUEで指定する必要がある。
  2. 第2引数は、BY VALUEで指定する必要がある。
  3. 第3引数は、BY REFERCENCEで指定する必要がある。(既定値がBY REFERENCEなので省略可能である)
  4. データ名-1は修飾が可能である。
一般規則
  1. カレントディレクトリの完全修飾パス名が取得され、データ名-2に、定数1またはデータ名-1で指定した文字長の文字が保存される。
  2. 文字長(定数-1またはデータ名-1に指定された値)は、データ名-2の項目長を超えてはならない。
  3. 文字長(定数-1またはデータ名-1に指定された値)がデータ名-2の項目長よりも小さい場合、現在のディレクトリパスがデータ名-2に左寄せされ、文字長分まで空白が埋められる。データ名-2のうち文字長を超えた部分は変更されない。
  4. 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。ただし、第1引数の値がゼロ以外の場合、RETURN-CODE は 129 となる。
注意

SIT COBOLは、実行するプログラムの存在するディレクトリが、初期のカレントディレクトリとなる。
SIT COBOLエディタによって、まだどこにも書き出されていないプログラムが実行された場合は、sitcobol.exe が存在するディレクトリが、カレントディレクトリとなる。

使い方
000000 01 CURR-DIR   PIC X(100).
000000       :
000000     MOVE ALL "*" TO CURR-DIR.
000000     CALL "CBL_GET_CURRENT_DIR" USING VALUE 0 VALUE 50 CURR-DIR.
000000     DISPLAY "カレント: " CURR-DIR   *> カレントディレクトリが表示される。

上記は、カレントディレクトリを、50バイトのみ取得しようとしている。したがって、CURR-DIRの51バイト以降は”*“のままである。

10.3 カレントディレクトリの変更(CBL_CHANGE_DIR)

カレントディレクトリを変更するには、CBL_CHANGE_DIRを使用する。

書き方
CALL "CBL_CHANGE_DIR" USING { 定数-1 | データ名-1}
構文規則
  1. 定数-1は、文字定数でなければならない。
  2. データ名-1は、英数字項目または集団項目でなければならない。
  3. データ名-1は、修飾することができる。
一般規則
  1. このルーチンは、定数-1またはデータ名-1で指定された値を現在のディレクトリにする。
  2. ディレクトリの変更は、プログラムの終了がするか、または別の CBL_CHANGE_DIRが実行されるまで有効である。
  3. 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
注意

SIT COBOLは、実行するプログラムの存在するディレクトリが、初期のカレントディレクトリとなる。
SIT COBOLエディタによって、まだどこにも書き出されていないプログラムが実行された場合は、 sitcobol.exe が存在するディレクトリが、カレントディレクトリとなる。

使い方
00000     CALL "CBL_CHANGE_DIR" USING "./tmp".

上記は、カレントディレクトリを、相対パス指定で”./tmp”を指定した例である。 ディレクトリとして、‘/’を使用しているが、もちろん、“.\tmp” と指定してもよいが、’\‘記号が特殊文字と 認識されるケースがあるので、’/’を推奨する。

10.4 ファイルのコピー(CBL_COPY_FILE)

ファイルをコピーするには、CBL_COPY_FILEを使用する。

書き方
CALL "CBL_COPY_FILE" USING { 定数-1 | データ名-1 } {定数-2 | データ名-2 }
構文規則
  1. 定数-1、定数-2は、文字定数でなければならない。
  2. データ名-1、データ名-2は、英数字項目または集団項目でなければならない。
一般規則
  1. 引数-2で指定されたパスがファイル名の場合は、引数-1のパスで指定されたファイルを、引数-2にコピーする。
  2. 引数-2で指定されたパスがディレクトリ名の場合は、引数-1のパスで指定されたファイルを、名前を変えずに 引数-2のディレクトリ配下にコピーする。
  3. 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000     CALL "CBL_COPY_FILE" USING "./PROGRAM.cob"  "D:/save".

上記では、カレントディレクトリにある’PROGRAM.cob’を、Dドライブの/saveというディレクトリ配下にコピーしている。

10.5 ファイル名の変更(CBL_RENAME_FILE)

ファイル名を変更するには、CBL_RENAME_FILEを指定する。

書き方
CALL "CBL_RENAME_FILE" USING  { 定数-1 | データ名-1 } {定数-2 | データ名-2 }
構文規則
  1. 定数-1、定数-2は、文字定数でなければならない。
  2. データ名-1、データ名-2は、英数字項目または集団項目でなければならない。
一般規則
  1. 引数-1のパスで指定されたファイル名を、引数-2のパスで指定されたファイル名に変更する。
  2. 引数-1で指定したファイルの親までのパス名と、引数-2で指定したファイルの親までのパス名は同じでなくともよい。 その場合は、引数-1のパスで指定したファイルが、引数-2のパスで指定したファイルにコピーされ、その後、引数-1のパスで 指定したファイルは削除される。
  3. 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000     CALL "CBL_RENAME_FILE" USING "./PROGRAM.cob" "./PROGRAM_SAVE.cob".

上記では、カレントディレクトリにある’PROGRAM.cob’を、’PROGRAM_SAVE.cob’と名前を変えている。

000000     CALL "CBL_RENAME_FILE" USING "./PROGRAM.cob"  "D:/save/PROGRAM_SAVE.cob".

上記では、カレントディレクトリにある’PROGRAM.cob’を、Dドライブの/saveというディレクトリ配下に名前を変えて 移動している。

10.6 ディレクトリの作成(CBL_CREATE_DIR)

ディレクトリを作成するには、CBL_CREATE_DIRを使う。

書き方
CALL "CBL_CREATE_DIR" USING { 定数-1 | データ名-1 }
構文規則
  1. 定数-1、文字定数でなければならない。
  2. データ名-1は、英数字項目または集団項目でなければならない。
一般規則
  1. 定数-1またはデータ名-1の値を持つディレクトリを作成する。
  2. 作成できるディレクトリは、定数-1またはデータ名-1で指定されたパスの最下層 (最後) のディレクトリのみ である。他のディレクトリは既に存在していなければならない。
  3. 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000     CALL "CBL_CREATE_DIR" USING "./tmp/first".

上記では、カレントディレクトリ配下の’tmp’というディレクトリ配下に新たなディレクトリ’first’を作成している。 もし、カレントディレクトリ配下に’tmp’ディレクトリが存在しない場合には、ディレクトリの作成は失敗する。

10.7 ディレクトリの削除(CBL_DELETE_DIR)

ディレクトリを削除するには、CBL_DELETE_DIRを使う。

書き方
CALL CBL_DELETE_DIR { 定数-1 | データ名-1 }
構文規則
  1. 定数-1、文字定数でなければならない。
  2. データ名-1は、英数字項目または集団項目でなければならない。
一般規則
  1. 定数-1またはデータ名-1の値を持つディレクトリを削除する。
  2. 削除できるディレクトリは、定数-1またはデータ名-1で指定されたパスの最下層 (最後) のディレクトリのみ である。他のディレクトリは既に存在していなければならない。
  3. 削除するディレクトリ配下には、ファイルもディレクトリも存在してはならない。
  4. 操作の戻り値は、RETURN-CODE 特殊レジスタに返され、成功(=0)または 失敗(=128)のいずれかである。
使い方
000000     CALL "CBL_DELETE_DIR" USING "./tmp/first".

上記では、カレントディレクトリ配下の’tmp’というディレクトリ配下のディレクトリ’first’を削除している。 もし、カレントディレクトリ配下に’tmp’ディレクトリが存在しない場合、あるいは、’./tmp/first’配下にファイル等が 存在していた場合には、ディレクトリの削除は失敗する。

本文最後