OSDN Git Service

* [libintel64asm] Create Test Binary File.
[drdeamon64/drdeamon64.git] / libedittext / drd64_libedittext_cursorapi_edit.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_EDIT
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_EDIT_SRCID, (n))
43
44 /***********************************************************************
45   * InsertString
46   * InsertChar
47   * InsertLine
48   * AppendLine
49   * BackSpace
50   * DeleteString
51   * DeleteChar
52   * DeleteLine
53   * JoinLine
54 ***********************************************************************/
55
56
57 /***********************************************************************
58 Implemented
59 ***********************************************************************/
60 #define FUNCID_LibEditText_InsertString 0x01
61 LIBEDITTEXT_API_CURSORAPI_EDIT
62 int
63         LibEditText_InsertString(
64                         int             i_tinfoid,
65                         int             i_curid,
66                         char    *pstr_data,
67                         DWord   dw_size )
68 {
69         int                                             i_result        = 0x00;
70         DWord                                   dw_pos;
71         DWord                                   dw_len;
72         DWord                                   dw_line;
73         Byte                                    *pb_pos;
74         Byte                                    *pb_start;
75         LibEditText_TextInfo    *p_tinfo        = NULL;
76         LibEditText_Cursor              *p_cursor       = NULL;
77
78         if(( NULL == pstr_data ) || ( 0 == dw_size ))   {
79                 LibBrownie_Error_SetErrorInfo(
80                                 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
81                                 LOCATION( FUNCID_LibEditText_InsertString ),
82                                 errno, (QWord)pstr_data, (QWord)dw_size, __LINE__ ); 
83
84                 i_result        = -0x01;
85                 goto    goto_LibEditText_InsertString_post;
86         }
87
88         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
89         if( NULL == p_tinfo )   {
90                 LibBrownie_Error_SetErrorInfo(
91                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
92                                 LOCATION( FUNCID_LibEditText_InsertString ),
93                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
94
95                 i_result        = -0x02;
96                 goto    goto_LibEditText_InsertString_post;
97         }
98
99         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
100         if( NULL == p_cursor )  {
101                 LibBrownie_Error_SetErrorInfo(
102                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
103                                 LOCATION( FUNCID_LibEditText_InsertString ),
104                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
105
106                 i_result        = -0x03;
107                 goto    goto_LibEditText_InsertString_post;
108         }
109
110         pb_pos          = (Byte *)pstr_data;
111         pb_start        = pb_pos;
112         dw_len          = 0;
113         for( dw_pos = 0; dw_pos < dw_size; dw_pos++ )   {
114                 if( '\n' == *pb_pos )   {
115                         i_result        = LibEditText_LineEdit_InsertString(
116                                                                 p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line, 
117                                                                 p_cursor->dw_pos, pb_start, dw_len, 0x00 );
118                         if( 0x00 != i_result )  {
119                                 LibBrownie_Error_SetErrorInfo(
120                                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x06 ),
121                                                 LOCATION( FUNCID_LibEditText_InsertString ),
122                                                 errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
123
124                                 goto    goto_LibEditText_InsertString_post;
125                         }
126
127                         dw_line = LibEditText_LineCtrl_AddLine(
128                                                         p_tinfo, p_cursor->dw_lineid, p_cursor->dw_line, 0, 0x00, 0x00 );
129                         if( INVALID_LINE == dw_line )   {
130                                 LibBrownie_Error_SetErrorInfo(
131                                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
132                                                 LOCATION( FUNCID_LibEditText_InsertString ),
133                                                 errno, (QWord)p_cursor->dw_lineid, (QWord)p_cursor->dw_line, __LINE__ ); 
134
135                                 i_result        = -0x04;
136                                 goto    goto_LibEditText_InsertString_post;
137                         }
138
139                         i_result        = LibEditText_CursorMove_MoveDown( p_tinfo, p_cursor, 1 );
140                         if( 0x00 != i_result )  { break; }
141
142                         pb_start        = pb_pos + 1;
143                         dw_len          = 0;
144                 }
145                 else    { dw_len++; }
146
147                 pb_pos++;
148         }
149
150         if(( 0x00 == i_result ) && ( 0 < dw_len ))      {
151                 i_result        = LibEditText_LineEdit_InsertString(
152                                                         p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line,
153                                                         p_cursor->dw_pos, pb_start, dw_len, 0x00 );
154                 if( 0x00 != i_result )  {
155                         LibBrownie_Error_SetErrorInfo(
156                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x05 ),
157                                         LOCATION( FUNCID_LibEditText_InsertString ),
158                                         errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
159                 }
160         }
161
162 goto_LibEditText_InsertString_post:
163         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
164
165         return  i_result;
166 }
167
168         
169 /***********************************************************************
170 Implemented
171 ***********************************************************************/
172 #define FUNCID_LibEditText_InsertChar   0x02
173 LIBEDITTEXT_API_CURSORAPI_EDIT
174 int
175         LibEditText_InsertChar(
176                         int             i_tinfoid,
177                         int             i_curid,
178                         char    c_char )
179 {
180         int                                             i_result        = 0x00;
181         LibEditText_TextInfo    *p_tinfo        = NULL;
182         LibEditText_Cursor              *p_cursor       = NULL;
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_InsertChar ),
189                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
190
191                 i_result        = -0x01;
192                 goto    goto_LibEditText_InsertChar_post;
193         }
194
195         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
196         if( NULL == p_cursor )  {
197                 LibBrownie_Error_SetErrorInfo(
198                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
199                                 LOCATION( FUNCID_LibEditText_InsertChar ),
200                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
201
202                 i_result        = -0x02;
203                 goto    goto_LibEditText_InsertChar_post;
204         }
205
206         if( '\n' == c_char )    {
207                 i_result        = LibEditText_LineCtrl_SplitLine(
208                                                         p_tinfo, p_cursor->dw_lineid, p_cursor->dw_line, p_cursor->dw_pos );
209                 if( 0x00 != i_result )  {
210                         LibBrownie_Error_SetErrorInfo(
211                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
212                                         LOCATION( FUNCID_LibEditText_InsertChar ),
213                                         errno, (QWord)i_result, (QWord)p_cursor->dw_pos, __LINE__ ); 
214
215                         i_result        = -0x03;
216                         goto    goto_LibEditText_InsertChar_post;
217                 }
218
219                 i_result        = LibEditText_CursorMove_MoveDown( p_tinfo, p_cursor, 1 );
220                 if( 0x00 != i_result )  {
221                         LibBrownie_Error_SetErrorInfo(
222                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x05 ),
223                                         LOCATION( FUNCID_LibEditText_InsertChar ),
224                                         errno, (QWord)i_result, (QWord)p_cursor, __LINE__ ); 
225                 }
226         }
227         else    {
228                 i_result        = LibEditText_LineEdit_InsertString(
229                                                         p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line,
230                                                         p_cursor->dw_pos, (Byte *)&c_char, 1, 0x00 );
231                 if( 0x00 != i_result )  {
232                         LibBrownie_Error_SetErrorInfo(
233                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
234                                         LOCATION( FUNCID_LibEditText_InsertChar ),
235                                         errno, (QWord)i_result, (QWord)p_cursor->dw_pos, __LINE__ ); 
236
237                         i_result        = -0x04;
238                         goto    goto_LibEditText_InsertChar_post;
239                 }
240
241                 i_result        = LibEditText_CursorMove_MoveRight( p_tinfo, p_cursor, 1 );
242                 if( 0x00 != i_result )  {
243                         LibBrownie_Error_SetErrorInfo(
244                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x06 ),
245                                         LOCATION( FUNCID_LibEditText_InsertChar ),
246                                         errno, (QWord)i_result, (QWord)p_cursor, __LINE__ ); 
247                 }
248         }
249
250 goto_LibEditText_InsertChar_post:
251         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
252
253         return  i_result;
254 }
255
256         
257 /***********************************************************************
258 Implemented
259 ***********************************************************************/
260 #define FUNCID_LibEditText_InsertLine   0x03
261 LIBEDITTEXT_API_CURSORAPI_EDIT
262 int
263         LibEditText_InsertLine(
264                         int             i_tinfoid,
265                         int             i_curid )
266 {
267         int                                             i_result        = 0x00;
268         DWord                                   dw_line;
269         LibEditText_TextInfo    *p_tinfo        = NULL;
270         LibEditText_Cursor              *p_cursor       = NULL;
271
272         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
273         if( NULL == p_tinfo )   {
274                 LibBrownie_Error_SetErrorInfo(
275                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
276                                 LOCATION( FUNCID_LibEditText_InsertLine ),
277                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
278
279                 i_result        = -0x01;
280                 goto    goto_LibEditText_InsertLine_post;
281         }
282
283         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
284         if( NULL == p_cursor )  {
285                 LibBrownie_Error_SetErrorInfo(
286                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
287                                 LOCATION( FUNCID_LibEditText_InsertLine ),
288                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
289
290                 i_result        = -0x02;
291                 goto    goto_LibEditText_InsertLine_post;
292         }
293
294         dw_line = LibEditText_LineCtrl_PushLine(
295                                         p_tinfo, p_cursor->dw_lineid, p_cursor->dw_line, 0, 0x00 );
296         if( INVALID_LINE == dw_line )   {
297                 LibBrownie_Error_SetErrorInfo(
298                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
299                                 LOCATION( FUNCID_LibEditText_InsertLine ),
300                                 errno, (QWord)p_cursor->dw_lineid, (QWord)p_cursor->dw_line, __LINE__ ); 
301
302                 i_result        = -0x03;
303                 goto    goto_LibEditText_InsertLine_post;
304         }
305
306         i_result        = LibEditText_CursorMove_MoveUp( p_tinfo, p_cursor, 1 );
307         if( 0x00 > i_result )   {
308                 LibBrownie_Error_SetErrorInfo(
309                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
310                                 LOCATION( FUNCID_LibEditText_InsertLine ),
311                                 errno, (QWord)i_result, (QWord)p_cursor, __LINE__ ); 
312         }
313
314 goto_LibEditText_InsertLine_post:
315         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
316
317         return  i_result;
318 }
319
320         
321 /***********************************************************************
322 Implemented
323 ***********************************************************************/
324 #define FUNCID_LibEditText_AppendLine   0x04
325 LIBEDITTEXT_API_CURSORAPI_EDIT
326 int
327         LibEditText_AppendLine(
328                         int             i_tinfoid,
329                         int             i_curid )
330 {
331         int                                             i_result        = 0x00;
332         DWord                                   dw_line;
333         LibEditText_TextInfo    *p_tinfo        = NULL;
334         LibEditText_Cursor              *p_cursor       = NULL;
335
336         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
337         if( NULL == p_tinfo )   {
338                 LibBrownie_Error_SetErrorInfo(
339                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
340                                 LOCATION( FUNCID_LibEditText_AppendLine ),
341                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
342
343                 i_result        = -0x01;
344                 goto    goto_LibEditText_AppendLine_post;
345         }
346
347         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
348         if( NULL == p_cursor )  {
349                 LibBrownie_Error_SetErrorInfo(
350                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
351                                 LOCATION( FUNCID_LibEditText_AppendLine ),
352                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
353
354                 i_result        = -0x02;
355                 goto    goto_LibEditText_AppendLine_post;
356         }
357
358         dw_line = LibEditText_LineCtrl_AddLine(
359                                         p_tinfo, p_cursor->dw_lineid, p_cursor->dw_line, 0, 0x00, 0x00 );
360         if( INVALID_LINE == dw_line )   {
361                 LibBrownie_Error_SetErrorInfo(
362                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
363                                 LOCATION( FUNCID_LibEditText_AppendLine ),
364                                 errno, (QWord)p_cursor->dw_lineid, (QWord)p_cursor->dw_line, __LINE__ ); 
365
366                 i_result        = -0x03;
367                 goto    goto_LibEditText_AppendLine_post;
368         }
369
370         i_result        = LibEditText_CursorMove_MoveDown( p_tinfo, p_cursor, 1 );
371         if( 0x00 > i_result )   {
372                 LibBrownie_Error_SetErrorInfo(
373                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
374                                 LOCATION( FUNCID_LibEditText_AppendLine ),
375                                 errno, (QWord)i_result, (QWord)p_cursor, __LINE__ ); 
376         }
377
378 goto_LibEditText_AppendLine_post:
379         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
380
381         return  i_result;
382 }
383
384         
385 /***********************************************************************
386 Implemented
387 ***********************************************************************/
388 #define FUNCID_LibEditText_BackSpace    0x05
389 LIBEDITTEXT_API_CURSORAPI_EDIT
390 int
391         LibEditText_BackSpace(
392                         int             i_tinfoid,
393                         int             i_curid )
394 {
395         int                                             i_result        = 0x00;
396         Byte                                    *pb_data;
397         LibEditText_TextInfo    *p_tinfo        = NULL;
398         LibEditText_Cursor              *p_cursor       = NULL;
399         LibEditText_LineInfo    *p_line         = NULL;
400
401         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
402         if( NULL == p_tinfo )   {
403                 LibBrownie_Error_SetErrorInfo(
404                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
405                                 LOCATION( FUNCID_LibEditText_BackSpace ),
406                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
407
408                 i_result        = -0x01;
409                 goto    goto_LibEditText_BackSpace_post;
410         }
411
412         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
413         if( NULL == p_cursor )  {
414                 LibBrownie_Error_SetErrorInfo(
415                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
416                                 LOCATION( FUNCID_LibEditText_BackSpace ),
417                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
418
419                 i_result        = -0x02;
420                 goto    goto_LibEditText_BackSpace_post;
421         }
422
423         p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
424         assert( NULL != p_line );
425
426         pb_data = p_tinfo->pb_text + p_line->dw_start + p_cursor->dw_pos;
427
428         if( 0 == p_cursor->dw_pos )             {
429                 if( 0 < p_cursor->dw_line )             {
430                         i_result        = LibEditText_CursorMove_MoveUp( p_tinfo, p_cursor, 1 );
431                         if( 0x00 != i_result )  {
432                                 LibBrownie_Error_SetErrorInfo(
433                                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x10 ),
434                                                 LOCATION( FUNCID_LibEditText_BackSpace ),
435                                                 errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
436
437                                 i_result        = -0x11;
438                                 goto    goto_LibEditText_BackSpace_post;
439                         }
440
441                         i_result        = LibEditText_CursorMove_MoveEnd( p_tinfo, p_cursor );
442                         if( 0x00 != i_result )  {
443                                 LibBrownie_Error_SetErrorInfo(
444                                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x11 ),
445                                                 LOCATION( FUNCID_LibEditText_BackSpace ),
446                                                 errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
447
448                                 i_result        = -0x12;
449                                 goto    goto_LibEditText_BackSpace_post;
450                         }
451
452                         i_result        = LibEditText_LineCtrl_JoinLine(
453                                                         p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line );
454                         if( 0x00 != i_result )  {
455                                 LibBrownie_Error_SetErrorInfo(
456                                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x12 ),
457                                                 LOCATION( FUNCID_LibEditText_BackSpace ),
458                                                 errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
459
460                                 i_result        = -0x13;
461                         }
462                 }
463         }
464         else    {
465                 i_result        = LibEditText_CursorMove_MoveLeft( p_tinfo, p_cursor, 1 );
466                 if( 0x00 != i_result )  {
467                         LibBrownie_Error_SetErrorInfo(
468                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x21 ),
469                                         LOCATION( FUNCID_LibEditText_BackSpace ),
470                                         errno, (QWord)i_result, (QWord)p_cursor->dw_pos, __LINE__ ); 
471
472                         i_result        = -0x21;
473                         goto    goto_LibEditText_BackSpace_post;
474                 }
475
476                 i_result        = LibEditText_LineEdit_DeleteString(
477                                                         p_tinfo, p_line, p_cursor->dw_line, p_cursor->dw_pos, 1, 0x00 );
478                 if( 0x00 != i_result )  {
479                         LibBrownie_Error_SetErrorInfo(
480                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x22 ),
481                                         LOCATION( FUNCID_LibEditText_BackSpace ),
482                                         errno, (QWord)i_result, (QWord)p_cursor->dw_pos, __LINE__ ); 
483
484                         i_result        = -0x22;
485                 }
486         }
487
488 goto_LibEditText_BackSpace_post:
489         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
490
491         return  i_result;
492 }
493
494         
495 /***********************************************************************
496 Implemented
497 ***********************************************************************/
498 #define FUNCID_LibEditText_DeleteString 0x06
499 LIBEDITTEXT_API_CURSORAPI_EDIT
500 int
501         LibEditText_DeleteString(
502                         int             i_tinfoid,
503                         int             i_curid,
504                         DWord   dw_size )
505 {
506         int                                             i_result        = 0x00;
507         DWord                                   dw_len;
508         DWord                                   dw_nowpos;
509         LibEditText_TextInfo    *p_tinfo        = NULL;
510         LibEditText_Cursor              *p_cursor       = NULL;
511         LibEditText_LineInfo    *p_line         = NULL;
512
513         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
514         if( NULL == p_tinfo )   {
515                 LibBrownie_Error_SetErrorInfo(
516                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
517                                 LOCATION( FUNCID_LibEditText_DeleteString ),
518                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
519
520                 i_result        = -0x01;
521                 goto    goto_LibEditText_DeleteString_post;
522         }
523
524         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
525         if( NULL == p_cursor )  {
526                 LibBrownie_Error_SetErrorInfo(
527                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
528                                 LOCATION( FUNCID_LibEditText_DeleteString ),
529                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
530
531                 i_result        = -0x02;
532                 goto    goto_LibEditText_DeleteString_post;
533         }
534
535         p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
536         assert( NULL != p_line );
537
538         dw_nowpos       = p_cursor->dw_pos;
539
540         while( 0 < dw_size )    {
541                 dw_len  = p_line->dw_strlen - dw_nowpos;
542
543                 if( 0 == dw_len )               { break; }
544                 if( dw_size < dw_len )  { dw_len        = dw_size; }
545
546                 // Delete dw_len
547                 i_result        = LibEditText_LineEdit_DeleteString(
548                                                         p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid),
549                                                         p_cursor->dw_line, dw_nowpos, dw_len, 0x00 );
550                 if( 0x00 != i_result )  {
551                         LibBrownie_Error_SetErrorInfo(
552                                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
553                                         LOCATION( FUNCID_LibEditText_DeleteString ),
554                                         errno, (QWord)i_result, (QWord)dw_len, __LINE__ ); 
555
556                         i_result        = -0x03;
557                         goto    goto_LibEditText_DeleteString_post;
558                 }
559
560                 dw_size -= dw_len;
561         }       
562
563 goto_LibEditText_DeleteString_post:
564         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
565
566         return  i_result;
567 }
568
569         
570 /***********************************************************************
571 Implemented
572 ***********************************************************************/
573 #define FUNCID_LibEditText_DeleteChar   0x07
574 LIBEDITTEXT_API_CURSORAPI_EDIT
575 int
576         LibEditText_DeleteChar(
577                         int             i_tinfoid,
578                         int             i_curid )
579 {
580         int                                             i_result        = 0x00;
581         Byte                                    *pb_data;
582         LibEditText_TextInfo    *p_tinfo        = NULL;
583         LibEditText_Cursor              *p_cursor       = NULL;
584         LibEditText_LineInfo    *p_line         = NULL;
585
586         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
587         if( NULL == p_tinfo )   {
588                 LibBrownie_Error_SetErrorInfo(
589                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
590                                 LOCATION( FUNCID_LibEditText_DeleteChar ),
591                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
592
593                 i_result        = -0x01;
594                 goto    goto_LibEditText_DeleteChar_post;
595         }
596
597         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
598         if( NULL == p_cursor )  {
599                 LibBrownie_Error_SetErrorInfo(
600                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
601                                 LOCATION( FUNCID_LibEditText_DeleteChar ),
602                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
603
604                 i_result        = -0x02;
605                 goto    goto_LibEditText_DeleteChar_post;
606         }
607
608         p_line  = LINFO(p_tinfo, p_cursor->dw_lineid);
609         assert( NULL != p_line );
610
611         if( 0 == p_line->dw_strlen )    {
612                 i_result        = 0x01;
613                 goto    goto_LibEditText_DeleteChar_post;
614         }
615
616         pb_data = p_tinfo->pb_text + p_line->dw_start + p_cursor->dw_pos;
617         if( '\n' == *pb_data )  {
618                 i_result        = LibEditText_LineCtrl_JoinLine(
619                                                         p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line );
620         }
621         else    {
622                 i_result        = LibEditText_LineEdit_DeleteString(
623                                                         p_tinfo, p_line, p_cursor->dw_line, p_cursor->dw_pos, 1, 0x00 );
624         }
625
626         if( 0x00 != i_result )  {
627                 LibBrownie_Error_SetErrorInfo(
628                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
629                                 LOCATION( FUNCID_LibEditText_DeleteChar ),
630                                 errno, (QWord)i_result, (QWord)(*pb_data), __LINE__ ); 
631         }
632
633 goto_LibEditText_DeleteChar_post:
634         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
635
636         return  i_result;
637 }
638
639         
640 /***********************************************************************
641 Implemented
642 ***********************************************************************/
643 #define FUNCID_LibEditText_DeleteLine   0x08
644 LIBEDITTEXT_API_CURSORAPI_EDIT
645 int
646         LibEditText_DeleteLine(
647                         int             i_tinfoid,
648                         int             i_curid )
649 {
650         int                                             i_result        = 0x00;
651         LibEditText_TextInfo    *p_tinfo        = NULL;
652         LibEditText_Cursor              *p_cursor       = NULL;
653
654         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
655         if( NULL == p_tinfo )   {
656                 LibBrownie_Error_SetErrorInfo(
657                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
658                                 LOCATION( FUNCID_LibEditText_DeleteLine ),
659                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
660
661                 i_result        = -0x01;
662                 goto    goto_LibEditText_DeleteLine_post;
663         }
664
665         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
666         if( NULL == p_cursor )  {
667                 LibBrownie_Error_SetErrorInfo(
668                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
669                                 LOCATION( FUNCID_LibEditText_DeleteLine ),
670                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
671
672                 i_result        = -0x02;
673                 goto    goto_LibEditText_DeleteLine_post;
674         }
675
676         i_result        = LibEditText_LineCtrl_DeleteLine(
677                                         p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line, 0x00 );
678         if( 0x00 != i_result )  {
679                 LibBrownie_Error_SetErrorInfo(
680                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
681                                 LOCATION( FUNCID_LibEditText_DeleteLine ),
682                                 errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
683         }
684
685 goto_LibEditText_DeleteLine_post:
686         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
687
688         return  i_result;
689 }
690
691         
692 /***********************************************************************
693 Implemented
694 ***********************************************************************/
695 #define FUNCID_LibEditText_JoinLine     0x09
696 LIBEDITTEXT_API_CURSORAPI_EDIT
697 int
698         LibEditText_JoinLine(
699                         int             i_tinfoid,
700                         int             i_curid )
701 {
702         int                                             i_result        = 0x00;
703         LibEditText_TextInfo    *p_tinfo        = NULL;
704         LibEditText_Cursor              *p_cursor       = NULL;
705
706         p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
707         if( NULL == p_tinfo )   {
708                 LibBrownie_Error_SetErrorInfo(
709                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
710                                 LOCATION( FUNCID_LibEditText_JoinLine ),
711                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
712
713                 i_result        = -0x01;
714                 goto    goto_LibEditText_JoinLine_post;
715         }
716
717         p_cursor        = LibEditText_CursorInfo_GetCursor( p_tinfo, i_curid );
718         if( NULL == p_cursor )  {
719                 LibBrownie_Error_SetErrorInfo(
720                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
721                                 LOCATION( FUNCID_LibEditText_JoinLine ),
722                                 errno, (QWord)i_tinfoid, (QWord)i_curid, __LINE__ ); 
723
724                 i_result        = -0x02;
725                 goto    goto_LibEditText_JoinLine_post;
726         }
727
728         i_result        = LibEditText_LineCtrl_JoinLine(
729                                                 p_tinfo, LINFO(p_tinfo, p_cursor->dw_lineid), p_cursor->dw_line );
730         if( 0x00 != i_result )  {
731                 LibBrownie_Error_SetErrorInfo(
732                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
733                                 LOCATION( FUNCID_LibEditText_JoinLine ),
734                                 errno, (QWord)i_result, (QWord)p_cursor->dw_line, __LINE__ ); 
735         }
736
737 goto_LibEditText_JoinLine_post:
738         LibEditText_UndoInfo_CommitUndo( p_tinfo, i_result );
739
740         return  i_result;
741 }
742
743         
744 /* EOF of drd64_.c ----------------------------------- */