From d91c90768862ec03c4909fcd3a443fd7e601e03e Mon Sep 17 00:00:00 2001 From: "Koine Yuusuke(koinec)" Date: Mon, 20 Apr 2015 17:34:40 +0900 Subject: [PATCH] * Implement: DrCC_EditText_Line_AppendLine() * Implement: Empty LineInfo Chain Pool (DrCC_EditText_Line_SetEmptyLineChain & DrCC_EditText_Line_GetEmptyLineInfo() ) --- drcc/drcc_edittext_debug.c | 5 +- drcc/drcc_edittext_file.c | 104 ++++++++++++----------------------------- drcc/drcc_edittext_line.c | 12 +++-- drcc/drcc_edittext_line.h | 5 ++ drcc/drcc_edittext_system.c | 4 +- drcc/test_drcc_edittext_file.c | 1 - 6 files changed, 49 insertions(+), 82 deletions(-) diff --git a/drcc/drcc_edittext_debug.c b/drcc/drcc_edittext_debug.c index fe4bf54..ec90129 100644 --- a/drcc/drcc_edittext_debug.c +++ b/drcc/drcc_edittext_debug.c @@ -59,7 +59,7 @@ int if( NULL == p_line ) { continue; } dw_nowlen = p_line->dw_linelen; - dw_lencount = 1; + dw_lencount = 0; while( NULL != p_line ) { if( dw_nowlen < p_line->dw_linelen ) { @@ -112,7 +112,7 @@ int dw_nowlen = p_line->dw_linelen; if( 0 == dw_nowlen ) { return -0x01; } - dw_lencount = 1; + dw_lencount = 0; while( NULL != p_line ) { if( dw_nowlen < p_line->dw_linelen ) { @@ -149,7 +149,6 @@ int Byte b_putflag ) { DWord dw_nowrow; - int i_cnt; int i_result; Byte *pb_now; Drd64_DrCC_TextInfo *p_tinfo; diff --git a/drcc/drcc_edittext_file.c b/drcc/drcc_edittext_file.c index 8cbefc9..33c9b9b 100644 --- a/drcc/drcc_edittext_file.c +++ b/drcc/drcc_edittext_file.c @@ -74,108 +74,66 @@ int { int i_result = 0x00; int i_fd; - Byte b_buf[DRD64_DRCC_DEFAULT_READBUF]; - Byte *pb_tmp_now; - Byte *pb_tmp_start; - Byte *pb_data_now; + Byte *pb_start; Byte *pb_buffer; Byte *pb_now; ssize_t sz_read; DWord dw_nowrow; - DWord dw_nowpos; - Drd64_DrCC_LineInfo *p_before; - Drd64_DrCC_LineInfo *p_line; + DWord dw_allocsize; + DWord dw_pos; - pb_buffer = (Byte *)malloc( dw_maxlength + 1 ); + dw_allocsize = dw_maxlength + DRD64_DRCC_DEFAULT_READBUF + 1; + pb_buffer = (Byte *)malloc( dw_allocsize ); if( NULL == pb_buffer ) { return -0x01; } memset( pb_buffer, 0x00, dw_maxlength + 1 ); i_fd = open( pstr_filepath, O_RDWR ); if( 0x00 > i_fd ) { - i_result = -0x01; + i_result = -0x02; goto goto_DrCC_EditText_File_ReadTextFile_post; } p_tinfo->i_fd = i_fd; - pb_data_now = p_tinfo->pb_text; - p_line = p_tinfo->p_lineinfo; - p_before = NULL; - dw_nowpos = 0; dw_nowrow = 0; - - p_line->dw_start = 0; - - pb_now = pb_buffer; + dw_pos = 0; + pb_start = pb_buffer; + pb_now = pb_start; do { - sz_read = read( p_tinfo->i_fd, &b_buf, DRD64_DRCC_DEFAULT_READBUF ); - //sz_read = read( p_tinfo->i_fd, pb_now, DRD64_DRCC_DEFAULT_READBUF ); + sz_read = read( p_tinfo->i_fd, pb_start, DRD64_DRCC_DEFAULT_READBUF ); if( 0 >= sz_read ) { - i_result = -0x01; + i_result = -0x03; goto goto_DrCC_EditText_File_ReadTextFile_post; } - pb_tmp_start = b_buf; - pb_tmp_now = b_buf; - //pb_tmp_start = pb_now; - //pb_tmp_now = pb_now:; dw_fsize -= (DWord)sz_read; - for( ; 0 < sz_read; sz_read--, pb_tmp_now++ ) { - if( '\n' == *pb_tmp_now ) { - memcpy( pb_data_now, pb_tmp_start, (size_t)(pb_tmp_now - pb_tmp_start + 1) ); - - p_line->dw_strlen += (DWord)(pb_tmp_now - pb_tmp_start + 1); - p_line->dw_linelen = p_line->dw_strlen - + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE; - - dw_nowpos += p_line->dw_linelen; - pb_data_now += p_line->dw_linelen; - p_before = p_line; - - i_result = DrCC_EditText_Line_AddSortChain( p_tinfo, p_line ); - if( 0x00 != i_result ) { - i_result = -0x02; - goto goto_DrCC_EditText_File_ReadTextFile_post; - } - p_line++; + for( ; 0 < sz_read; sz_read--, dw_pos++ ) { + if( '\n' == *pb_now ) { + i_result = DrCC_EditText_Line_AppendLine( + p_tinfo, pb_buffer, (DWord)(pb_now - pb_buffer + 1)); dw_nowrow++; - pb_tmp_start = pb_tmp_now + 1; - - p_line->dw_start = dw_nowpos; - p_before->p_next = p_line; - p_line->p_before = p_before; - } - } - if( 1 < (pb_tmp_now - pb_tmp_start) ) { - memcpy( pb_data_now, pb_tmp_start, (size_t)(pb_tmp_now - pb_tmp_start) ); - p_line->dw_strlen += (DWord)(pb_tmp_now - pb_tmp_start); - dw_nowpos += (DWord)(pb_tmp_now - pb_tmp_start); - pb_data_now += (DWord)(pb_tmp_now - pb_tmp_start); + if( 1 < sz_read ) { + memcpy( pb_buffer, (pb_now + 1), sz_read - 1); + memset( pb_buffer + sz_read - 1, 0x00, dw_allocsize - sz_read ); + } + pb_start = pb_buffer; + pb_now = pb_start; + } + else { pb_now++; } } - + pb_start = pb_now; }while( 0 < dw_fsize ); - - if( NULL == p_line->p_before ) { - p_line->dw_strlen += (DWord)(pb_tmp_now - pb_tmp_start); - p_line->dw_linelen = p_line->dw_strlen - + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE; - - dw_nowpos += p_line->dw_linelen; - p_line->p_next = NULL; - i_result = DrCC_EditText_Line_AddSortChain( p_tinfo, p_line ); - if( 0x00 != i_result ) { - i_result = -0x02; - goto goto_DrCC_EditText_File_ReadTextFile_post; - } + if( dw_nowrow + 1 == p_tinfo->dw_maxline ) { + i_result = DrCC_EditText_Line_AppendLine( + p_tinfo, pb_buffer, (DWord)(pb_now - pb_buffer)); + dw_nowrow++; } - else { - p_before->p_next = NULL; + else if( dw_nowrow != p_tinfo->dw_maxline ) { + i_result = -0x04; } - p_tinfo->dw_lastsize = dw_nowpos; - goto_DrCC_EditText_File_ReadTextFile_post: free( pb_buffer ); @@ -229,7 +187,7 @@ int /* Read Textfile & Generate LineInfo */ i_result = DrCC_EditText_File_ReadTextFile( p_tinfo, str_filepath, t_ftype.dw_filesize, t_ftype.dw_maxlength ); - if( 0x00 != i_result ) { return -0x05; } + if( 0x00 != i_result ) { return -0x06; } return p_tinfo->i_id; } diff --git a/drcc/drcc_edittext_line.c b/drcc/drcc_edittext_line.c index 95691fc..e6a15c0 100644 --- a/drcc/drcc_edittext_line.c +++ b/drcc/drcc_edittext_line.c @@ -141,6 +141,7 @@ int /*---------------------------------------------------------------------- ----------------------------------------------------------------------*/ +DRCC_EDITTEXT_LINE_EXTERN int DrCC_EditText_Line_AppendLine( Drd64_DrCC_TextInfo *p_tinfo, @@ -157,19 +158,24 @@ int dw_buflength = dw_length + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE; p_line = DrCC_EditText_Line_GetEmptyLineInfo( p_tinfo, dw_buflength ); - if( NULL == p_line ) { return -0x01; } + if( NULL == p_line ) { return -0x11; } /* p_line->dw_start */ + if( NULL != p_before ) + { p_before->p_next = p_line; } p_line->dw_strlen = dw_length; - p_before->p_next = p_line; p_line->p_before = p_before; i_result = DrCC_EditText_Line_AddSortChain( p_tinfo, p_line ); if( 0x00 != i_result ) { - return -0x01; + return -0x12; } + memcpy( p_tinfo->pb_text + p_line->dw_start, pstr_text, dw_length ); + p_tinfo->p_line_end = p_line; + + return 0x00; } diff --git a/drcc/drcc_edittext_line.h b/drcc/drcc_edittext_line.h index 7e6d23b..1a61770 100644 --- a/drcc/drcc_edittext_line.h +++ b/drcc/drcc_edittext_line.h @@ -66,6 +66,11 @@ DRCC_EDITTEXT_SYSTEM_EXTERN DrCC_EditText_Line_SetEmptyLineChain( Drd64_DrCC_TextInfo *p_tinfo, Drd64_DrCC_LineInfo *p_line ); DRCC_EDITTEXT_LINE_EXTERN +int + DrCC_EditText_Line_AppendLine( + Drd64_DrCC_TextInfo *p_tinfo, Byte *pstr_text, DWord dw_length ); + +DRCC_EDITTEXT_LINE_EXTERN int DrCC_EditText_Line_RemoveSortChain( Drd64_DrCC_TextInfo *p_tinfo, diff --git a/drcc/drcc_edittext_system.c b/drcc/drcc_edittext_system.c index ccf4972..9cdf1ee 100644 --- a/drcc/drcc_edittext_system.c +++ b/drcc/drcc_edittext_system.c @@ -137,8 +137,8 @@ int p_tinfo->dw_bufline = dw_bufline; /* Link Empty-LineInfo Chain --- */ - p_line = (p_tinfo->p_lineinfo + dw_maxline); - for( dw_cnt = dw_maxline; dw_cnt < dw_bufline; dw_cnt++ ) { + p_line = p_tinfo->p_lineinfo; + for( dw_cnt = 0; dw_cnt < dw_bufline; dw_cnt++ ) { i_result = DrCC_EditText_Line_SetEmptyLineChain( p_tinfo, p_line ); p_line++; } diff --git a/drcc/test_drcc_edittext_file.c b/drcc/test_drcc_edittext_file.c index 0d0ba70..2a5f87b 100644 --- a/drcc/test_drcc_edittext_file.c +++ b/drcc/test_drcc_edittext_file.c @@ -167,7 +167,6 @@ void Test_DrCC_EditText_File_CreateTextFile_test00_001(void) CU_ASSERT( 0x00 <= i_tinfoid ); i_result = DrCC_EditText_Debug_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT ); - printf("err= %d\n", i_result); CU_ASSERT( 0x00 == i_result ); i_result = DrCC_EditText_File_CloseFile( i_tinfoid ); -- 2.11.0