1 // begin of jreusr.h
\r
7 // ---------------------------------------------------
\r
8 // Prevent multiple includes.
\r
10 // _os_os2はこれ(jreusr.h)をインクルードするユーザーが定義する
\r
11 #if defined(_OS_OS2)
\r
13 // __OS2_H__ is for bc 2.0 e
\r
14 // __OS2_H__ is for bc 1.5 e
\r
15 #if !defined(__IBMC__) || !defined(__OS2_H__)
\r
16 // 他のクラスでtype.hをインクルードさせないように先にincludeする.
\r
17 // INCL_???など必要な定数は先に定義しておく.
\r
19 #endif // defined(__IBMC__) || defined(__OS2_H__)
\r
21 #define JRE_BUILDTYPE_OS2PM
\r
24 // in case of windows
\r
26 // bc4.5 e __WINDOWS_H,
\r
27 // bc4.0 j __WINDOWS_H,
\r
28 // bc3.1 j __WINDOWS_H,
\r
29 // msvc4.1 j _INC_WINDOWS, _WINDOWS_
\r
30 // msvc4.0 j _INC_WINDOWS,
\r
31 // msvc2.0 j ???, ???
\r
32 // msvc1.0 j _INC_WINDOWS,
\r
34 // WinCE SDK - WIN32 and PEGASUS
\r
36 #if !defined(__WINDOWS_H) && !defined(_INC_WINDOWS)
\r
40 // 他のクラスでtype.hをインクルードさせないように先にincludeする.
\r
41 #include <windows.h>
\r
42 #endif // !defined(__WINDOWS_H) && !defined(_INC_WINDOWS)
\r
44 #if defined(__WIN32__) || defined(WIN32)
\r
45 #define JRE_BUILDTYPE_WIN32
\r
46 #if defined(PEGASUS)
\r
47 #define JRE_SUBSET_WINCE
\r
50 #define JRE_BUILDTYPE_WIN16
\r
52 #define JRE_BUILDTYPE_WINDOWS
\r
54 #endif // os/2 or windows
\r
56 // ---------------------------------------------------
\r
57 #if defined(JRE_BUILDTYPE_OS2PM)
\r
58 // in case of JRE_BUILDTYPE_OS2PM
\r
59 // 以下,jre/os2ローカルの定義
\r
60 #if !defined(EXTAPI)
\r
61 #define EXTAPI _export EXPENTRY
\r
62 #endif // !defined(EXTAPI)
\r
64 typedef void* MEMID;
\r
65 #endif // !defined(MEMID)
\r
68 typedef PSZ PSTR, LPSTR;
\r
69 typedef int (*FARPROC)(void); // farproc
\r
70 //os2にはUSHORT,ULONGがある.
\r
71 typedef USHORT WORD;
\r
72 typedef ULONG DWORD;
\r
73 // OS/2にはSHANDLEとLHANDLEがある.
\r
74 typedef LHANDLE HANDLE; // 汎用ハンドルを作っておいて……
\r
75 typedef HANDLE GLOBALHANDLE;
\r
76 typedef HANDLE*PHANDLE, *LPHANDLE;
\r
79 // in case of JRE_BUILDTYPE_WIN32 or JRE_BUILDTYPE_WIN16 (= JRE_BUILDTYPE_WINDOWS)
\r
80 // 以下,jre/winローカルの定義
\r
81 #if !defined(EXTAPI)
\r
82 #if defined(_MSC_VER)
\r
83 #define EXTAPI WINAPI // VC2では_exportが通らないので注意.
\r
85 #if defined(__BORLANDC__)
\r
86 #if defined(_TEST_EXE)
\r
87 #define EXTAPI WINAPI
\r
89 #define EXTAPI _export WINAPI
\r
92 #endif // !defined(EXTAPI)
\r
95 #if defined(JRE_BUILDTYPE_WIN32)
\r
96 typedef void*MEMID; // 明示的にポインタにしました.
\r
98 typedef HGLOBAL MEMID;
\r
100 #endif // !defined(MEMID)
\r
104 // --------------------------------------------------- グローバル変数
\r
108 // ------------------------------------------------------------- 定数
\r
109 // _JRE_ERR_CODEと_JRE_WARN_CODEのシンボルは山田がデバッグ時に使用しています.
\r
111 #define _JRE_ERR_CODE
\r
112 // エラーコード.nErrorが1~63まで. int型
\r
113 #define CantAllocate ( 1) // メモリの確保ができない.絶対的なメモリ不足.
\r
114 #define MemoryTooFew1 ( 2) // メモリが足りない1.(実行時に決まるもの.メモリサイズの予測に失敗した)
\r
115 #define MemoryTooFew2 ( 3) // メモリが足りない2.(DLL作成時に決まるもの)
\r
116 #define ReTooLong (10) // 正規表現が長すぎる.
\r
117 #define TooComplex (13) // もっと簡単な表現にして下さい.このDLLの弱いパターンで,見つけられない.ただし滅多な事では発生しない.
\r
118 #define MismatchBracket (20) // 括弧の対応が正しくない.
\r
119 #define InvalidChClass (21) // キャラクタクラスの内容が解釈できない.殆どの場合範囲指定が正しくない.
\r
120 #define EscErr (24) // エスケープシークェンスが解釈できない.
\r
121 #define Unknown (31) // なんだか良くわからないエラー.複合的な要因で発生するエラー.殆どがメモリサイズの予測に失敗.
\r
122 #define NoReString (32) // 検索パターンを指定して下さい.正規表現長が0バイト.
\r
123 #define IncorrectUsing (33) // パラメータがおかしい.DLLの不正な使用法.
\r
124 #define ReNotExist (34) // 検索する前にコンパイルして下さい.
\r
125 #define InternalErr (35) // DLLのバグを検出した.これが発生したら作者に連絡して欲しい.
\r
126 #define UsrAbort (36) // ユーザー(アプリケーション)による中断.
\r
127 #define OldVersion (37) // 古い(解釈できない)バージョンの呼び出し手順を使用した.
\r
128 // CantAllocate, TooComplex, MemoryTooFew2, ReNotExist, IncorrectUsing, UsrAbortは検索時にも発生するもの
\r
130 #define _JRE_WARN_CODE
\r
131 // 警告コード. レポートコード. jre2構造体のnWarningメンバ.
\r
132 // これはそれぞれのビットにマッピングする可能性が高いので,
\r
133 // if (CwInlinePattern | jre2.nWarning){
\r
136 #define CwInlinePattern (2) // 行内の処理につき,再呼び出しの必要はない.
\r
138 #define JGC_SHORT (1)
\r
139 #define JGC_LONG (2)
\r
141 // jre.dllで使用するメッセージの最大長(保証).このサイズのバッファに収まらない文字列は渡しません(nullまで含めてこのサイズ).
\r
142 #define JRE_MAXLEN (128)
\r
144 // GetJreMessageの言語番号.
\r
145 #define GJM_JPN (0)
\r
146 #define GJM_ENG (1)
\r
148 // ----------------------------------------------------------- 構造体
\r
149 // JRE構造体. バージョンにかかわらずjre構造体のアラインメントは8bit(1byte)です。
\r
151 // JRE構造体は極力使用しないでください.今後のバージョンで廃止します(バージョン2.xxまででサポートを止めます).
\r
152 // これに代わる構造体はJRE2構造体です.
\r
153 typedef struct tagJRE{
\r
154 BOOL bConv; // この構造体の使用中を示すフラグ.
\r
155 int nStart; // 検索開始位置.バイト数.先頭は0.
\r
156 int nWarning; // ウォーニングコード.
\r
157 int nError; // エラーコード.
\r
158 int nLength; // マッチ長.バイト数.
\r
159 int nPosition; // マッチ位置.先頭は0.(お恥ずかしい)
\r
160 WORD wTranslate; // 変換テーブル番号.
\r
161 LPSTR lpszTable; // 変換テーブル.
\r
162 FARPROC lpfnUsrFunc; // コールバック関数へのFARポインタ.
\r
163 int nCompData1; // コンパイルデータ1.
\r
164 MEMID hCompData2; // コンパイルデータ2.ハンドル.
\r
165 MEMID hCompData3; // コンパイルデータ3.ハンドル.
\r
166 MEMID hCompData4; // コンパイルデータ4.ハンドル.
\r
167 } JRE, *PJRE, NEAR*NPJRE, FAR*LPJRE;
\r
172 // バージョン1.06以降はこの構造体を使用してください.
\r
173 // ただし,バージョン1.xxでは仕様が流動的です(どないせーちゅうねん).
\r
174 typedef struct tagJRE2{
\r
175 DWORD dwSize; // この構造体のサイズ.
\r
176 BOOL bConv; // この構造体の使用中を示すフラグ.
\r
177 UINT nStart; // 検索開始位置.バイト数.先頭は0.
\r
178 UINT nWarning; // ウォーニングコード. (v1.11からUINTに変更)
\r
179 int nError; // エラーコード.
\r
180 UINT nLength; // マッチ長.バイト数.
\r
181 UINT nPosition; // マッチ位置.先頭は0.(お恥ずかしい)
\r
182 WORD wTranslate; // 変換テーブル番号.
\r
183 LPSTR lpszTable; // 変換テーブル.
\r
184 FARPROC lpfnUsrFunc; // コールバック関数へのFARポインタ(使わないように).
\r
185 UINT nCompData1; // コンパイルデータ1.
\r
186 MEMID hCompData2; // コンパイルデータ2.ハンドル.
\r
187 MEMID hCompData3; // コンパイルデータ3.ハンドル.
\r
188 MEMID hCompData4; // コンパイルデータ4.ハンドル.
\r
189 } JRE2, *PJRE2, NEAR*NPJRE2, FAR*LPJRE2;
\r
192 // ------------------------------------------------ プロトタイプおよびマクロ
\r
193 #ifdef __cplusplus // caution! it's NOT cpulspuls!!!
\r
195 #endif // __cplusplus
\r
198 BOOL EXTAPI IsMatch(LPSTR lpszStr, LPSTR lpszRe);
\r
199 int EXTAPI GlobalReplace(LPSTR lpszRe, LPSTR lpszObj, LPSTR lpszStr, LPHANDLE lphGMemTo);
\r
200 WORD EXTAPI JreGetVersion(void);
\r
201 #if defined(JRE_BUILDTYPE_WIN16)
\r
202 MEMID EXTAPI DecodeEscSeqAlloc2(LPSTR lpszRe); // 16bit Windowsの遺物.
\r
203 #endif // defined(JRE_BUILDTYPE_WIN16)
\r
204 UINT EXTAPI DecodeEscSeq(LPSTR lpszRe, LPSTR lpszBuff, UINT uiSize); // new!
\r
205 int EXTAPI GetJreMessage(int nMessageType, int nLanguage, LPSTR lpszBuff, int cbBuff);
\r
207 BOOL EXTAPI JreOpen(LPJRE lpjreJre);
\r
208 BOOL EXTAPI JreCompile(LPJRE lpjreJre, LPSTR lpszRe);
\r
209 BOOL EXTAPI JreGetMatchInfo(LPJRE lpjreJre, LPSTR lpszStr);
\r
210 BOOL EXTAPI JreClose(LPJRE lpjreJre);
\r
212 BOOL EXTAPI Jre2Open(LPJRE2 lpjreJre);
\r
213 BOOL EXTAPI Jre2Compile(LPJRE2 lpjreJre, LPSTR lpszRe);
\r
214 BOOL EXTAPI Jre2GetMatchInfo(LPJRE2 lpjreJre, LPSTR lpszStr);
\r
215 BOOL EXTAPI Jre2Close(LPJRE2 lpjreJre);
\r
220 #endif // __cplusplus
\r
222 // ----------------------------------------------------------- 型定義
\r
223 // GetProcAddressを使用する際のポインタ変数を宣言しやすくしておく.
\r
224 typedef BOOL (EXTAPI*LPISMATCH) (LPSTR, LPSTR);
\r
225 typedef int (EXTAPI*LPGLOBALREPLACE) (LPSTR, LPSTR, LPSTR, LPHANDLE);
\r
226 typedef WORD (EXTAPI*LPJREGETVERSION) (VOID);
\r
227 #if defined(JRE_BUILDTYPE_WIN16)
\r
228 typedef MEMID (EXTAPI*LPDECODEESCSEQALLOC2) (LPSTR);
\r
229 #endif // defined(JRE_BUILDTYPE_WIN16)
\r
230 typedef UINT (EXTAPI*LPDECODEESCSEQ) (LPSTR lpszRe, LPSTR lpszBuff, UINT uiSize);
\r
231 typedef int (EXTAPI*LPGETJREMESSAGE) (int, int, LPSTR, int);
\r
232 typedef BOOL (EXTAPI*LPJRE2OPEN) (LPJRE2);
\r
233 typedef BOOL (EXTAPI*LPJRE2COMPILE) (LPJRE2, LPSTR);
\r
234 typedef BOOL (EXTAPI*LPJRE2GETMATCHINFO) (LPJRE2, LPSTR);
\r
235 typedef BOOL (EXTAPI*LPJRE2CLOSE) (LPJRE2);
\r