OSDN Git Service

(LibGoblin)
[drdeamon64/drdeamon64.git] / libedittext / drd64_libedittext_cursorapi_info.c
1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2
3                          D r . D e a m o n  6 4
4                         for INTEL64(R), AMD64(R)
5         
6    Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
10
11  1. Redistributions of source code must retain the above copyright notice,
12     this list of conditions and the following disclaimer.
13  2. Redistributions in binary form must reproduce the above copyright
14     notice, this list of conditions and the following disclaimer in the
15     documentation and/or other materials provided with the distribution.
16
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30
31 /* File Info -----------------------------------------------------------
32 File: drd64_.c
33 Function: 
34 Comment: 
35 ----------------------------------------------------------------------*/
36
37 #define DRD64_SRC_LIBEDITTEXT_CURSORAPI_INFO
38 #include"drd64_libedittext.h"
39
40 #define LOCATION(n)     DRD64_ERR_LOCATION( \
41                                                 DRD64_ERROR_MODULE_LIBEDITTEXT, DRD64_ERROR_ARCH_NODEPEND, \
42                                                 DRD64_SRC_LIBEDITTEXT_CURSORAPI_INFO_SRCID, (n))
43
44
45 /***********************************************************************
46 ***********************************************************************/
47 #define FUNCID_LibEditText_GetCursorPosition    0x01
48 LIBEDITTEXT_API_CURSORAPI_INFO
49 int
50         LibEditText_GetCursorPosition(
51                         int             i_tinfoid,
52                         int             i_curid,
53                         DWord   *pdw_curline,
54                         DWord   *pdw_curpos )
55 {
56         LibEditText_TextInfo    *p_tinfo;
57         LibEditText_Cursor              *p_cursor;
58
59         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
60         if( NULL == p_tinfo )   {
61                 LibBrownie_Error_SetErrorInfo(
62                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
63                                 LOCATION( FUNCID_LibEditText_GetCursorPosition ),
64                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
65
66                 return -0x01;
67         }
68
69         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
70         if( NULL == p_cursor )  {
71                 LibBrownie_Error_SetErrorInfo(
72                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
73                                 LOCATION( FUNCID_LibEditText_GetCursorPosition ),
74                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
75
76                 return -0x02;
77         }
78
79         if( NULL != pdw_curline )       { *pdw_curline  = p_cursor->dw_line; }
80         if( NULL != pdw_curpos )        { *pdw_curpos   = p_cursor->dw_pos; }
81
82         return  0x00;
83 }
84
85         
86 /***********************************************************************
87 ***********************************************************************/
88 #define FUNCID_LibEditText_GetMaxLines  0x02
89 LIBEDITTEXT_API_CURSORAPI_INFO
90 DWord
91         LibEditText_GetMaxLines(
92                         int             i_tinfoid )
93 {
94         LibEditText_TextInfo    *p_tinfo;
95
96         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
97         if( NULL == p_tinfo )   {
98                 LibBrownie_Error_SetErrorInfo(
99                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
100                                 LOCATION( FUNCID_LibEditText_GetMaxLines ),
101                                 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
102
103                 return MAXLINES;
104         }
105
106         return  p_tinfo->dw_maxline;
107 }
108
109         
110 /***********************************************************************
111 Implemented
112 ***********************************************************************/
113 #define FUNCID_LibEditText_GetCursorRangeNextString     0x03
114 LIBEDITTEXT_API_CURSORAPI_INFO
115 const char *
116         LibEditText_GetCursorRangeNextString(
117                         int             i_tinfoid,
118                         int             i_curid,
119                         DWord   *pdw_len )
120 {
121         Byte                                    *pb_data;
122         LibEditText_TextInfo    *p_tinfo;
123         LibEditText_Cursor              *p_cursor;
124         LibEditText_LineInfo    *p_line;
125
126         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
127         if( NULL == p_tinfo )   {
128                 LibBrownie_Error_SetErrorInfo(
129                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
130                                 LOCATION( FUNCID_LibEditText_GetCursorRangeNextString ),
131                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
132
133                 return NULL;
134         }
135
136         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
137         if( NULL == p_cursor )  {
138                 LibBrownie_Error_SetErrorInfo(
139                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
140                                 LOCATION( FUNCID_LibEditText_GetCursorRangeNextString ),
141                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
142
143                 return NULL;
144         }
145
146         if( p_cursor->dw_now_rngline == p_cursor->dw_rangelines )       { return NULL; }
147
148         p_line  = LINFO(p_tinfo, p_cursor->dw_now_linfoid);
149         if( NULL == p_line )    {
150                 LibBrownie_Error_SetErrorInfo(
151                                 DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x02 ),
152                                 LOCATION( FUNCID_LibEditText_GetCursorRangeNextString ), errno,
153                                 (QWord)p_cursor->dw_now_linfoid, (QWord)p_cursor->dw_now_rngline, __LINE__ ); 
154
155                 return NULL;
156         }
157
158         if( NULL != pdw_len )   { *pdw_len      = p_line->dw_strlen; }
159         pb_data = p_tinfo->pb_text + p_line->dw_start;
160         
161         p_cursor->dw_now_linfoid        = p_line->dw_next;
162         p_cursor->dw_now_rngline++;
163
164         return (const char *)pb_data;
165 }
166
167         
168 /***********************************************************************
169 Implemented
170 ***********************************************************************/
171 #define FUNCID_LibEditText_GetCursorRangeString 0x04
172 LIBEDITTEXT_API_CURSORAPI_INFO
173 const char *
174         LibEditText_GetCursorRangeString(
175                         int             i_tinfoid,
176                         int             i_curid,
177                         DWord   *pdw_len )
178 {
179         Byte                                    *pb_data;
180         LibEditText_TextInfo    *p_tinfo;
181         LibEditText_Cursor              *p_cursor;
182         LibEditText_LineInfo    *p_line;
183
184         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
185         if( NULL == p_tinfo )   {
186                 LibBrownie_Error_SetErrorInfo(
187                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
188                                 LOCATION( FUNCID_LibEditText_GetCursorRangeString ),
189                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
190
191                 return NULL;
192         }
193
194         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
195         if( NULL == p_cursor )  {
196                 LibBrownie_Error_SetErrorInfo(
197                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
198                                 LOCATION( FUNCID_LibEditText_GetCursorRangeString ),
199                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
200
201                 return NULL;
202         }
203
204         if( 0 == p_cursor->dw_rangelines )      { return NULL; }
205
206         p_line  = LINFO(p_tinfo, p_cursor->dw_start_lineid);
207         assert( NULL != p_line );
208
209         if( NULL != pdw_len )   { *pdw_len      = p_line->dw_strlen; }
210         pb_data = p_tinfo->pb_text + p_line->dw_start;
211         
212         p_cursor->dw_now_linfoid        = p_line->dw_next;
213         p_cursor->dw_now_rngline        = 1;
214
215         return  (const char *)pb_data;
216 }
217
218         
219 /***********************************************************************
220 Implemented
221 ***********************************************************************/
222 #define FUNCID_LibEditText_GetCursorEndString   0x05
223 LIBEDITTEXT_API_CURSORAPI_INFO
224 const char *
225         LibEditText_GetCursorEndString(
226                         int             i_tinfoid,
227                         int             i_curid,
228                         DWord   *pdw_len )
229 {
230         Byte                                    *pb_data;
231         LibEditText_TextInfo    *p_tinfo;
232         LibEditText_Cursor              *p_cursor;
233         LibEditText_LineInfo    *p_line;
234
235         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
236         if( NULL == p_tinfo )   {
237                 LibBrownie_Error_SetErrorInfo(
238                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
239                                 LOCATION( FUNCID_LibEditText_GetCursorEndString ),
240                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
241
242                 return NULL;
243         }
244
245         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
246         if( NULL == p_cursor )  {
247                 LibBrownie_Error_SetErrorInfo(
248                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
249                                 LOCATION( FUNCID_LibEditText_GetCursorEndString ),
250                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
251
252                 return NULL;
253         }
254
255         if( 0 == p_cursor->dw_rangelines )      { return NULL; }
256
257         p_line  = LINFO(p_tinfo, p_cursor->dw_end_lineid);
258         
259         if( NULL != pdw_len )   { *pdw_len      = p_line->dw_strlen; }
260
261         pb_data = p_tinfo->pb_text + p_line->dw_start;
262
263         return  (const char *)pb_data;
264 }
265
266         
267 /***********************************************************************
268 Implemented
269 ***********************************************************************/
270 #define FUNCID_LibEditText_GetCursorStartString 0x06
271 LIBEDITTEXT_API_CURSORAPI_INFO
272 const char *
273         LibEditText_GetCursorStartString(
274                         int             i_tinfoid,
275                         int             i_curid,
276                         DWord   *pdw_len )
277 {
278         Byte                                    *pb_data;
279         LibEditText_TextInfo    *p_tinfo;
280         LibEditText_Cursor              *p_cursor;
281         LibEditText_LineInfo    *p_line;
282
283         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
284         if( NULL == p_tinfo )   {
285                 LibBrownie_Error_SetErrorInfo(
286                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
287                                 LOCATION( FUNCID_LibEditText_GetCursorStartString ),
288                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
289
290                 return NULL;
291         }
292
293         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
294         if( NULL == p_cursor )  {
295                 LibBrownie_Error_SetErrorInfo(
296                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
297                                 LOCATION( FUNCID_LibEditText_GetCursorStartString ),
298                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
299
300                 return NULL;
301         }
302
303         if( 0 == p_cursor->dw_rangelines )      { return NULL; }
304
305         p_line  = LINFO(p_tinfo, p_cursor->dw_start_lineid);
306         
307         if( NULL != pdw_len )   { *pdw_len      = p_line->dw_strlen; }
308
309         pb_data = p_tinfo->pb_text + p_line->dw_start;
310
311         return  (const char *)pb_data;
312 }
313
314         
315 /***********************************************************************
316 Implemented
317 ***********************************************************************/
318 #define FUNCID_LibEditText_GetCursorLineString  0x07
319 LIBEDITTEXT_API_CURSORAPI_INFO
320 const char *
321         LibEditText_GetCursorLineString(
322                         int             i_tinfoid,
323                         int             i_curid,
324                         DWord   *pdw_len  )
325 {
326         Byte                                    *pb_str;
327         LibEditText_TextInfo    *p_tinfo;
328         LibEditText_Cursor              *p_cursor;
329         LibEditText_LineInfo    *p_line;
330
331         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
332         if( NULL == p_tinfo )   {
333                 LibBrownie_Error_SetErrorInfo(
334                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
335                                 LOCATION( FUNCID_LibEditText_GetCursorLineString ),
336                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
337
338                 return NULL;
339         }
340
341         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
342         if( NULL == p_cursor )  {
343                 LibBrownie_Error_SetErrorInfo(
344                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
345                                 LOCATION( FUNCID_LibEditText_GetCursorLineString ),
346                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
347
348                 return NULL;
349         }
350
351         p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
352         assert( NULL != p_line );
353
354         if( NULL != pdw_len )   { *pdw_len      = p_line->dw_strlen; }
355
356         pb_str  = p_tinfo->pb_text + p_line->dw_start;
357
358         return  (const char *)pb_str;
359 }
360
361         
362 /***********************************************************************
363 Implemented
364 ***********************************************************************/
365 #define FUNCID_LibEditText_AllocCursor  0x08
366 LIBEDITTEXT_API_CURSORAPI_INFO
367 int
368         LibEditText_AllocCursor(
369                         int     i_tinfoid,
370                         DWord dw_ranges )
371 {
372         int             i_curid;
373         LibEditText_TextInfo    *p_tinfo;
374
375         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
376         if( NULL == p_tinfo )   {
377                 LibBrownie_Error_SetErrorInfo(
378                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
379                                 LOCATION( FUNCID_LibEditText_AllocCursor ),
380                                 errno, (QWord)i_tinfoid, (QWord)dw_ranges, __LINE__ ); 
381
382                 return -0x01;
383         }
384
385         i_curid = LibEditText_CursorInfo_AllocCursor( p_tinfo, dw_ranges );
386         
387         return i_curid;
388 }
389
390
391 /***********************************************************************
392 Implemented
393 ***********************************************************************/
394 #define FUNCID_LibEditText_FreeCursor   0x09
395 LIBEDITTEXT_API_CURSORAPI_INFO
396 int
397         LibEditText_FreeCursor(
398                         int     i_tinfoid,
399                         int     i_curid )
400 {
401         int             i_result;
402         LibEditText_TextInfo    *p_tinfo;
403
404         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
405         if( NULL == p_tinfo )   {
406                 LibBrownie_Error_SetErrorInfo(
407                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
408                                 LOCATION( FUNCID_LibEditText_FreeCursor ),
409                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
410
411                 return -0x01;
412         }
413
414         i_result        = LibEditText_CursorInfo_FreeCursor( p_tinfo, i_curid );
415
416         return i_result;
417 }
418
419
420
421 /* EOF of drd64_.c ----------------------------------- */