1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
4 for INTEL64(R), AMD64(R)
6 Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
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.
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.
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
31 /* File Info -----------------------------------------------------------
35 ----------------------------------------------------------------------*/
37 #define DRD64_SRC_LIBEDITTEXT_LINEEDIT
38 #include"drd64_libedittext.h"
40 #define DRD64_SRC_LIBEDITTEXT_LINEEDIT_SRCID 0x05
41 #define LOCATION(n) DRD64_ERR_LOCATION( \
42 DRD64_ERROR_MODULE_LIBEDITTEXT, DRD64_ERROR_ARCH_NODEPEND, \
43 DRD64_SRC_LIBEDITTEXT_LINEEDIT_SRCID, (n))
45 /*----------------------------------------------------------------------
46 ----------------------------------------------------------------------*/
47 #define FUNCID_LibEditText_LineEdit_DeleteString 0x01
48 LIBEDITTEXT_LINEEDIT_EXTERN
50 LibEditText_LineEdit_DeleteString(
51 LibEditText_TextInfo *p_tinfo,
52 LibEditText_LineInfo *p_line,
60 assert( NULL != p_tinfo );
61 assert( NULL != p_line );
62 assert( p_line->dw_strlen >= (dw_pos + dw_len) );
64 if(( 0 == dw_pos ) && ( dw_len == p_line->dw_strlen )) {
66 i_result = LibEditText_LineCtrl_DeleteLine( p_tinfo, p_line, dw_line );
67 goto goto_LibEditText_LineEdit_DeleteString_post;
70 // Move StringData ---
71 pb_data = p_tinfo->pb_text + p_line->dw_start;
72 memmove( (pb_data + dw_pos), (pb_data + dw_pos + dw_len),
73 (p_line->dw_strlen - dw_pos - dw_len));
74 memset( (pb_data + p_line->dw_strlen - dw_len), 0x00, dw_len );
75 p_line->dw_strlen -= dw_len;
77 assert( 0 < p_line->dw_strlen );
79 if( p_tinfo->dw_line_end == p_line->dw_id )
80 { goto goto_LibEditText_LineEdit_DeleteString_post; }
81 if( '\n' == *(pb_data + p_line->dw_strlen - 1) )
82 { goto goto_LibEditText_LineEdit_DeleteString_post; }
85 i_result = LibEditText_LineCtrl_JoinLine( p_tinfo, p_line, dw_line );
87 goto_LibEditText_LineEdit_DeleteString_post:
92 /*======================================================================
93 ======================================================================*/
94 #define FUNCID_LibEditText_DeleteString_toLine 0x02
95 LIBEDITTEXT_API_LINEEDIT
97 LibEditText_DeleteString_toLine(
104 LibEditText_TextInfo *p_tinfo;
105 LibEditText_LineInfo *p_line;
107 if( 0 > i_tinfoid ) {
108 LibBrownie_Error_SetErrorInfo(
109 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
110 LOCATION( FUNCID_LibEditText_DeleteString_toLine ),
111 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
115 p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
116 if( NULL == p_tinfo ) {
117 LibBrownie_Error_SetErrorInfo(
118 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
119 LOCATION( FUNCID_LibEditText_DeleteString_toLine ),
120 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
125 /* Check Line in TextBuffer range ---*/
126 if( p_tinfo->dw_maxline <= dw_line ) {
127 LibBrownie_Error_SetErrorInfo(
128 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x03 ),
129 LOCATION( FUNCID_LibEditText_DeleteString_toLine ),
130 errno, (QWord)p_tinfo->dw_maxline, (QWord)dw_line, __LINE__ );
135 p_line = LibEditText_Section_SearchLine( p_tinfo, dw_line );
136 if( NULL == p_line ) {
137 LibBrownie_Error_SetErrorInfo(
138 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
139 LOCATION( FUNCID_LibEditText_DeleteString_toLine ),
140 errno, (QWord)0x00, (QWord)dw_line, __LINE__ );
145 if( p_line->dw_strlen < dw_pos + dw_len ) {
146 LibBrownie_Error_SetErrorInfo(
147 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x05 ),
148 LOCATION( FUNCID_LibEditText_DeleteString_toLine ),
149 errno, (QWord)(dw_pos+dw_len), (QWord)p_line->dw_strlen, __LINE__ );
154 i_result = LibEditText_LineEdit_DeleteString(
155 p_tinfo, p_line, dw_line, dw_pos, dw_len );
161 /*======================================================================
162 ======================================================================*/
163 #define FUNCID_LibEditText_BackSpace_toLine 0x03
164 LIBEDITTEXT_API_LINEEDIT
166 LibEditText_BackSpace_toLine(
172 LibEditText_TextInfo *p_tinfo;
173 LibEditText_LineInfo *p_line;
175 if( 0 > i_tinfoid ) {
176 LibBrownie_Error_SetErrorInfo(
177 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
178 LOCATION( FUNCID_LibEditText_BackSpace_toLine ),
179 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
183 p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
184 if( NULL == p_tinfo ) {
185 LibBrownie_Error_SetErrorInfo(
186 DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x02 ),
187 LOCATION( FUNCID_LibEditText_BackSpace_toLine ),
188 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
193 /* Check Line in TextBuffer range ---*/
194 if( p_tinfo->dw_maxline <= dw_line ) {
195 LibBrownie_Error_SetErrorInfo(
196 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x03 ),
197 LOCATION( FUNCID_LibEditText_BackSpace_toLine ),
198 errno, (QWord)p_tinfo->dw_maxline, (QWord)dw_line, __LINE__ );
203 p_line = LibEditText_Section_SearchLine( p_tinfo, dw_line );
204 if( NULL == p_line ) {
205 LibBrownie_Error_SetErrorInfo(
206 DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x04 ),
207 LOCATION( FUNCID_LibEditText_BackSpace_toLine ),
208 errno, (QWord)dw_line, (QWord)0x00, __LINE__ );
213 if( dw_pos >= p_line->dw_strlen ) {
214 LibBrownie_Error_SetErrorInfo(
215 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x05 ),
216 LOCATION( FUNCID_LibEditText_BackSpace_toLine ),
217 errno, (QWord)dw_pos, (QWord)p_line->dw_strlen, __LINE__ );
223 i_result = LibEditText_LineEdit_DeleteString(
224 p_tinfo, p_line, dw_line, dw_pos - 1, 1 );
227 LibBrownie_Error_SetErrorInfo(
228 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x06 ),
229 LOCATION( FUNCID_LibEditText_BackSpace_toLine ),
230 errno, (QWord)dw_line, (QWord)dw_pos, __LINE__ );
235 p_line = LINFO(p_tinfo, p_line->dw_before);
236 assert( NULL != p_line );
238 i_result = LibEditText_LineCtrl_JoinLine( p_tinfo, p_line, dw_line);
245 /*----------------------------------------------------------------------
246 ----------------------------------------------------------------------*/
247 #define FUNCID_LibEditText_LineEdit_InsertString 0x04
248 LIBEDITTEXT_LINEEDIT_EXTERN
250 LibEditText_LineEdit_InsertString(
251 LibEditText_TextInfo *p_tinfo,
252 LibEditText_LineInfo *p_line,
261 assert( NULL != p_tinfo );
262 assert( NULL != p_line );
264 /* Check Line Remain-Length & Swap line-buffer ---*/
265 if( p_line->dw_strlen + dw_srclen + 1 > p_line->dw_linelen ) {
266 i_result = LibEditText_LineInfo_ExpandLineBuffer(
268 dw_srclen + DRD64_LIBEDITTEXT_DEFAULT_RESERVEBUF_INLINE);
269 if( 0x00 != i_result ) {
270 LibBrownie_Error_SetErrorInfo(
271 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
272 LOCATION( FUNCID_LibEditText_LineEdit_InsertString ),
273 errno, (QWord)i_result, (QWord)dw_srclen, __LINE__ );
279 if( p_line->dw_strlen < dw_pos )
280 { dw_pos = p_line->dw_strlen; }
282 pb_pos = p_tinfo->pb_text + p_line->dw_start + dw_pos;
283 assert( NULL != pb_pos );
285 if( p_line->dw_strlen > dw_pos ) {
286 dw_length = p_line->dw_strlen - dw_pos + 1;
287 memmove( pb_pos + dw_srclen, pb_pos, dw_length );
290 memcpy( pb_pos, pb_src, dw_srclen );
291 p_line->dw_strlen += dw_srclen;
297 /*======================================================================
298 ======================================================================*/
299 #define FUNCID_LibEditText_InsertChar_toLine 0x05
300 LIBEDITTEXT_API_LINEEDIT
302 LibEditText_InsertChar_toLine(
309 LibEditText_TextInfo *p_tinfo;
310 LibEditText_LineInfo *p_line;
312 if( 0 > i_tinfoid ) {
313 LibBrownie_Error_SetErrorInfo(
314 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
315 LOCATION( FUNCID_LibEditText_InsertChar_toLine ),
316 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
320 p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
321 if( NULL == p_tinfo ) {
322 LibBrownie_Error_SetErrorInfo(
323 DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x02 ),
324 LOCATION( FUNCID_LibEditText_InsertChar_toLine ),
325 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
330 /* Check Line in TextBuffer range ---*/
331 if( p_tinfo->dw_maxline <= dw_line ) {
332 LibBrownie_Error_SetErrorInfo(
333 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x03 ),
334 LOCATION( FUNCID_LibEditText_InsertChar_toLine ),
335 errno, (QWord)p_tinfo->dw_maxline, (QWord)dw_line, __LINE__ );
340 p_line = LibEditText_Section_SearchLine( p_tinfo, dw_line );
341 if( NULL == p_line ) {
342 LibBrownie_Error_SetErrorInfo(
343 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
344 LOCATION( FUNCID_LibEditText_InsertChar_toLine ),
345 errno, (QWord)0x00, (QWord)dw_line, __LINE__ );
350 i_result = LibEditText_LineEdit_InsertString( p_tinfo, p_line, dw_pos, &b_char, 1 );
356 /*----------------------------------------------------------------------
357 ----------------------------------------------------------------------*/
358 #define FUNCID_LibEditText_InsertString_toLine 0x06
359 LIBEDITTEXT_API_LINEEDIT
361 LibEditText_InsertString_toLine(
369 LibEditText_TextInfo *p_tinfo;
370 LibEditText_LineInfo *p_line;
372 if( 0 > i_tinfoid ) {
373 LibBrownie_Error_SetErrorInfo(
374 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
375 LOCATION( FUNCID_LibEditText_InsertString_toLine ),
376 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
380 p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
381 if( NULL == p_tinfo ) {
382 LibBrownie_Error_SetErrorInfo(
383 DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x02 ),
384 LOCATION( FUNCID_LibEditText_InsertString_toLine ),
385 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
390 /* Check Line in TextBuffer range ---*/
391 if( p_tinfo->dw_maxline <= dw_line ) {
392 LibBrownie_Error_SetErrorInfo(
393 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x03 ),
394 LOCATION( FUNCID_LibEditText_InsertString_toLine ),
395 errno, (QWord)p_tinfo->dw_maxline, (QWord)dw_line, __LINE__ );
400 p_line = LibEditText_Section_SearchLine( p_tinfo, dw_line );
401 if( NULL == p_line ) {
402 LibBrownie_Error_SetErrorInfo(
403 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
404 LOCATION( FUNCID_LibEditText_InsertString_toLine ),
405 errno, (QWord)dw_line, (QWord)0x00, __LINE__ );
410 i_len = strnlen( pstr_string , 1024+1 );
411 if( 1025 == i_len ) {
412 LibBrownie_Error_SetErrorInfo(
413 DRD64_ERROR( DRD64_ERROR_PTN_BUG, 0x01, 0x05 ),
414 LOCATION( FUNCID_LibEditText_InsertString_toLine ),
415 errno, (QWord)i_len, (QWord)0x00, __LINE__ );
420 i_result = LibEditText_LineEdit_InsertString(
421 p_tinfo, p_line, dw_pos, (Byte *)pstr_string, (DWord)i_len );
427 /* EOF of drd64_.c ----------------------------------- */