概要
- 「もじかん」は、その機能をダイナミックリンクライブラリー(DLL)で提供しています。
- このため、どのようなプログラミング言語であっても、DLLが扱えれば、「もじかん」の機能が利用できます。
- 提供中のCUIやGUIは、このDLLを操作するためのアプリケーションとなっています。
- 本マニュアルは、Windowsの用語で解説しておりますが、FreeBSD用やLinux用の.soも全く同じ仕様になっています。
説明するDLL
DLLの大半は企業秘密で、特に、実際の変換DLLの仕様は非公開となっています。この仕様の公開(ソースリスト含む)については、弊社との機密保持契約の締結が必要です。
仕様を公開しているのは、統括DLLである「gtef.dll」(UNIX用はgtef.so)です。
使用方法
DLLですので、基本的にはプログラム内で動的リンクをして使用します。
但しここで紹介するgtef.dllは、同時にgtef.libも配布しますので、静的リンクして利用することができます。gtef.dllは他の言語コンポーネントと違って常に存在するものなので、静的リンクする方が処理が簡潔に済み利便性が高いかも知れません。
gtef.dll
存在するAPI
存在するAPIは以下の通りです(バージョン1.0.1.0現在)。
βバージョンの現在は開発中のため、APIの仕様が変わることがあります。ご要望等もお受けしております。
iconvと似たインターフェイスを備えているため置き換えが容易ですが、それ以外はWindows的なAPI名となっております。
メモリー入力メモリー出力(iconv風)はgtef関数を、ファイル/標準入力→ファイル/標準出力の変換はgteffile関数を使用します。
LibGetVersion
書式
#include <gtef.h>
DWORD LibGetVersion(char *pchOut, size_t len);
引数
- char *pchOut
- DLL名称を格納するバッファ(必須)
- size_t len
- DLL名称を格納するバッファの長さ
返却値
- DWORD
- バージョン番号(4ビット区切り×4で計32ビット)
解説
他の「もじかん」コンポーネントライブラリーとの共通仕様となっています。
DLL名称を文字列で得られます。必要がなくてもバッファを確保して引数として与えてください。
LibChkEncode (暫定仕様)
書式
#include <gtef.h>
int LibChkEncode(char *pchEncName, const size_t lenEncName,
char *pchBuf, const size_t lenBuf);
引数
- char *pchEncName
- エンコード名格納用バッファのポインター
- size_t lenEncName
- エンコード名格納用バッファの長さ
- char *pchBuf
- 確認するデータの先頭ポインター
- size_t lenBuf
- 確認するデータの長さ
返却値
- int
- 0で正常終了、0以外でエラー
- 値は、エラーコードとなっています。
解説
メモリー上に置かれた文字列のエンコードチェックを行ないます。
解析結果は、文字列として返されます。
基本的にはCES名、例えば「ISO-2022-JP」「Shift_JIS」のように返されますが、CCS名も含めたものが返されることもあります。この場合、「CES名/CCS名」と、スラッシュで区切られます。
(今後予定) 現在の暫定仕様では、言語指定ができません。「もじかん」の自動識別機能はいずれ言語指定対応とする予定ですが、この時にAPIも言語を指定した識別が可能なように改良する予定です。
gtef_running
書式
#include <gtef.h>
int gtef_running();
返却値
- int
- 0:利用可能、0以外:動作中のため利用不可
解説
このDLLは多重動作が出来ません。事前に動作中でないか確認してください。
gtef_open
書式
#include <gtef.h>
gtef_t gtef_open(const char *pchToEnc, const char *pchFromEnc);
引数
- char *pchToEnc
- 出力エンコード名
- char *pchFromEnc
- 入力エンコード名
返却値
- gtef_t
- 変換ディスクリプター
- エラー時(未対応符号名等)には、(gtef_t)-1 が返ります。
解説
iconv_openと近い仕様になっていますが、以下の仕様差があります。
- errnoは使用していません。エラー時にerrnoは変更されません。
- 出力エンコードにnullptr (CならNLLLまたは0)を指定するか、"\0"に対するポインターを与えると、言語ごとの初期状態となります(日本語モードではシフトJIS)
- 入力エンコードにnullptr (CならNLLLまたは0)を指定するか、"\0"に対するポインターを与えると、自動認識機能が有効になります。
gtef_setfile
書式
#include <gtef.h>
int gtef_setfile(gtef_t cd, const char *pchToName, const char *pchFromName);
引数
- gtef_t cd
- gtef_openで取得した変換ディスクリプターを指定します
- char *pchToName
- 出力ファイル名
- char *pchFromName
- 入力ファイル名
返却値
- int
- 0で正常終了、0以外でエラー
- 値は、エラーコードとなっています。
解説
ファイル間変換をする場合は、この関数によりファイル名を設定しておく必要があります。
- errnoは使用していません。エラー時にerrnoは変更されません。
- 出力ファイル名にnullptr (CならNLLLまたは0)を指定するか、"\0"に対するポインターを与えると、標準出力に出力されます。
- 入力ファイル名にnullptr (CならNLLLまたは0)を指定するか、"\0"に対するポインターを与えると、標準入力から入力されます。
gtef_close
書式
#include <gtef.h>
int gtef_close(gtef_t cd);
引数
- gtef_t cd
- gtef_openで取得した変換ディスクリプターを指定します
返却値
- int
- 0で正常終了、0以外でエラー
- 値は、エラーコードとなっています。
解説
終了前に、この関数で変換ディスクリプターを開放する必要があります。
- errnoは使用していません。エラー時にerrnoは変更されません。
gtefctl
書式
#include <gtef.h>
int gtefctl(gtef_t cd, u_long dwRequest, u_long dwArgument);
引数
- gtef_t cd
- gtef_openで取得した変換ディスクリプターを指定します
- u_long dwRequest
- リクエスト番号を指定します
- u_long dwArgument
- 引数を指定します
返却値
- int
- 0で正常終了、0以外でエラー
- 値は、エラーコードとなっています。
解説
各種のオプション設定は、この関数を用います。
添付のgtefapi.hで、リクエスト番号と、そこで用いる引数が #define されます。
gnuiconvのiconvctlとは仕様が異なりますのでご注意下さい。
- GTEF_RETURN (0x00000001)
- GTEF_RETURN_THRU (0) ‐ そのまま (標準)
- GTEF_RETURN_NONE (1) ‐ 削除
- GTEF_RETURN_CR (2) ‐ CRのみ
- GTEF_RETURN_CRLF (3) ‐ CR+LF
- GTEF_RETURN_LF (4) ‐ LFのみ
- GTEF_RETURN_NEL (5) ‐ NEL
- GTEF_IVS (0x00000002)
- GTEF_IVS_ALL (0) ‐ IVS有効
- GTEF_IVS_AUTO (1) ‐ IVS自動
- GTEF_IVS_OFF (2) ‐ IVS無効 (標準)
- GTEF_IVS_CUT (3) ‐ IVS削除
- GTEF_LANG (0x00000003)
- GTEF_LANG_AUTO (0x00000000) ‐ 自動 (標準)
- GTEF_LANG_JA (0x4a410000) ‐ JA 日本語
- GTEF_LANG_ZH (0x5a480000) ‐ ZH 中文
- GTEF_LANG_ZH_CN (0x5a48434e) ‐ ZH-CN 中文 大陸簡体
- GTEF_LANG_ZH_TW (0x5a485457) ‐ ZH-TW 中文 台湾正体
- GTEF_QUIETMODE (0x00000004)
- 0 ‐ 無効 (標準)
- 1 ‐ 有効
- GTEF_JA_ZEN (0x4a410000)
- GTEF_JA_ZEN_KATA (0x00000100) ‐ lng_ja.dll 全角変換カタカナ
- GTEF_JA_ZEN_HIRA (0x00000101) ‐ lng_ja.dll 全角変換ひらがな
- GTEF_JA_ZENJOIN_KATA (0x00000110) ‐ lng_ja.dll 全角変換(結合)カタカナ
- GTEF_JA_ZENJOIN_HIRA (0x00000111) ‐ lng_ja.dll 全角変換(結合)ひらがな
- GTEF_JA_YEN (0x4a410001)
- 0 ‐ lng_ja.dll 無効 (標準)
- 1 ‐ lng_ja.dll U+005C→U+00A5 変換有効
gtef
書式
#include <gtef.h>
int gtef(gtef_t cd, char **ppInBuf, size_t *plenInBuf,
char **ppOutBuf, size_t *plenOutBuf);
引数
- gtef_t cd
- gtef_openで取得した変換ディスクリプターを指定します
- char **ppInBuf
- 入力するデータのポインターのポインター
- size_t *plenInBuf
- 入力するデータサイズのポインター
- char **ppOutBuf
- 結果格納用バッファのポインターのポインター
- size_t *plenOutBuf
- 結果格納用バッファサイズのポインター
返却値
- int
- ≧0で正常終了、<0でエラー、>0は今後の予約
- <0時の値は、エラーコードとなっています。
- 正常終了後、plenOutBuf は、実際に格納されたサイズに書き換えられます。
解説
メモリー間で符号の変換をおこないます。
iconvと近い仕様になっていますが、以下の仕様差があります。
- errnoは使用していません。エラー時にerrnoは変更されません。
- 関数の返却値の仕様は、iconvと異なります。size_t ではありません。
- エラーの種類は、関数の返却値として返されます。
gteffile
書式
#include <gtef.h>
int gteffile(gtef_t cd, char *pchEncName, const size_t lenEncName,
char *pchBuf, const size_t lenBuf);
引数
- gtef_t cd
- gtef_openで取得した変換ディスクリプターを指定します
- char *pchEncName
- エンコード名を格納するためのバッファのポインター
- size_t lenEncName
- エンコード名を格納するためのバッファの長さ
- char *pchBuf
- 動作中メッセージを格納するためのバッファのポインター
- size_t lenBuf
- 動作中メッセージを格納するためのバッファの長さ
返却値
- int
- 0で正常終了、0以外でエラー
- 値は、エラーコードとなっています。
解説
ファイル間で符号の変換をおこないます。
あらかじめ、gtef_setfile で、使用するファイルのパス名を設定しておいてください。
正常終了時、pchEncName で指定したバッファには、「入力符号名(TAB)出力符号名」のタブ区切り形式で符号名が格納されます。不要の場合には、nullptr (CならNLLLまたは0)を指定してください。
正常終了時、pchBuf で指定したバッファには、各種の動作メッセージが格納されます。不要の場合には、nullptr (CならNLLLまたは0)を指定してください。
アプリケーション
この仕様書に準じてアプリケーションを作成することは自由です。
公開に際しても、弊社の許諾は必要ありません。
しかし弊社としても興味がありますので、事前・事後問わず、弊社宛にその旨お伝えいただけるとありがたく思います。こちらよりリンクをさせていただくことがあります。
また、都合により仕様が変更になることがありますので、あらかじめご了承願います。