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_DRCC_EDITTEXT_SYSTEM
40 /*----------------------------------------------------------------------
41 ----------------------------------------------------------------------*/
43 DrCC_EditText_Debug_SortChain(
44 Drd64_DrCC_TextInfo *p_tinfo,
50 Drd64_DrCC_LineInfo *p_line;
52 assert( NULL != p_tinfo );
54 if( 0x00 != b_putflag ) {
55 puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8");
56 puts( "[2] LineInfo SortChain ");
59 for( i_cnt = 0; i_cnt < DRD64_DRCC_DEFAULT_LINESORT_ARRAYS; i_cnt++ ) {
60 p_line = p_tinfo->p_sort[i_cnt];
61 if( NULL == p_line ) { continue; }
63 dw_nowlen = p_line->dw_linelen;
64 if( 0 == dw_nowlen ) { return -0x01; }
67 while( NULL != p_line ) {
68 if( dw_nowlen < p_line->dw_linelen ) {
69 if( 0x00 != b_putflag )
70 { printf(" Line Length=%u : Chains: %u\n", dw_nowlen, dw_lencount ); }
72 dw_nowlen = p_line->dw_linelen;
73 if( 0 == dw_nowlen ) { return -0x02; }
75 else if( dw_nowlen > p_line->dw_linelen )
79 p_line = p_line->p_sortnext;
82 if( 0x00 != b_putflag )
83 { printf(" Line Length=%u : Chains: %u\n", dw_nowlen, dw_lencount ); }
86 if( 0x00 != b_putflag )
87 { puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8"); }
93 /*----------------------------------------------------------------------
94 ----------------------------------------------------------------------*/
95 DRCC_EDITTEXT_SYSTEM_EXTERN
97 DrCC_EditText_DebugTextInfo(
105 Drd64_DrCC_TextInfo *p_tinfo;
106 Drd64_DrCC_LineInfo *p_before;
107 Drd64_DrCC_LineInfo *p_line;
109 if( 0 > i_tinfoid ) { return -0x01; }
110 p_tinfo = DrCC_EditText_System_GetTextInfo( i_tinfoid );
111 if( NULL == p_tinfo ) { return -0x02; }
113 /* 1st: Check TextInfo Strcut Data --- */
114 if( 0x00 != b_putflag ) {
115 puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8");
116 puts( "[1] TextInfo Struct Data ");
117 printf(" TextInfo Struct ID: %d\n", p_tinfo->i_fd);
118 printf(" Path: %s\n", p_tinfo->str_pathname );
119 printf(" File: %s\n", p_tinfo->str_filename );
120 printf(" Lines: %u, Buffer Lines: %u\n", p_tinfo->dw_maxline, p_tinfo->dw_bufline );
121 printf(" Buffer size: %u, Used Last-Byte:%u\n", p_tinfo->dw_bufsize, p_tinfo->dw_lastsize );
122 printf(" FileDescriptor: %d, File SubType: %04x\n", p_tinfo->i_fd, p_tinfo->w_subtype );
123 puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8");
126 /* Check Empty-LineInfo Chain ---*/
128 p_line = p_tinfo->p_empty;
129 while( NULL != p_line ) {
130 p_line = p_line->p_next;
133 if( (int)(p_tinfo->dw_bufline - p_tinfo->dw_maxline) != i_cnt )
135 if( 0x00 != b_putflag ) {
136 printf(" Remain Empty LineInfo Structs: %3d\n", i_cnt );
139 i_result = DrCC_EditText_Debug_SortChain( p_tinfo, b_putflag );
140 if( 0x00 != i_result ) { return -0x03; }
143 if( 0x00 != b_putflag ) {
145 puts("************** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
146 puts( "[3] Text Data ");
149 p_line = p_tinfo->p_lineinfo;
150 for( dw_nowrow = 0; dw_nowrow < p_tinfo->dw_maxline; dw_nowrow++ ) {
151 if( 0x00 != b_putflag ) {
152 printf("%04u [%3u:%3u] ",
153 dw_nowrow, p_line->dw_strlen, p_line->dw_linelen );
155 pb_now = p_tinfo->pb_text + p_line->dw_start;
156 if(( dw_nowrow + 1 < p_tinfo->dw_maxline ) && ( '\n' != *(pb_now + p_line->dw_strlen - 1) ))
159 if( 0x00 != b_putflag ) {
160 fputs( (char *)pb_now, stdout );
163 if( p_before != p_line->p_before ) { return -0x05; }
165 p_line = p_line->p_next;
167 if( NULL != p_line ) { return -0x06; }
169 if( 0x00 != b_putflag ) {
170 puts("************** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
177 /*----------------------------------------------------------------------
178 ----------------------------------------------------------------------*/
180 DrCC_EditText_System_GetMaxNum_TextInfo(
183 return gdw_max_textinfo;
187 /*----------------------------------------------------------------------
188 ----------------------------------------------------------------------*/
190 DrCC_EditText_System_GetAllocNum_TextInfo(
193 return gdw_alloc_textinfo;
197 /*----------------------------------------------------------------------
198 ----------------------------------------------------------------------*/
199 DRCC_EDITTEXT_SYSTEM_EXTERN
201 DrCC_EditText_System_GetNoneNameFiles(
204 return ++gdw_nonenamefiles;
208 /*----------------------------------------------------------------------
209 ----------------------------------------------------------------------*/
210 DRCC_EDITTEXT_SYSTEM_EXTERN
211 Drd64_DrCC_TextInfo *
212 DrCC_EditText_System_GetTextInfo(
215 if( ( 0 > i_tinfoid ) || ( gdw_max_textinfo <= i_tinfoid ))
218 return (gp_textinfo + i_tinfoid);
222 /*----------------------------------------------------------------------
223 ----------------------------------------------------------------------*/
224 DRCC_EDITTEXT_SYSTEM_EXTERN
226 DrCC_EditText_System_InitTextInfo(
227 Drd64_DrCC_TextInfo *p_tinfo,
233 Drd64_DrCC_LineInfo *p_line;
234 Drd64_DrCC_LineInfo *p_before;
239 if( NULL == p_tinfo ) { return -0x01; }
240 if(( 0 == dw_bufsize ) || ( 0 == dw_bufline) ) { return -0x02; }
242 /* Alloc Text Buffer Memory --- */
243 pb_text = (Byte *)malloc( dw_bufsize );
244 if( NULL == pb_text ) {
247 memset( pb_text, 0x00, dw_bufsize );
249 /* Alloc Attribute Buffer Memory --- */
250 pb_attr = (Byte *)malloc( dw_bufsize );
251 if( NULL == pb_attr ) {
254 memset( pb_attr, 0x00, dw_bufsize );
256 /* Alloc DrCC_LineInfo Struct --- */
257 p_line = (Drd64_DrCC_LineInfo *)malloc(
258 sizeof( Drd64_DrCC_LineInfo ) * dw_bufline );
259 if( NULL == p_line ) {
262 memset( p_line, 0x00, sizeof( Drd64_DrCC_LineInfo) * dw_bufline );
265 /* Set Param. to TextInfo Struct --- */
266 p_tinfo->w_subtype = w_subtype;
267 p_tinfo->pb_text = pb_text;
268 p_tinfo->pb_attr = pb_attr;
269 p_tinfo->p_lineinfo = p_line;
270 p_tinfo->dw_bufsize = dw_bufsize;
271 p_tinfo->dw_attrsize = dw_bufsize;
272 p_tinfo->dw_maxline = dw_maxline;
273 p_tinfo->dw_bufline = dw_bufline;
275 /* Link Empty-LineInfo Chain --- */
276 p_before = (p_tinfo->p_lineinfo + dw_maxline);
277 p_tinfo->p_empty = p_before;
278 p_line = p_before + 1;
279 for( dw_cnt = dw_maxline + 1; dw_cnt < dw_bufline; dw_cnt++ ) {
280 p_before->p_next = p_line++;
288 /*----------------------------------------------------------------------
289 ----------------------------------------------------------------------*/
291 DrCC_EditText_System_SearchEmptyTextInfo(
295 Drd64_DrCC_TextInfo *p_tinfo = NULL;
297 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- ) {
298 p_tinfo = (gp_textinfo + dw_cnt - 1);
300 assert( NULL != p_tinfo );
301 if( -1 == p_tinfo->i_id ) { break; }
308 /*----------------------------------------------------------------------
310 ----------------------------------------------------------------------*/
311 DRCC_EDITTEXT_SYSTEM_EXTERN
312 Drd64_DrCC_TextInfo *
313 DrCC_EditText_System_AllocTextInfo(
318 Drd64_DrCC_TextInfo *p_textinfo = NULL;
319 Drd64_DrCC_TextInfo *p_tmp;
321 dw_cnt = DrCC_EditText_System_SearchEmptyTextInfo();
324 if( gdw_max_textinfo == gdw_alloc_textinfo ) {
325 p_textinfo = (Drd64_DrCC_TextInfo *)realloc(
326 gp_textinfo, sizeof( Drd64_DrCC_TextInfo )
327 * (gdw_alloc_textinfo + DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO ) );
328 if( NULL == p_textinfo ) { return NULL; }
330 p_tmp = p_textinfo + gdw_max_textinfo;
332 sizeof( Drd64_DrCC_TextInfo ) * DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO );
333 for( i_tmp = 0; i_tmp < DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO; i_tmp++, p_tmp++ )
334 { p_tmp->i_id = -1; }
336 gp_textinfo = p_textinfo;
337 gdw_alloc_textinfo += DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO;
340 dw_cnt = gdw_max_textinfo + 1;
344 p_textinfo = (gp_textinfo + dw_cnt - 1);
345 memset( p_textinfo, 0x00, sizeof( Drd64_DrCC_TextInfo ) );
347 p_textinfo->i_id = (int)(dw_cnt - 1);
348 p_textinfo->pb_text = NULL;
349 p_textinfo->p_lineinfo = NULL;
350 p_textinfo->dw_bufsize = 0;
351 p_textinfo->dw_maxline = 0;
352 p_textinfo->dw_bufline = 0;
355 if( dw_cnt == gdw_max_textinfo + 1 )
356 { gdw_max_textinfo++; }
364 /*----------------------------------------------------------------------
365 ----------------------------------------------------------------------*/
366 DRCC_EDITTEXT_SYSTEM_EXTERN
368 DrCC_EditText_System_ClearTextInfo(
369 Drd64_DrCC_TextInfo *p_tinfo )
371 if( NULL == p_tinfo ) { return -0x01; }
373 assert( NULL != p_tinfo->pb_text );
374 free( p_tinfo->pb_text );
376 assert( NULL != p_tinfo->pb_attr );
377 free( p_tinfo->pb_attr );
379 assert( NULL != p_tinfo->p_lineinfo );
380 free( p_tinfo->p_lineinfo );
382 p_tinfo->pb_text = NULL;
383 p_tinfo->pb_attr = NULL;
384 p_tinfo->p_lineinfo = NULL;
385 p_tinfo->dw_bufsize = 0;
386 p_tinfo->dw_attrsize = 0;
387 p_tinfo->dw_maxline = 0;
388 p_tinfo->dw_bufline = 0;
394 /*----------------------------------------------------------------------
396 ----------------------------------------------------------------------*/
397 DRCC_EDITTEXT_SYSTEM_EXTERN
399 DrCC_EditText_System_FreeTextInfo(
400 Drd64_DrCC_TextInfo *p_tinfo )
404 Drd64_DrCC_TextInfo *p_tmp;
406 if( NULL == p_tinfo ) { return -0x01; }
407 if( -1 == p_tinfo->i_id ) { return -0x02; }
409 /* Clear TextInfo Struct */
410 i_oldid = p_tinfo->i_id;
412 p_tinfo->pb_text = NULL;
416 if( 0 == gdw_used_textinfo )
417 { gdw_max_textinfo = 0; }
418 else if( i_oldid == gdw_max_textinfo - 1 ) {
422 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- ) {
423 p_tmp = (gp_textinfo + dw_cnt - 1);
425 assert( NULL != p_tmp );
426 if( -1 != p_tmp->i_id ) { break; }
429 { gdw_max_textinfo = dw_cnt; }
437 /*----------------------------------------------------------------------
439 ----------------------------------------------------------------------*/
440 DRCC_EDITTEXT_SYSTEM_EXTERN
442 DrCC_EditText_System_Init(
446 Drd64_DrCC_TextInfo *p_textinfo;
447 Drd64_DrCC_TextInfo *p_tmp;
449 if( NULL != gp_textinfo ) { return 0x01; }
451 p_textinfo = (Drd64_DrCC_TextInfo *)malloc(
452 sizeof( Drd64_DrCC_TextInfo ) * DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO );
453 if( NULL == p_textinfo ) { return 0x02; }
454 memset( p_textinfo, 0x00,
455 sizeof( Drd64_DrCC_TextInfo ) * DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO );
457 gp_textinfo = p_textinfo;
458 gdw_max_textinfo = 0;
459 gdw_alloc_textinfo = DRD64_DRCC_DEFAULT_ALLOC_TEXTINFO;
462 for( i_cnt = 0; i_cnt < gdw_alloc_textinfo; i_cnt++, p_tmp++ )
463 { p_tmp->i_id = -1; }
469 /*----------------------------------------------------------------------
471 ----------------------------------------------------------------------*/
472 DRCC_EDITTEXT_SYSTEM_EXTERN
474 DrCC_EditText_System_Term(
478 Drd64_DrCC_TextInfo *p_textinfo;
480 if( NULL == gp_textinfo) { return 0x01; }
483 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- ) {
484 p_textinfo = (gp_textinfo + dw_cnt - 1);
485 assert( NULL != p_textinfo );
487 p_textinfo->i_id = -1;
498 /* EOF of drd64_.c ---------------------------------- */