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_SYSTEM
38 #include"drd64_libedittext.h"
40 #define LOCATION(n) DRD64_ERR_LOCATION( \
41 DRD64_ERROR_MODULE_LIBEDITTEXT, DRD64_ERROR_ARCH_NODEPEND, \
42 DRD64_SRC_LIBEDITTEXT_SYSTEM_SRCID, (n))
45 /*----------------------------------------------------------------------
46 ----------------------------------------------------------------------*/
47 #define FUNCID_LibEditText_System_GetMaxNum_TextInfo 0x01
49 LibEditText_System_GetMaxNum_TextInfo(
52 return gdw_max_textinfo;
56 /*----------------------------------------------------------------------
57 ----------------------------------------------------------------------*/
58 #define FUNCID_LibEditText_System_GetAllocNum_TextInfo 0x02
60 LibEditText_System_GetAllocNum_TextInfo(
63 return gdw_alloc_textinfo;
67 /*----------------------------------------------------------------------
68 ----------------------------------------------------------------------*/
69 #define FUNCID_LibEditText_System_GetNoneNameFiles 0x03
70 LIBEDITTEXT_SYSTEM_EXTERN
72 LibEditText_System_GetNoneNameFiles(
75 return ++gdw_nonenamefiles;
79 /*----------------------------------------------------------------------
80 ----------------------------------------------------------------------*/
81 #define FUNCID_LibEditText_System_GetTextInfo 0x04
82 LIBEDITTEXT_SYSTEM_EXTERN
83 LibEditText_TextInfo *
84 LibEditText_System_GetTextInfo(
87 if( ( 0 > i_tinfoid ) || ( gdw_max_textinfo <= i_tinfoid )) {
88 LibBrownie_Error_SetErrorInfo(
89 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
90 LOCATION( FUNCID_LibEditText_System_GetTextInfo ),
91 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ );
96 return (gp_textinfo + i_tinfoid);
100 /*----------------------------------------------------------------------
101 ----------------------------------------------------------------------*/
102 #define FUNCID_LibEditText_System_ExpandTextBuffer 0x05
103 LIBEDITTEXT_SYSTEM_EXTERN
105 LibEditText_System_ExpandTextBuffer(
106 LibEditText_TextInfo *p_tinfo,
107 DWord dw_expandsize )
112 assert( NULL != p_tinfo );
114 if( 0 == dw_expandsize ) {
115 LibBrownie_Error_SetErrorInfo(
116 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
117 LOCATION( FUNCID_LibEditText_System_ExpandTextBuffer ),
118 errno, (QWord)dw_expandsize, (QWord)0x00, __LINE__ );
123 pb_text = (Byte *)realloc( p_tinfo->pb_text,
124 (p_tinfo->dw_bufsize + dw_expandsize
125 + DRD64_LIBEDITTEXT_DEFAULT_COPYBUFFER) );
126 if( NULL == pb_text ) {
127 LibBrownie_Error_SetErrorInfo(
128 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x02 ),
129 LOCATION( FUNCID_LibEditText_System_ExpandTextBuffer ),
130 errno, (QWord)dw_expandsize, (QWord)0x00, __LINE__ );
134 p_tinfo->pb_text = pb_text;
136 pb_text += p_tinfo->dw_bufsize;
137 memset( pb_text, 0x00, dw_expandsize );
139 if( NULL != p_tinfo->pb_attr ) {
140 pb_attr = (Byte *)realloc( p_tinfo->pb_attr,
141 (p_tinfo->dw_bufsize + dw_expandsize ) );
142 if( NULL == pb_attr ) {
143 LibBrownie_Error_SetErrorInfo(
144 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x03 ),
145 LOCATION( FUNCID_LibEditText_System_ExpandTextBuffer ),
146 errno, (QWord)dw_expandsize, (QWord)0x00, __LINE__ );
150 p_tinfo->pb_attr = pb_attr;
152 pb_attr += p_tinfo->dw_bufsize;
153 memset( pb_attr, 0x00, dw_expandsize );
156 p_tinfo->dw_bufsize += dw_expandsize;
162 /*----------------------------------------------------------------------
163 ----------------------------------------------------------------------*/
164 #define FUNCID_LibEditText_System_InitTextInfo 0x06
165 LIBEDITTEXT_SYSTEM_EXTERN
167 LibEditText_System_InitTextInfo(
168 LibEditText_TextInfo *p_tinfo,
175 LibEditText_LineInfo *p_line;
179 if(( NULL == p_tinfo ) || ( 0 == dw_bufsize ) || ( 0 == dw_bufline)) {
180 LibBrownie_Error_SetErrorInfo(
181 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
182 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
183 errno, (QWord)dw_bufsize, (QWord)dw_bufline, __LINE__ );
188 /* Alloc Text Buffer Memory --- */
189 pb_text = (Byte *)malloc( dw_bufsize + DRD64_LIBEDITTEXT_DEFAULT_COPYBUFFER );
190 if( NULL == pb_text ) {
191 LibBrownie_Error_SetErrorInfo(
192 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x11 ),
193 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
194 errno, (QWord)dw_bufsize, (QWord)0x00, __LINE__ );
198 memset( pb_text, 0x00, dw_bufsize );
200 /* Alloc Attribute Buffer Memory --- */
201 pb_attr = (Byte *)malloc( dw_bufsize );
202 if( NULL == pb_attr ) {
203 LibBrownie_Error_SetErrorInfo(
204 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x12 ),
205 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
206 errno, (QWord)dw_bufsize, (QWord)0x00, __LINE__ );
210 memset( pb_attr, 0x00, dw_bufsize );
212 /* Alloc LineInfo Struct --- */
213 p_line = LibEditText_LineInfo_Init( p_tinfo, dw_bufline );
214 if( NULL == p_line ) {
215 LibBrownie_Error_SetErrorInfo(
216 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x13 ),
217 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
218 errno, (QWord)dw_bufline, (QWord)0x00, __LINE__ );
223 /* Set Param. to TextInfo Struct --- */
224 p_tinfo->w_subtype = w_subtype;
225 p_tinfo->pb_text = pb_text;
226 p_tinfo->pb_attr = pb_attr;
227 p_tinfo->p_lineinfo = p_line;
228 p_tinfo->dw_bufsize = dw_bufsize;
229 p_tinfo->dw_attrsize = dw_bufsize;
230 p_tinfo->dw_maxline = dw_maxline;
231 p_tinfo->dw_line_start = INVALID_LINE;
232 p_tinfo->dw_line_end = INVALID_LINE;
234 i_result = LibEditText_Section_InitSection( p_tinfo );
235 if( 0x00 != i_result ) {
236 LibBrownie_Error_SetErrorInfo(
237 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x14 ),
238 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
239 errno, (QWord)i_result, (QWord)0x00, __LINE__ );
244 i_result = LibEditText_CursorInfo_InitCursor( p_tinfo );
245 if( 0x00 != i_result ) {
246 LibBrownie_Error_SetErrorInfo(
247 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x15 ),
248 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
249 errno, (QWord)i_result, (QWord)0x00, __LINE__ );
254 i_result = LibEditText_UndoInfo_Init( p_tinfo );
255 if( 0x00 != i_result ) {
256 LibBrownie_Error_SetErrorInfo(
257 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x16 ),
258 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
259 errno, (QWord)i_result, (QWord)0x00, __LINE__ );
268 /*----------------------------------------------------------------------
269 ----------------------------------------------------------------------*/
270 #define FUNCID_LibEditText_System_SearchEmptyTextInfo 0x07
272 LibEditText_System_SearchEmptyTextInfo(
276 LibEditText_TextInfo *p_tinfo = NULL;
278 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- ) {
279 p_tinfo = (gp_textinfo + dw_cnt - 1);
281 assert( NULL != p_tinfo );
282 if( -1 == p_tinfo->i_id ) { break; }
289 /*----------------------------------------------------------------------
291 ----------------------------------------------------------------------*/
292 #define FUNCID_LibEditText_System_AllocTextInfo 0x08
293 LIBEDITTEXT_SYSTEM_EXTERN
294 LibEditText_TextInfo *
295 LibEditText_System_AllocTextInfo(
301 LibEditText_TextInfo *p_textinfo = NULL;
302 LibEditText_TextInfo *p_tmp;
304 dw_cnt = LibEditText_System_SearchEmptyTextInfo();
307 if( gdw_max_textinfo == gdw_alloc_textinfo ) {
308 dw_size = sizeof( LibEditText_TextInfo )
309 * (gdw_alloc_textinfo + DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO);
310 p_textinfo = (LibEditText_TextInfo *)realloc( gp_textinfo, dw_size );
311 if( NULL == p_textinfo ) {
312 LibBrownie_Error_SetErrorInfo(
313 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x00 ),
314 LOCATION( FUNCID_LibEditText_System_AllocTextInfo ),
315 errno, (QWord)0x00, (QWord)dw_size, __LINE__ );
320 p_tmp = p_textinfo + gdw_max_textinfo;
322 sizeof( LibEditText_TextInfo ) * DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO );
323 for( i_tmp = 0; i_tmp < DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO; i_tmp++, p_tmp++ )
324 { p_tmp->i_id = -1; }
326 gp_textinfo = p_textinfo;
327 gdw_alloc_textinfo += DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO;
330 dw_cnt = gdw_max_textinfo + 1;
334 p_textinfo = (gp_textinfo + dw_cnt - 1);
335 memset( p_textinfo, 0x00, sizeof( LibEditText_TextInfo ) );
337 p_textinfo->i_id = (int)(dw_cnt - 1);
338 p_textinfo->pb_text = NULL;
339 p_textinfo->p_lineinfo = NULL;
340 p_textinfo->dw_bufsize = 0;
341 p_textinfo->dw_maxline = 0;
342 p_textinfo->dw_bufline = 0;
345 if( dw_cnt == gdw_max_textinfo + 1 )
346 { gdw_max_textinfo++; }
354 /*----------------------------------------------------------------------
355 ----------------------------------------------------------------------*/
356 #define FUNCID_LibEditText_System_ClearTextInfo 0x09
357 LIBEDITTEXT_SYSTEM_EXTERN
359 LibEditText_System_ClearTextInfo(
360 LibEditText_TextInfo *p_tinfo )
364 if( NULL == p_tinfo ) {
365 LibBrownie_Error_SetErrorInfo(
366 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
367 LOCATION( FUNCID_LibEditText_System_ClearTextInfo ),
368 errno, (QWord)0x00, (QWord)0x00, __LINE__ );
373 i_result = LibEditText_Section_TermSection( p_tinfo );
374 if( 0x00 != i_result ) {
375 LibBrownie_Error_SetErrorInfo(
376 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
377 LOCATION( FUNCID_LibEditText_System_ClearTextInfo ),
378 errno, (QWord)i_result, (QWord)0x00, __LINE__ );
383 assert( NULL != p_tinfo->pb_text );
384 free( p_tinfo->pb_text );
386 assert( NULL != p_tinfo->pb_attr );
387 free( p_tinfo->pb_attr );
389 assert( NULL != p_tinfo->p_lineinfo );
390 free( p_tinfo->p_lineinfo );
392 p_tinfo->pb_text = NULL;
393 p_tinfo->pb_attr = NULL;
394 p_tinfo->p_lineinfo = NULL;
395 p_tinfo->dw_bufsize = 0;
396 p_tinfo->dw_attrsize = 0;
397 p_tinfo->dw_maxline = 0;
398 p_tinfo->dw_bufline = 0;
404 /*----------------------------------------------------------------------
406 ----------------------------------------------------------------------*/
407 #define FUNCID_LibEditText_System_FreeTextInfo 0x0a
408 LIBEDITTEXT_SYSTEM_EXTERN
410 LibEditText_System_FreeTextInfo(
411 LibEditText_TextInfo *p_tinfo )
415 LibEditText_TextInfo *p_tmp;
417 if( NULL == p_tinfo ) {
418 LibBrownie_Error_SetErrorInfo(
419 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
420 LOCATION( FUNCID_LibEditText_System_FreeTextInfo ),
421 errno, (QWord)0x00, (QWord)0x00, __LINE__ );
425 if( -1 == p_tinfo->i_id ) {
426 LibBrownie_Error_SetErrorInfo(
427 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
428 LOCATION( FUNCID_LibEditText_System_FreeTextInfo ),
429 errno, (QWord)p_tinfo->i_id, (QWord)0x00, __LINE__ );
434 LibEditText_UndoInfo_Term( p_tinfo );
435 LibEditText_CursorInfo_TermCursor( p_tinfo );
437 /* Clear TextInfo Struct */
438 i_oldid = p_tinfo->i_id;
440 p_tinfo->pb_text = NULL;
444 if( 0 == gdw_used_textinfo )
445 { gdw_max_textinfo = 0; }
446 else if( i_oldid == gdw_max_textinfo - 1 ) {
450 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- ) {
451 p_tmp = (gp_textinfo + dw_cnt - 1);
453 assert( NULL != p_tmp );
454 if( -1 != p_tmp->i_id ) { break; }
457 { gdw_max_textinfo = dw_cnt; }
464 /*----------------------------------------------------------------------
466 ----------------------------------------------------------------------*/
467 #define FUNCID_LibEditText_Init 0x0b
468 LIBEDITTEXT_API_SYSTEM
475 LibEditText_TextInfo *p_textinfo;
476 LibEditText_TextInfo *p_tmp;
478 if( NULL != gp_textinfo ) { return 0x01; }
480 i_result = LibBrownie_Init();
481 if( 0x00 != i_result ) { return -0x02; }
483 i_result = LibFileType_Init();
484 if( 0x00 != i_result ) {
485 LibBrownie_Error_SetErrorInfo(
486 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
487 LOCATION( FUNCID_LibEditText_Init ),
488 errno, (QWord)i_result, (QWord)0x00, __LINE__ );
493 p_textinfo = (LibEditText_TextInfo *)malloc(
494 sizeof( LibEditText_TextInfo ) * DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO );
495 if( NULL == p_textinfo ) {
496 LibBrownie_Error_SetErrorInfo(
497 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
498 LOCATION( FUNCID_LibEditText_Init ),
499 errno, (QWord)0x00, (QWord)0x00, __LINE__ );
503 memset( p_textinfo, 0x00,
504 sizeof( LibEditText_TextInfo ) * DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO );
506 gp_textinfo = p_textinfo;
507 gdw_max_textinfo = 0;
508 gdw_alloc_textinfo = DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO;
511 for( i_cnt = 0; i_cnt < gdw_alloc_textinfo; i_cnt++, p_tmp++ )
512 { p_tmp->i_id = -1; }
518 /*----------------------------------------------------------------------
520 ----------------------------------------------------------------------*/
521 #define FUNCID_LibEditText_Term 0x0c
522 LIBEDITTEXT_API_SYSTEM
528 LibEditText_TextInfo *p_textinfo;
530 if( NULL == gp_textinfo) {
531 LibBrownie_Error_SetErrorInfo(
532 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
533 LOCATION( FUNCID_LibEditText_Term ),
534 errno, (QWord)0x00, (QWord)0x00, __LINE__ );
539 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- ) {
540 p_textinfo = (gp_textinfo + dw_cnt - 1);
541 assert( NULL != p_textinfo );
543 p_textinfo->i_id = -1;
556 /* EOF of drd64_.c ---------------------------------- */