概要

gtmzlibは、文字列データを圧縮解凍するために zlib(http://zlib.net)を使用できるようなGT.Mのアプリケーションコードを可能にするシンプルなプラグインです。
gtmzlibは、GT.M自体が提供している同じライセンスの条件の下で提供されています。
gtmzlibは単純にはzlibのラッパーでありますが、非依存的に入手しインストールする必要がある zlib は含まれていません。

gtmzlibは、次のような入口参照(entryref)を提供するzlibを呼び出し、Mの%ZLIB Mモジュールで構成されています。

$$compress2^%ZLIB(origstr,.compstr,level)
$$uncompress^%ZLIB(compstr,.uncompstr)
$$version^%ZLIB
$$zlibversion^%ZLIB

compress2はオリジナルの文字列(origstr) を圧縮し、圧縮された文字列(compstr)を返します。level は圧縮レベルとして zlib に渡される文字列です(デフォルトの圧縮を使用することをzlibに指示します。指定されていない場合は-1をデフォルトとする -1から9 )。
解凍は、圧縮されている文字列(compstr)を展開し、uncompstr で結果を返します。
compress2とuncompressの両方は、基礎となっている zlibコードによって返されるステータスを返します ; 通常のリターンは0 。

次に例を示します。

GTM>set a="The quick brown fox"

GTM>set s=$$compress2^%ZLIB(a,.b)

GTM>zwrite
a="The quick brown fox"
b="x"_$C(156,11)_"?HU(,?L?VH*?/?SH?"_$C(0,0)_"E."_$C(7,20)
s=0

GTM>set s=$$uncompress^%ZLIB(b,.c)

GTM>zwrite
a="The quick brown fox"
b="x"_$C(156,11)_"?HU(,?L?VH*?/?SH?"_$C(0,0)_"E."_$C(7,20)
c="The quick brown fox"
s=0

GTM>

zlibversion は zlibライブラリのバージョンを返し、バージョンは$HOROLOG形式のタイムスタンプであるプラグインのバージョンを返します。

次に例を示します。

GTM>set z=$$zlibversion^%ZLIB

GTM>set p=$$version^%ZLIB

GTM>zwrite
p="62508,48729"
z="1.2.3.4"

GTM>


インストール

gtmzlib は3つのコードファイルで構成されています - gtmzlib.c, gtmzlib.xc, _ZLIB.m と readme.txt です。
また、提供されている下でライセンスの条件を記述している COPYINGファイルを含めます。

GT.Mコードから呼び出すことができる libgtmzlib.so 共有ライブラリを生成するために、gtmzlib.c ソースファイルをコンパイルします。
次の例では、Linux のものであり、x86アーキテクチャ用GT.M V5.5-000の64ビットバージョンが /usr/lib/fis-gtm/V5.5-000_x86_64 にインストールしてあることを前提としています。 Mプログラマは、ご利用のプラットフォーム上でのコマンドはGT.Mプログラマーガイドを参照し、特定のディレクトリ構造に必要な調整をしてください。

$ ls -l
total 28
-rw-r--r-- 1 gtmuser gtc 1358 2012-02-21 16:56 gtmzlib.c
-rw-r--r-- 1 gtmuser gtc 282 2012-02-21 16:56 gtmzlib.xc
-rw-r--r-- 1 gtmuser gtc 1471 2012-02-21 17:17 _ZLIB.m
$ gcc -c -fPIC -I/usr/lib/fis-gtm/V5.5-000_x86_64 gtmzlib.c
$ gcc -o libgtmzlib.so -shared gtmzlib.o
$ ls -l
total 28
-rw-r--r-- 1 gtmuser gtc 1358 2012-02-21 16:56 gtmzlib.c
-rw-r--r-- 1 gtmuser gtc 1976 2012-02-21 18:00 gtmzlib.o
-rw-r--r-- 1 gtmuser gtc 282 2012-02-21 16:56 gtmzlib.xc
-rwxr-xr-x 1 gtmuser gtc 7997 2012-02-21 18:00 libgtmzlib.so
-rw-r--r-- 1 gtmuser gtc 1471 2012-02-21 17:17 _ZLIB.m
$

gtmzlib.xc とlibgtmzlib.soファイルを、あなたのGT.Mディレクトリのプラグインのサブディレクトリにコピーします。この例では、/usr/lib/fis-gtm/V5.5-000_z86_64/plugin です( root 、または、GT.Mインストールのサブディレクトリに書き込みすることができる他の管理ユーザーID で、このコマンドはを実行する必要があります)。

$ sudo cp gtmzlib.xc libgtmzlib.so /usr/lib/fis-gtm/V5.5-000_x86_64/plugin/

_ZLIB.mファイルを /usr/lib/fis-gtm/V5.5-000_x86_64/plugin/r にコピーし、/usr/lib/fis-gtm/V5.5- 000_x86_64/plugin/o の中で、 _ZLIB.m をMモードのオブジェクトモジュールにzlinkコンパイルし、 /usr/lib/fis-gtm/V5.5-000_x86_64/plugin/o/utf8 の中で、UTF-8モードのオブジェクトモジュールをzlinkコンパイルします。

$ find /usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin -iname \*zlib\*
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/libgtmzlib.so
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/r/_ZLIB.m
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/o/utf8/_ZLIB.o
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/o/_ZLIB.o
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/gtmzlib.xc
$

もしGT.Mプラットフォームが共有ライブラリをサポートしていれば、より効率的なメモリ使用のための共有ライブラリで .o オブジェクトファイルを置き換えることができます。

$ find /usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin -iname \*zlib\*
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/libgtmzlib.so
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/r/_ZLIB.m
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/o/utf8/_ZLIB.o
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/o/_ZLIB.o
/usr/lib/fis-gtm/V5.5-FT03_x86_64/plugin/gtmzlib.xc
$

GT.Mを実行する時、もしシステムが自動的にシステム上のzlibの共有ライブラリを検索するように構成されていない場合は、それを(Linux上でのman ldconfig参照)行うか、または、明示的に ライブラリをプリロードする必要があります( 例えば、Linux上のLD_PRELOAD環境変数で、Ubuntu Linux 11.10からは、以下のような libz.so の場所です。
V5.5-000 で有効になった、gtmprofileとgtm スクリプトでは、これらの指示に従ってインストールされているすべてのプラグインにアクセスするために必要な環境変数を自動的に提供します。
GT.Mの以前のリリースでは、GTMXC_gtmzlib環境変数を提供する必要があり、_ZLIBルーチンは $zroutinesによって発見されていることを確認します。

$ LD_PRELOAD=/lib/x86_64-linux-gnu/libz.so.1.2.3.4 /usr/lib/fis-gtm/V5.5-000_x86_64/gtm

GTM>set a="The quick brown fox jumps over the lazy dog"

GTM>set s=$$compress2^%ZLIB(a,.b,9)

GTM>set t=$$uncompress^%ZLIB(b,.c)

GTM>zwrite
a="The quick brown fox jumps over the lazy dog"
b="x?"_$C(11)_"?HU(,?L?VH*?/?SH?P?*?-(V?/K-R("_$C(1)_"J?$VU*???"_$C(3,0)_"[?"_$C(15)_"?"
c="The quick brown fox jumps over the lazy dog"
s=0
t=0

GTM>


ご注意

zlibはFISのソフトウェアではなく、FIS GT.Mサポートの一部としてはサポートされていません。
あなたが依存しているソフトウェアの適切なサポートがあることを確認することを、FISは強く推奨します。

圧縮または解凍されているかどうか、GT.Mが現在サポートされている最長の文字列値である1048576バイト(1MB)にアップする文字列を許可するかどうかは、gtmzlib.xcで文字列を返すための事前割り当てをします。
したがって、gtmzlibの広範な使用は、頻繁にガベージコレクションが発生することがあります。
もしアプリケーションが1MBより小さい文字列を使用する場合のみ、適宜この数を減らすことができます。

Cライブラリを呼び出すためのGT.Mインターフェースは、エンドユーザではなく、プログラマによって使用するために設計された低レベルのインタフェースです。
誤用、乱用およびバグは、脆弱なトラブルシューティングが難しいとセキュリティの脆弱性のあるアプリケーションになる可能性があります。

inserted by FC2 system