OSDN Git Service

Change to specify explicitly code pages.
[ffftp/ffftp.git] / regexp.c
1 /*=============================================================================\r
2 *\r
3 *                                                               正規表現検索\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define STRICT\r
31 #include <stdio.h>\r
32 #include <stdlib.h>\r
33 // IPv6対応\r
34 //#include <winsock.h>\r
35 #include <winsock2.h>\r
36 #include <windowsx.h>\r
37 \r
38 #include "common.h"\r
39 #include "jreusr.h"\r
40 \r
41 \r
42 /*===== ローカルなワーク =====*/\r
43 \r
44 static JRE2 m_jreData;\r
45 static HINSTANCE m_hDll = NULL;\r
46 static LPJRE2OPEN m_lpJre2Open = NULL;\r
47 static LPJRE2COMPILE m_lpJre2Compile = NULL;\r
48 static LPJRE2GETMATCHINFO m_lpJre2MatchInfo = NULL;\r
49 static LPJRE2CLOSE m_lpJre2Close = NULL;\r
50 static LPJREGETVERSION m_lpJreGetVersion = NULL;\r
51 static LPGETJREMESSAGE m_lpGetJreMessage = NULL;\r
52 \r
53 \r
54 \r
55 /*----- 正規表現ライブラリをロードする ----------------------------------------\r
56 *\r
57 *       Parameter\r
58 *               なし\r
59 *\r
60 *       Return Value\r
61 *               int ステータス\r
62 *                       TRUE/FALSE\r
63 *----------------------------------------------------------------------------*/\r
64 \r
65 int LoadJre(void)\r
66 {\r
67         int Sts;\r
68 \r
69         // UTF-8対応\r
70         // JRE32.DLLはUTF-8に非対応\r
71 #ifdef DISABLE_JRE32DLL\r
72         return FALSE;\r
73 #endif\r
74         Sts = FALSE;\r
75         if((m_hDll = LoadLibrary("jre32.dll")) != NULL)\r
76         {\r
77                 m_lpJre2Open = (LPJRE2OPEN)GetProcAddress(m_hDll, "Jre2Open");\r
78                 m_lpJre2Compile = (LPJRE2COMPILE)GetProcAddress(m_hDll, "Jre2Compile");\r
79                 m_lpJre2MatchInfo = (LPJRE2GETMATCHINFO)GetProcAddress(m_hDll, "Jre2GetMatchInfo");\r
80                 m_lpJre2Close = (LPJRE2CLOSE)GetProcAddress(m_hDll, "Jre2Close");\r
81                 m_lpJreGetVersion = (LPJREGETVERSION)GetProcAddress(m_hDll, "JreGetVersion");\r
82                 m_lpGetJreMessage = (LPGETJREMESSAGE)GetProcAddress(m_hDll, "GetJreMessage");\r
83 \r
84                 if((m_lpJre2Open != NULL) &&\r
85                    (m_lpJre2Compile != NULL) &&\r
86                    (m_lpJre2MatchInfo != NULL) &&\r
87                    (m_lpJre2Close != NULL) &&\r
88                    (m_lpJreGetVersion != NULL) &&\r
89                    (m_lpJreGetVersion != NULL))\r
90                 {\r
91                         memset(&m_jreData, 0, sizeof(JRE2));\r
92                         m_jreData.dwSize = sizeof(JRE2);\r
93                         m_jreData.wTranslate = 1;\r
94 \r
95                         if((*m_lpJre2Open)(&m_jreData) == TRUE)\r
96                                 Sts = TRUE;\r
97                         else\r
98                                 ReleaseJre();\r
99                 }\r
100 \r
101         }\r
102         return(Sts);;\r
103 }\r
104 \r
105 \r
106 /*----- 正規表現ライブラリをリリースする --------------------------------------\r
107 *\r
108 *       Parameter\r
109 *               なし\r
110 *\r
111 *       Return Value\r
112 *               なし\r
113 *----------------------------------------------------------------------------*/\r
114 \r
115 void ReleaseJre(void)\r
116 {\r
117         if(m_hDll != NULL)\r
118                 FreeLibrary(m_hDll);\r
119         m_hDll = NULL;\r
120 \r
121         return;\r
122 }\r
123 \r
124 \r
125 /*----- 正規表現ライブラリが使えるかどうかを返す ------------------------------\r
126 *\r
127 *       Parameter\r
128 *               なし\r
129 *\r
130 *       Return Value\r
131 *               int 正規表現ライブラリが使えるかどうか\r
132 *                       TRUE/FALSE\r
133 *----------------------------------------------------------------------------*/\r
134 \r
135 int AskJreUsable(void)\r
136 {\r
137         int Sts;\r
138 \r
139         Sts = FALSE;\r
140         if(m_hDll != NULL)\r
141                 Sts = TRUE;\r
142 \r
143         return(Sts);\r
144 }\r
145 \r
146 \r
147 /*----- 正規表現ライブラリのバージョンを返す a---------------------------------\r
148 *\r
149 *       Parameter\r
150 *               なし\r
151 *\r
152 *       Return Value\r
153 *               int バージョン\r
154 *----------------------------------------------------------------------------*/\r
155 \r
156 int GetJreVersion(void)\r
157 {\r
158         int Ver;\r
159 \r
160         Ver = -1;\r
161         if(m_hDll != NULL)\r
162                 Ver = (*m_lpJreGetVersion)();\r
163 \r
164         return(Ver);\r
165 }\r
166 \r
167 \r
168 /*----- 正規表現検索式をコンパイルする ----------------------------------------\r
169 *\r
170 *       Parameter\r
171 *               kchar *Str : 検索式\r
172 *\r
173 *       Return Value\r
174 *               int ステータス\r
175 *                       TRUE/FALSE\r
176 *----------------------------------------------------------------------------*/\r
177 \r
178 int JreCompileStr(char *Str)\r
179 {\r
180         int Sts;\r
181 \r
182         Sts = FALSE;\r
183         if(m_hDll != NULL)\r
184                 Sts = (*m_lpJre2Compile)(&m_jreData, Str);\r
185 \r
186         return(Sts);\r
187 }\r
188 \r
189 \r
190 /*----- 文字列が一致するかどうかを返す ----------------------------------------\r
191 *\r
192 *       Parameter\r
193 *               char *Str : 文字列\r
194 *               UINT nStart : 検索開始位置\r
195 *\r
196 *       Return Value\r
197 *               char *見つかった位置\r
198 *                       NULL=見つからなかった\r
199 *----------------------------------------------------------------------------*/\r
200 \r
201 char *JreGetStrMatchInfo(char *Str, UINT nStart)\r
202 {\r
203         char *Ret;\r
204 \r
205         Ret = NULL;\r
206         if(m_hDll != NULL)\r
207         {\r
208                 m_jreData.nStart = nStart;\r
209                 if((*m_lpJre2MatchInfo)(&m_jreData, Str) == TRUE)\r
210                          Ret = Str + m_jreData.nPosition;\r
211         }\r
212         return(Ret);\r
213 }\r
214 \r
215 \r