-// begin of jreusr.h\r
-// \83\89\83C\83u\83\89\83\8a\82Ì\8eg\97p\8eÒ\97p\83w\83b\83_\83t\83@\83C\83\8b\r
+// begin of jreusr.h\r
+// ライブラリの使用者用ヘッダファイル\r
\r
#ifndef JREUSR\r
#define JREUSR\r
// ---------------------------------------------------\r
// Prevent multiple includes.\r
\r
-// _os_os2\82Í\82±\82ê(jreusr.h)\82ð\83C\83\93\83N\83\8b\81[\83h\82·\82é\83\86\81[\83U\81[\82ª\92è\8b`\82·\82é\r
+// _os_os2はこれ(jreusr.h)をインクルードするユーザーが定義する\r
#if defined(_OS_OS2)\r
// in case of os/2\r
// __OS2_H__ is for bc 2.0 e\r
// __OS2_H__ is for bc 1.5 e\r
#if !defined(__IBMC__) || !defined(__OS2_H__)\r
- // \91¼\82Ì\83N\83\89\83X\82Åtype.h\82ð\83C\83\93\83N\83\8b\81[\83h\82³\82¹\82È\82¢\82æ\82¤\82É\90æ\82Éinclude\82·\82é.\r
- // INCL_???\82È\82Ç\95K\97v\82È\92è\90\94\82Í\90æ\82É\92è\8b`\82µ\82Ä\82¨\82.\r
+ // 他のクラスでtype.hをインクルードさせないように先にincludeする.\r
+ // INCL_???など必要な定数は先に定義しておく.\r
#include <os2.h>\r
#endif // defined(__IBMC__) || defined(__OS2_H__)\r
\r
#ifndef STRICT\r
#define STRICT\r
#endif // STRICT\r
- // \91¼\82Ì\83N\83\89\83X\82Åtype.h\82ð\83C\83\93\83N\83\8b\81[\83h\82³\82¹\82È\82¢\82æ\82¤\82É\90æ\82Éinclude\82·\82é.\r
+ // 他のクラスでtype.hをインクルードさせないように先にincludeする.\r
#include <windows.h>\r
#endif // !defined(__WINDOWS_H) && !defined(_INC_WINDOWS)\r
\r
// ---------------------------------------------------\r
#if defined(JRE_BUILDTYPE_OS2PM)\r
// in case of JRE_BUILDTYPE_OS2PM\r
- // \88È\89º\81Cjre/os2\83\8d\81[\83J\83\8b\82Ì\92è\8b`\r
+ // 以下,jre/os2ローカルの定義\r
#if !defined(EXTAPI)\r
#define EXTAPI _export EXPENTRY\r
#endif // !defined(EXTAPI)\r
typedef void* MEMID;\r
#endif // !defined(MEMID)\r
\r
- // os2\82É\82ÍPSZ\82ª\82 \82é.\r
+ // os2にはPSZがある.\r
typedef PSZ PSTR, LPSTR;\r
typedef int (*FARPROC)(void); // farproc\r
- //os2\82É\82ÍUSHORT\81CULONG\82ª\82 \82é.\r
+ //os2にはUSHORT,ULONGがある.\r
typedef USHORT WORD;\r
typedef ULONG DWORD;\r
- // OS/2\82É\82ÍSHANDLE\82ÆLHANDLE\82ª\82 \82é.\r
- typedef LHANDLE HANDLE; // \94Ä\97p\83n\83\93\83h\83\8b\82ð\8dì\82Á\82Ä\82¨\82¢\82Ä\81c\81c\r
+ // OS/2にはSHANDLEとLHANDLEがある.\r
+ typedef LHANDLE HANDLE; // 汎用ハンドルを作っておいて……\r
typedef HANDLE GLOBALHANDLE;\r
typedef HANDLE*PHANDLE, *LPHANDLE;\r
\r
#else\r
// in case of JRE_BUILDTYPE_WIN32 or JRE_BUILDTYPE_WIN16 (= JRE_BUILDTYPE_WINDOWS)\r
- // \88È\89º\81Cjre/win\83\8d\81[\83J\83\8b\82Ì\92è\8b`\r
+ // 以下,jre/winローカルの定義\r
#if !defined(EXTAPI)\r
#if defined(_MSC_VER)\r
- #define EXTAPI WINAPI // VC2\82Å\82Í_export\82ª\92Ê\82ç\82È\82¢\82Ì\82Å\92\8d\88Ó.\r
+ #define EXTAPI WINAPI // VC2では_exportが通らないので注意.\r
#endif\r
#if defined(__BORLANDC__)\r
#if defined(_TEST_EXE)\r
\r
#if !defined(MEMID)\r
#if defined(JRE_BUILDTYPE_WIN32)\r
- typedef void*MEMID; // \96¾\8e¦\93I\82É\83|\83C\83\93\83^\82É\82µ\82Ü\82µ\82½.\r
+ typedef void*MEMID; // 明示的にポインタにしました.\r
#else\r
typedef HGLOBAL MEMID;\r
#endif // __WIN32__\r
\r
#endif\r
\r
-// --------------------------------------------------- \83O\83\8d\81[\83o\83\8b\95Ï\90\94\r
+// --------------------------------------------------- グローバル変数\r
\r
\r
\r
-// ------------------------------------------------------------- \92è\90\94\r
-// _JRE_ERR_CODE\82Æ_JRE_WARN_CODE\82Ì\83V\83\93\83{\83\8b\82Í\8eR\93c\82ª\83f\83o\83b\83O\8e\9e\82É\8eg\97p\82µ\82Ä\82¢\82Ü\82·.\r
+// ------------------------------------------------------------- 定数\r
+// _JRE_ERR_CODEと_JRE_WARN_CODEのシンボルは山田がデバッグ時に使用しています.\r
\r
#define _JRE_ERR_CODE\r
-// \83G\83\89\81[\83R\81[\83h.nError\82ª1\81`63\82Ü\82Å. int\8c^\r
-#define CantAllocate ( 1) // \83\81\83\82\83\8a\82Ì\8am\95Û\82ª\82Å\82«\82È\82¢.\90â\91Î\93I\82È\83\81\83\82\83\8a\95s\91«.\r
-#define MemoryTooFew1 ( 2) // \83\81\83\82\83\8a\82ª\91«\82è\82È\82¢1.(\8eÀ\8ds\8e\9e\82É\8c\88\82Ü\82é\82à\82Ì.\83\81\83\82\83\8a\83T\83C\83Y\82Ì\97\\91ª\82É\8e¸\94s\82µ\82½)\r
-#define MemoryTooFew2 ( 3) // \83\81\83\82\83\8a\82ª\91«\82è\82È\82¢2.(DLL\8dì\90¬\8e\9e\82É\8c\88\82Ü\82é\82à\82Ì)\r
-#define ReTooLong (10) // \90³\8bK\95\\8c»\82ª\92·\82·\82¬\82é.\r
-#define TooComplex (13) // \82à\82Á\82Æ\8aÈ\92P\82È\95\\8c»\82É\82µ\82Ä\89º\82³\82¢.\82±\82ÌDLL\82Ì\8eã\82¢\83p\83^\81[\83\93\82Å,\8c©\82Â\82¯\82ç\82ê\82È\82¢.\82½\82¾\82µ\96Å\91½\82È\8e\96\82Å\82Í\94\90¶\82µ\82È\82¢.\r
-#define MismatchBracket (20) // \8a\87\8cÊ\82Ì\91Î\89\9e\82ª\90³\82µ\82\82È\82¢.\r
-#define InvalidChClass (21) // \83L\83\83\83\89\83N\83^\83N\83\89\83X\82Ì\93à\97e\82ª\89ð\8eß\82Å\82«\82È\82¢.\96w\82Ç\82Ì\8fê\8d\87\94Í\88Í\8ew\92è\82ª\90³\82µ\82\82È\82¢.\r
-#define EscErr (24) // \83G\83X\83P\81[\83v\83V\81[\83N\83F\83\93\83X\82ª\89ð\8eß\82Å\82«\82È\82¢.\r
-#define Unknown (31) // \82È\82ñ\82¾\82©\97Ç\82\82í\82©\82ç\82È\82¢\83G\83\89\81[.\95¡\8d\87\93I\82È\97v\88ö\82Å\94\90¶\82·\82é\83G\83\89\81[.\96w\82Ç\82ª\83\81\83\82\83\8a\83T\83C\83Y\82Ì\97\\91ª\82É\8e¸\94s.\r
-#define NoReString (32) // \8c\9f\8dõ\83p\83^\81[\83\93\82ð\8ew\92è\82µ\82Ä\89º\82³\82¢.\90³\8bK\95\\8c»\92·\82ª0\83o\83C\83g.\r
-#define IncorrectUsing (33) // \83p\83\89\83\81\81[\83^\82ª\82¨\82©\82µ\82¢.DLL\82Ì\95s\90³\82È\8eg\97p\96@.\r
-#define ReNotExist (34) // \8c\9f\8dõ\82·\82é\91O\82É\83R\83\93\83p\83C\83\8b\82µ\82Ä\89º\82³\82¢.\r
-#define InternalErr (35) // DLL\82Ì\83o\83O\82ð\8c\9f\8fo\82µ\82½.\82±\82ê\82ª\94\90¶\82µ\82½\82ç\8dì\8eÒ\82É\98A\97\8d\82µ\82Ä\97~\82µ\82¢.\r
-#define UsrAbort (36) // \83\86\81[\83U\81[(\83A\83v\83\8a\83P\81[\83V\83\87\83\93)\82É\82æ\82é\92\86\92f.\r
-#define OldVersion (37) // \8cÃ\82¢(\89ð\8eß\82Å\82«\82È\82¢)\83o\81[\83W\83\87\83\93\82Ì\8cÄ\82Ñ\8fo\82µ\8eè\8f\87\82ð\8eg\97p\82µ\82½.\r
-// CantAllocate, TooComplex, MemoryTooFew2, ReNotExist, IncorrectUsing, UsrAbort\82Í\8c\9f\8dõ\8e\9e\82É\82à\94\90¶\82·\82é\82à\82Ì\r
+// エラーコード.nErrorが1~63まで. int型\r
+#define CantAllocate ( 1) // メモリの確保ができない.絶対的なメモリ不足.\r
+#define MemoryTooFew1 ( 2) // メモリが足りない1.(実行時に決まるもの.メモリサイズの予測に失敗した)\r
+#define MemoryTooFew2 ( 3) // メモリが足りない2.(DLL作成時に決まるもの)\r
+#define ReTooLong (10) // 正規表現が長すぎる.\r
+#define TooComplex (13) // もっと簡単な表現にして下さい.このDLLの弱いパターンで,見つけられない.ただし滅多な事では発生しない.\r
+#define MismatchBracket (20) // 括弧の対応が正しくない.\r
+#define InvalidChClass (21) // キャラクタクラスの内容が解釈できない.殆どの場合範囲指定が正しくない.\r
+#define EscErr (24) // エスケープシークェンスが解釈できない.\r
+#define Unknown (31) // なんだか良くわからないエラー.複合的な要因で発生するエラー.殆どがメモリサイズの予測に失敗.\r
+#define NoReString (32) // 検索パターンを指定して下さい.正規表現長が0バイト.\r
+#define IncorrectUsing (33) // パラメータがおかしい.DLLの不正な使用法.\r
+#define ReNotExist (34) // 検索する前にコンパイルして下さい.\r
+#define InternalErr (35) // DLLのバグを検出した.これが発生したら作者に連絡して欲しい.\r
+#define UsrAbort (36) // ユーザー(アプリケーション)による中断.\r
+#define OldVersion (37) // 古い(解釈できない)バージョンの呼び出し手順を使用した.\r
+// CantAllocate, TooComplex, MemoryTooFew2, ReNotExist, IncorrectUsing, UsrAbortは検索時にも発生するもの\r
\r
#define _JRE_WARN_CODE\r
-// \8cx\8d\90\83R\81[\83h. \83\8c\83|\81[\83g\83R\81[\83h. jre2\8d\\91¢\91Ì\82ÌnWarning\83\81\83\93\83o.\r
-// \82±\82ê\82Í\82»\82ê\82¼\82ê\82Ì\83r\83b\83g\82É\83}\83b\83s\83\93\83O\82·\82é\89Â\94\\90«\82ª\8d\82\82¢\82Ì\82Å\81C\r
+// 警告コード. レポートコード. jre2構造体のnWarningメンバ.\r
+// これはそれぞれのビットにマッピングする可能性が高いので,\r
// if (CwInlinePattern | jre2.nWarning){\r
// }\r
-// \82Å\95]\89¿\82µ\82Ä\82\82¾\82³\82¢.\r
-#define CwInlinePattern (2) // \8ds\93à\82Ì\8f\88\97\9d\82É\82Â\82«\81C\8dÄ\8cÄ\82Ñ\8fo\82µ\82Ì\95K\97v\82Í\82È\82¢.\r
+// で評価してください.\r
+#define CwInlinePattern (2) // 行内の処理につき,再呼び出しの必要はない.\r
\r
#define JGC_SHORT (1)\r
#define JGC_LONG (2)\r
\r
-// jre.dll\82Å\8eg\97p\82·\82é\83\81\83b\83Z\81[\83W\82Ì\8dÅ\91å\92·(\95Û\8fØ).\82±\82Ì\83T\83C\83Y\82Ì\83o\83b\83t\83@\82É\8eû\82Ü\82ç\82È\82¢\95¶\8e\9a\97ñ\82Í\93n\82µ\82Ü\82¹\82ñ(null\82Ü\82Å\8aÜ\82ß\82Ä\82±\82Ì\83T\83C\83Y).\r
+// jre.dllで使用するメッセージの最大長(保証).このサイズのバッファに収まらない文字列は渡しません(nullまで含めてこのサイズ).\r
#define JRE_MAXLEN (128)\r
\r
-// GetJreMessage\82Ì\8c¾\8cê\94Ô\8d\86.\r
+// GetJreMessageの言語番号.\r
#define GJM_JPN (0)\r
#define GJM_ENG (1)\r
\r
-// ----------------------------------------------------------- \8d\\91¢\91Ì\r
-// JRE\8d\\91¢\91Ì. \83o\81[\83W\83\87\83\93\82É\82©\82©\82í\82ç\82¸jre\8d\\91¢\91Ì\82Ì\83A\83\89\83C\83\93\83\81\83\93\83g\82Í8bit(1byte)\82Å\82·\81B\r
+// ----------------------------------------------------------- 構造体\r
+// JRE構造体. バージョンにかかわらずjre構造体のアラインメントは8bit(1byte)です。\r
#pragma pack(1)\r
-// JRE\8d\\91¢\91Ì\82Í\8bÉ\97Í\8eg\97p\82µ\82È\82¢\82Å\82\82¾\82³\82¢.\8d¡\8cã\82ÌÊÞ°¼Þ®Ý\82Å\94p\8e~\82µ\82Ü\82·(\83o\81[\83W\83\87\83\932.xx\82Ü\82Å\82Å»Îß°Ä\82ð\8e~\82ß\82Ü\82·).\r
-// \82±\82ê\82É\91ã\82í\82é\8d\\91¢\91Ì\82ÍJRE2\8d\\91¢\91Ì\82Å\82·.\r
+// JRE構造体は極力使用しないでください.今後のバージョンで廃止します(バージョン2.xxまででサポートを止めます).\r
+// これに代わる構造体はJRE2構造体です.\r
typedef struct tagJRE{\r
- BOOL bConv; // \82±\82Ì\8d\\91¢\91Ì\82Ì\8eg\97p\92\86\82ð\8e¦\82·\83t\83\89\83O.\r
- int nStart; // \8c\9f\8dõ\8aJ\8en\88Ê\92u.\83o\83C\83g\90\94.\90æ\93ª\82Í0.\r
- int nWarning; // \83E\83H\81[\83j\83\93\83O\83R\81[\83h.\r
- int nError; // \83G\83\89\81[\83R\81[\83h.\r
- int nLength; // \83}\83b\83`\92·.\83o\83C\83g\90\94.\r
- int nPosition; // \83}\83b\83`\88Ê\92u.\90æ\93ª\82Í0.(\82¨\92p\82¸\82©\82µ\82¢)\r
- WORD wTranslate; // \95Ï\8a·\83e\81[\83u\83\8b\94Ô\8d\86.\r
- LPSTR lpszTable; // \95Ï\8a·\83e\81[\83u\83\8b.\r
- FARPROC lpfnUsrFunc; // \83R\81[\83\8b\83o\83b\83N\8aÖ\90\94\82Ö\82ÌFAR\83|\83C\83\93\83^.\r
- int nCompData1; // \83R\83\93\83p\83C\83\8b\83f\81[\83^1.\r
- MEMID hCompData2; // \83R\83\93\83p\83C\83\8b\83f\81[\83^2.\83n\83\93\83h\83\8b.\r
- MEMID hCompData3; // \83R\83\93\83p\83C\83\8b\83f\81[\83^3.\83n\83\93\83h\83\8b.\r
- MEMID hCompData4; // \83R\83\93\83p\83C\83\8b\83f\81[\83^4.\83n\83\93\83h\83\8b.\r
+ BOOL bConv; // この構造体の使用中を示すフラグ.\r
+ int nStart; // 検索開始位置.バイト数.先頭は0.\r
+ int nWarning; // ウォーニングコード.\r
+ int nError; // エラーコード.\r
+ int nLength; // マッチ長.バイト数.\r
+ int nPosition; // マッチ位置.先頭は0.(お恥ずかしい)\r
+ WORD wTranslate; // 変換テーブル番号.\r
+ LPSTR lpszTable; // 変換テーブル.\r
+ FARPROC lpfnUsrFunc; // コールバック関数へのFARポインタ.\r
+ int nCompData1; // コンパイルデータ1.\r
+ MEMID hCompData2; // コンパイルデータ2.ハンドル.\r
+ MEMID hCompData3; // コンパイルデータ3.ハンドル.\r
+ MEMID hCompData4; // コンパイルデータ4.ハンドル.\r
} JRE, *PJRE, NEAR*NPJRE, FAR*LPJRE;\r
#pragma pack()\r
\r
\r
#pragma pack(1)\r
-// \83o\81[\83W\83\87\83\931.06\88È\8d~\82Í\82±\82Ì\8d\\91¢\91Ì\82ð\8eg\97p\82µ\82Ä\82\82¾\82³\82¢.\r
-// \82½\82¾\82µ,\83o\81[\83W\83\87\83\931.xx\82Å\82Í\8ed\97l\82ª\97¬\93®\93I\82Å\82·(\82Ç\82È\82¢\82¹\81[\82¿\82ã\82¤\82Ë\82ñ).\r
+// バージョン1.06以降はこの構造体を使用してください.\r
+// ただし,バージョン1.xxでは仕様が流動的です(どないせーちゅうねん).\r
typedef struct tagJRE2{\r
- DWORD dwSize; // \82±\82Ì\8d\\91¢\91Ì\82Ì\83T\83C\83Y.\r
- BOOL bConv; // \82±\82Ì\8d\\91¢\91Ì\82Ì\8eg\97p\92\86\82ð\8e¦\82·\83t\83\89\83O.\r
- UINT nStart; // \8c\9f\8dõ\8aJ\8en\88Ê\92u.\83o\83C\83g\90\94.\90æ\93ª\82Í0.\r
- UINT nWarning; // \83E\83H\81[\83j\83\93\83O\83R\81[\83h. (v1.11\82©\82çUINT\82É\95Ï\8dX)\r
- int nError; // \83G\83\89\81[\83R\81[\83h.\r
- UINT nLength; // \83}\83b\83`\92·.\83o\83C\83g\90\94.\r
- UINT nPosition; // \83}\83b\83`\88Ê\92u.\90æ\93ª\82Í0.(\82¨\92p\82¸\82©\82µ\82¢)\r
- WORD wTranslate; // \95Ï\8a·\83e\81[\83u\83\8b\94Ô\8d\86.\r
- LPSTR lpszTable; // \95Ï\8a·\83e\81[\83u\83\8b.\r
- FARPROC lpfnUsrFunc; // \83R\81[\83\8b\83o\83b\83N\8aÖ\90\94\82Ö\82ÌFAR\83|\83C\83\93\83^(\8eg\82í\82È\82¢\82æ\82¤\82É).\r
- UINT nCompData1; // \83R\83\93\83p\83C\83\8b\83f\81[\83^1.\r
- MEMID hCompData2; // \83R\83\93\83p\83C\83\8b\83f\81[\83^2.\83n\83\93\83h\83\8b.\r
- MEMID hCompData3; // \83R\83\93\83p\83C\83\8b\83f\81[\83^3.\83n\83\93\83h\83\8b.\r
- MEMID hCompData4; // \83R\83\93\83p\83C\83\8b\83f\81[\83^4.\83n\83\93\83h\83\8b.\r
+ DWORD dwSize; // この構造体のサイズ.\r
+ BOOL bConv; // この構造体の使用中を示すフラグ.\r
+ UINT nStart; // 検索開始位置.バイト数.先頭は0.\r
+ UINT nWarning; // ウォーニングコード. (v1.11からUINTに変更)\r
+ int nError; // エラーコード.\r
+ UINT nLength; // マッチ長.バイト数.\r
+ UINT nPosition; // マッチ位置.先頭は0.(お恥ずかしい)\r
+ WORD wTranslate; // 変換テーブル番号.\r
+ LPSTR lpszTable; // 変換テーブル.\r
+ FARPROC lpfnUsrFunc; // コールバック関数へのFARポインタ(使わないように).\r
+ UINT nCompData1; // コンパイルデータ1.\r
+ MEMID hCompData2; // コンパイルデータ2.ハンドル.\r
+ MEMID hCompData3; // コンパイルデータ3.ハンドル.\r
+ MEMID hCompData4; // コンパイルデータ4.ハンドル.\r
} JRE2, *PJRE2, NEAR*NPJRE2, FAR*LPJRE2;\r
#pragma pack()\r
\r
-// ------------------------------------------------ ÌßÛÄÀ²Ìß\82¨\82æ\82ÑϸÛ\r
+// ------------------------------------------------ プロトタイプおよびマクロ\r
#ifdef __cplusplus // caution! it's NOT cpulspuls!!!\r
extern "C"{\r
#endif // __cplusplus\r
\r
-// \83o\81[\83W\83\87\83\93\82É\8aÖ\8cW\82È\82¢API\r
+// バージョンに関係ないAPI\r
BOOL EXTAPI IsMatch(LPSTR lpszStr, LPSTR lpszRe);\r
int EXTAPI GlobalReplace(LPSTR lpszRe, LPSTR lpszObj, LPSTR lpszStr, LPHANDLE lphGMemTo);\r
WORD EXTAPI JreGetVersion(void);\r
#if defined(JRE_BUILDTYPE_WIN16)\r
- MEMID EXTAPI DecodeEscSeqAlloc2(LPSTR lpszRe); // 16bit Windows\82Ì\88â\95¨.\r
+ MEMID EXTAPI DecodeEscSeqAlloc2(LPSTR lpszRe); // 16bit Windowsの遺物.\r
#endif // defined(JRE_BUILDTYPE_WIN16)\r
UINT EXTAPI DecodeEscSeq(LPSTR lpszRe, LPSTR lpszBuff, UINT uiSize); // new!\r
int EXTAPI GetJreMessage(int nMessageType, int nLanguage, LPSTR lpszBuff, int cbBuff);\r
-// \83o\81[\83W\83\87\83\931API\r
+// バージョン1API\r
BOOL EXTAPI JreOpen(LPJRE lpjreJre);\r
BOOL EXTAPI JreCompile(LPJRE lpjreJre, LPSTR lpszRe);\r
BOOL EXTAPI JreGetMatchInfo(LPJRE lpjreJre, LPSTR lpszStr);\r
BOOL EXTAPI JreClose(LPJRE lpjreJre);\r
-// \83o\81[\83W\83\87\83\932API\r
+// バージョン2API\r
BOOL EXTAPI Jre2Open(LPJRE2 lpjreJre);\r
BOOL EXTAPI Jre2Compile(LPJRE2 lpjreJre, LPSTR lpszRe);\r
BOOL EXTAPI Jre2GetMatchInfo(LPJRE2 lpjreJre, LPSTR lpszStr);\r
}\r
#endif // __cplusplus\r
\r
-// ----------------------------------------------------------- \8c^\92è\8b`\r
-// GetProcAddress\82ð\8eg\97p\82·\82é\8dÛ\82Ì\83|\83C\83\93\83^\95Ï\90\94\82ð\90é\8c¾\82µ\82â\82·\82\82µ\82Ä\82¨\82.\r
+// ----------------------------------------------------------- 型定義\r
+// GetProcAddressを使用する際のポインタ変数を宣言しやすくしておく.\r
typedef BOOL (EXTAPI*LPISMATCH) (LPSTR, LPSTR);\r
typedef int (EXTAPI*LPGLOBALREPLACE) (LPSTR, LPSTR, LPSTR, LPHANDLE);\r
typedef WORD (EXTAPI*LPJREGETVERSION) (VOID);\r