Micro Focus 圧縮ルーチン

Micro Focus のルーチンは、CBLDCnnn というモジュールに格納されています。nnn は 001 から 127 の数字です。Micro Focus の圧縮ルーチンを使用するには、FCD の fcd-data-compress に 001 から 127 の値を設定します。

ルーチン CBLDC001 および CBLDC101

圧縮ルーチン CBLDC001 では、ランレングス エンコーディング形式を使用します。このエンコーディングは、同じ文字の文字列 (ラン) を検出し、その文字列を 1 つの識別子 (その文字のカウントおよび 1 つのオカレンス) に切り詰める圧縮方法です。

注: 2 バイト文字 (2 バイトの空白文字を含む) は圧縮されないため、このルーチンは 2 バイト文字のオカレンスを数多く含むファイルでは効果的ではありません。

このルーチンは、空白文字、バイナリのゼロと文字のゼロ (1 文字に短縮可能)、および印刷可能文字 (カウント数とその後に続く繰り返しの文字の計 2 文字に短縮可能) の連続に特に重点を置いています。

圧縮ルーチン CBLDC101 の動作は CBLDC001 とまったく同じです。

CBLDC001 と CBLDC101 の違いは、CBLDC101 は 256 KB までの長さの文字列を処理できるのに対して、CBLDC001 は 65535 バイトまでの文字列しか処理できないということです。

圧縮ファイルでは、バイトは次の意味を持っています (16 進値表示)。

20-7F ほとんどの印刷可能な文字。通常の ASCII 文字です。
80-9F それぞれ 1 から 32 文字までの空白文字。
A0-BF それぞれ 1 から 32 文字までのバイナリのゼロ。
C0-DF それぞれ 1 から 32 文字までの文字のゼロ。
E0-FF 後に続く文字の 1 から 32 回までのオカレンス数。
00-1F 後に続く文字の 1 から 32 回までのオカレンス数。圧縮コードとしてではなく、文字どおり解釈します。

元のデータに 00-1F、80-9F、A0-BF、C0-DF、E0-FF のいずれかの範囲の文字が存在する場合に使用されます。このような文字の 1 文字は 2 バイトに拡張されます。それ以外の場合には、圧縮により発生する弊害はありません。

ルーチン CBLDC003 および CBLDC103

CBLDC001 と同様、CBLDC003 ルーチンではランレングス エンコーディング (RLC) を使用しますが、1 バイトおよび 2 バイトの文字列 (ラン) を検出します。そのため、このルーチンは DBCS 文字に適していますが、CBLDC001 の代わりにも使用できます。

CBLDC103 ルーチンの動作は CBLDC003 ルーチンと同じです。

CBLDC003 と CBLDC103 の違いは、CBLDC103 は 256 KB までの長さの文字列を処理できるのに対して、CBLDC003 は 65535 バイトまでの文字列しか処理できないということです。

圧縮形式は、ヘッダー バイト 2 個の後に 1 つ以上の文字が続きます。ヘッダー バイトのビットの内容は次のとおりです。

ビット 15 設定解除 - 1 文字。
ビット 14 設定 - 圧縮シーケンス。設定解除 - 非圧縮シーケンス。
ビット 0 から 13 圧縮した文字または圧縮しない文字数。

文字列の長さはヘッダーのビットによって異なります。

ビット 14 および 15 を設定した場合 2 つの繰り返し文字
ビット 14 のみを設定した場合 1 つの繰り返し文字
その他 1 から 63 文字までの非圧縮文字