OSDN Git Service

* Implement: DrCC_EditText_SaveTextFile Function
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 12 Apr 2015 02:02:38 +0000 (11:02 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 12 Apr 2015 02:02:38 +0000 (11:02 +0900)
drcc/Makefile
drcc/drcc_edittext.c
drcc/drcc_edittext.h
drcc/drcc_filetype.c
drcc/drcc_filetype.h
drcc/test_drcc_edittext.c
drcc/test_drcc_filetype.c

index 7bfab80..2d0632a 100644 (file)
@@ -144,4 +144,6 @@ clean:
        rm -f $(DRCC_TARGET)
        rm -f $(TEST_DRCC_TARGET)
        rm -f *.core
+       rm -f ./testdata/savetest.h
+
 
index 429f741..1b279a2 100644 (file)
@@ -53,7 +53,8 @@ DeleteChar
 ----------------------------------------------------------------------*/
 int
        DrCC_EditText_DebugTextInfo(
-               int     i_tinfoid )
+               int     i_tinfoid,
+               Byte b_putflag )
 {
        DWord           dw_nowrow;
        Byte            *pb_now;
@@ -65,33 +66,45 @@ int
        p_tinfo = DrCC_EditText_GetTextInfo( i_tinfoid );
        if( NULL == p_tinfo )   { return -0x02; }
        
-       puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
-       puts(  "[1] TextInfo Struct Data ");
-       printf("  TextInfo Struct ID: %d\n", p_tinfo->i_fd);
-       printf("  Path: %s\n", p_tinfo->str_pathname );
-       printf("  File: %s\n", p_tinfo->str_filename );
-       printf("  Lines: %u,  Buffer Lines: %u\n", p_tinfo->dw_maxline, p_tinfo->dw_bufline );
-       printf("  Buffer size: %u\n", p_tinfo->dw_bufsize );
-       printf("  FileDescriptor: %d, File SubType: %04x\n", p_tinfo->i_fd, p_tinfo->w_subtype );
-
-       puts("************ ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
-       puts(  "[2] Text Data ");
+       if( 0x00 != b_putflag )         {
+               puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
+               puts(  "[1] TextInfo Struct Data ");
+               printf("  TextInfo Struct ID: %d\n", p_tinfo->i_fd);
+               printf("  Path: %s\n", p_tinfo->str_pathname );
+               printf("  File: %s\n", p_tinfo->str_filename );
+               printf("  Lines: %u,  Buffer Lines: %u\n", p_tinfo->dw_maxline, p_tinfo->dw_bufline );
+               printf("  Buffer size: %u\n", p_tinfo->dw_bufsize );
+               printf("  FileDescriptor: %d, File SubType: %04x\n", p_tinfo->i_fd, p_tinfo->w_subtype );
+       }
+
+       if( 0x00 != b_putflag )         {
+               puts("************** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
+               puts(  "[2] Text Data ");
+       }
        p_before        = NULL;
        p_line          = p_tinfo->p_lineinfo;
        for( dw_nowrow = 0; dw_nowrow < p_tinfo->dw_maxline; dw_nowrow++ )      {
-               printf("%04u [%02u:%02u] ",
-                               dw_nowrow, p_line->dw_strlen, p_line->dw_linelen );
+               if( 0x00 != b_putflag )         {
+                       printf("%04u [%3u:%3u] ",
+                                       dw_nowrow, p_line->dw_strlen, p_line->dw_linelen );
+               }
                pb_now  = p_tinfo->pb_text + p_line->dw_start;
                if( 0 == p_line->dw_strlen )                                            { return -0x03; }
                if( '\n' != *(pb_now + p_line->dw_strlen - 1) )         { return -0x04; }
-               fputs( (char *)pb_now, stdout );
+
+               if( 0x00 != b_putflag )         {
+                       fputs( (char *)pb_now, stdout );
+               }
+
                if( p_before != p_line->p_before )      { return -0x05; }
                p_before        = p_line;
                p_line          = p_line->p_next;
        }
        if( NULL != p_line )    { return -0x06; }
 
-       puts("************ ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
+       if( 0x00 != b_putflag )         {
+               puts("************** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
+       }
 
        return 0x00;
 }
@@ -561,9 +574,71 @@ int
 
 
 /*----------------------------------------------------------------------
-Write Text File
+Save Text File
 ----------------------------------------------------------------------*/
+int
+       DrCC_EditText_SaveTextFile(
+               char    *pstr_path, 
+               char    *pstr_filename, 
+               int             i_tinfoid )
+{
+       int                     i_fd;
+       int                     i_result;
+       DWord           dw_nowrow;
+       Byte            *pb_now;
+       char            *pstr_filepath;
+       off_t           t_offset;
+       ssize_t         sz_write;
+       mode_t          t_mode;
+       char            str_filepath_tmp[DRD64_MAX_PATH];
+       Drd64_DrCC_TextInfo             *p_tinfo;
+       Drd64_DrCC_LineInfo             *p_line;
+
+       if( 0 > i_tinfoid )             { return -0x01; }
+       p_tinfo = DrCC_EditText_GetTextInfo( i_tinfoid );
+       if( NULL == p_tinfo )   { return -0x02; }
+
+       if(( NULL == pstr_path ) || ( NULL == pstr_filename))   {
+               i_result        = DrCC_EditText_CatPathFilename(
+                                               str_filepath_tmp, p_tinfo->str_pathname, p_tinfo->str_filename );
+               if( 0x00 != i_result )  { return -0x03; }
 
+               pstr_filepath   = str_filepath_tmp;
+       }
+       else    {
+               i_result        = DrCC_EditText_CatPathFilename(
+                                               str_filepath_tmp, pstr_path, pstr_filename );
+               if( 0x00 != i_result )  { return -0x03; }
+               pstr_filepath   = str_filepath_tmp;
+
+               t_mode  = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; 
+               i_fd    = open( pstr_filepath, O_RDWR | O_CREAT, t_mode );
+               if( 0x00 > i_fd )       { return -0x04; }
+
+               close( p_tinfo->i_fd );
+               p_tinfo->i_fd   = i_fd;
+               strncpy( p_tinfo->str_pathname, pstr_path, DRD64_MAX_PATH );
+        strncpy( p_tinfo->str_filename, pstr_filename, DRD64_MAX_PATH );
+       }
+
+       t_offset        = lseek( p_tinfo->i_fd, 0, SEEK_SET );
+       if( -0x01 == t_offset )         { return -0x10; }
+       
+       p_line          = p_tinfo->p_lineinfo;
+       for( dw_nowrow = 0; dw_nowrow < p_tinfo->dw_maxline; dw_nowrow++ )      {
+               pb_now  = p_tinfo->pb_text + p_line->dw_start;
+               if( 0 == p_line->dw_strlen )                                            { return -0x11; }
+               if( '\n' != *(pb_now + p_line->dw_strlen - 1) )         { return -0x12; }
+
+               sz_write        = write( p_tinfo->i_fd, (void *)pb_now, (size_t)p_line->dw_strlen );
+               if( (size_t)p_line->dw_strlen != sz_write )     { return -0x13; } 
+
+               p_line          = p_line->p_next;
+       }
+       if( NULL != p_line )    { return -0x20; }
+
+       return 0x00;
+}
 
 
 /*----------------------------------------------------------------------
index a71ba54..44373c1 100644 (file)
@@ -100,7 +100,7 @@ DRCC_EDITTEXT_EXTERN int DrCC_EditText_CloseFile( int i_tinfoid );
 
 
 #ifdef DRCC_EDITTEXT_INTERNALFUNC
-int            DrCC_EditText_DebugTextInfo( int i_tinfoid ); 
+int            DrCC_EditText_DebugTextInfo( int i_tinfoid, Byte b_putflag ); 
 DWord  DrCC_EditText_GetMaxNum_TextInfo(void);
 DWord  DrCC_EditText_GetAllocNum_TextInfo(void);
 int            DrCC_EditText_CatPathFilename(
@@ -112,7 +112,8 @@ Drd64_DrCC_TextInfo *DrCC_EditText_AllocTextInfo( void );
 int    DrCC_EditText_FreeTextInfo( Drd64_DrCC_TextInfo *p_textinfo );
 int            DrCC_EditText_ReadTextFile(
                        Drd64_DrCC_TextInfo *p_tinfo, char *pstr_filepath, DWord dw_fsize );
-
+int            DrCC_EditText_SaveTextFile(
+                       char *pstr_path, char *pstr_filename, int i_tinfoid );
 #endif
 
 #endif /* DRD64_HEADER_DRCC_EDITTEXT */
index 80cab7b..eefbac7 100644 (file)
@@ -40,6 +40,31 @@ Comment:
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 char *
+       DrCC_FileType_GetFileNamePosition(
+               char    *pstr_filepath )
+{
+       int             i_maxlen;
+       int             i_len           = 0;
+       char    *pstr_now;
+
+       assert( NULL != pstr_filepath );
+
+       i_maxlen        = (int)strnlen( pstr_filepath, DRD64_MAX_PATH );
+       pstr_now        = pstr_filepath + i_maxlen;
+       for( i_len = i_maxlen; i_len > 0; i_len-- )             {
+               if( '/' == *pstr_now-- )        { break; }
+       }
+       
+       if( 1 > i_len )         { pstr_now      = pstr_filepath + i_maxlen; }
+       else                            { pstr_now      += 2; }
+
+       return pstr_now;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+char *
        DrCC_FileType_GetFileExtPosition(
                char    *pstr_filepath )
 {
@@ -97,13 +122,14 @@ DRCC_FILETYPE_EXTERN
        int
        DrCC_FileType_GetFileType_fromFileName(
                Drd64_DrCC_FileType     *p_filetype,
-               char    *pstr_filename )
+               char    *pstr_filepath )
 {
        char    *pstr_ext;
+       char    *pstr_name;
        int             i_cnt;
 
        /* Search from Ext. DB --- */
-       pstr_ext        = DrCC_FileType_GetFileExtPosition( pstr_filename );
+       pstr_ext        = DrCC_FileType_GetFileExtPosition( pstr_filepath );
        i_cnt   = 0;
        do      {
                if( !strncmp( pstr_ext, fexttypedb[i_cnt].str_ext, DRD64_MAX_PATH ) )
@@ -115,9 +141,10 @@ DRCC_FILETYPE_EXTERN
        }while( (Byte)0xff != fexttypedb[++i_cnt].b_type );
 
        /* Judge of Special File-Name */
+       pstr_name       = DrCC_FileType_GetFileNamePosition( pstr_filepath );
        i_cnt   = 0;
        do      {
-               if( !strncmp( pstr_filename, fnametypedb[i_cnt].str_filename, DRD64_MAX_PATH ) )
+               if( !strncmp( pstr_name, fnametypedb[i_cnt].str_filename, DRD64_MAX_PATH ) )
                                {
                        p_filetype->b_type              = fnametypedb[i_cnt].b_type;
                        p_filetype->w_subtype   = fnametypedb[i_cnt].w_subtype;
index 5ca3928..abaabe1 100644 (file)
@@ -122,6 +122,7 @@ int DrCC_FileType_CheckFileType(
 
 
 #ifdef DRCC_FILETYPE_INTERNALFUNC
+char *DrCC_FileType_GetFileNamePosition( char *pstr_filepath );
 char *DrCC_FileType_GetFileExtPosition( char *pstr_filepath );
 int DrCC_FileType_VerifyTextFile( int *pi_lines, int i_fd );
 #endif
index 07cba64..a152aa0 100644 (file)
@@ -38,6 +38,53 @@ Comment:
 #include"test_drcc.h"
 #include"drcc.h"
 
+#define        DEBUG_TEXTINFO_OUTPUT   0x00
+       /* Output TextData for Console if this value isn't 0x00 when run test_drcc program.*/
+
+/* DrCC_EditText_SaveTextFile *****************************************/
+/*--------------------------------------------------------------------*/
+void Test_DrCC_EditText_SaveTextFile_test00_001(void)
+{
+       int             i_tinfoid;
+       int             i_result;
+       
+       i_tinfoid       = DrCC_EditText_OpenTextFile("./testdata", "drcc_testfile.c");
+       CU_ASSERT( 0x00 <= i_tinfoid );
+
+       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_SaveTextFile( NULL, NULL, i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_CloseFile( i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_EditText_SaveTextFile_test00_002(void)
+{
+       int             i_tinfoid;
+       int             i_result;
+       
+       i_tinfoid       = DrCC_EditText_OpenTextFile("./testdata", "drcc_testfile.h");
+       CU_ASSERT( 0x00 <= i_tinfoid );
+
+       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_SaveTextFile( "./testdata", "savetest.h", i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_CloseFile( i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+
 /* DrCC_EditText_OpenTextFile *****************************************/
 /*--------------------------------------------------------------------*/
 void Test_DrCC_EditText_OpenTextFile_test00_001(void)
@@ -48,7 +95,61 @@ void Test_DrCC_EditText_OpenTextFile_test00_001(void)
        i_tinfoid       = DrCC_EditText_OpenTextFile("./testdata", "drcc_testfile.c");
        CU_ASSERT( 0x00 <= i_tinfoid );
 
-       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid );
+       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_CloseFile( i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_EditText_OpenTextFile_test00_002(void)
+{
+       int             i_tinfoid;
+       int             i_result;
+       
+       i_tinfoid       = DrCC_EditText_OpenTextFile("./testdata", "drcc_testfile.h");
+       CU_ASSERT( 0x00 <= i_tinfoid );
+
+       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_CloseFile( i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_EditText_OpenTextFile_test00_003(void)
+{
+       int             i_tinfoid;
+       int             i_result;
+       
+       i_tinfoid       = DrCC_EditText_OpenTextFile("./testdata", "x8664db.csv");
+       CU_ASSERT( 0x00 <= i_tinfoid );
+
+       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = DrCC_EditText_CloseFile( i_tinfoid );
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_EditText_OpenTextFile_test00_004(void)
+{
+       int             i_tinfoid;
+       int             i_result;
+       
+       i_tinfoid       = DrCC_EditText_OpenTextFile("./testdata", "Makefile");
+       CU_ASSERT( 0x00 <= i_tinfoid );
+
+       i_result        = DrCC_EditText_DebugTextInfo( i_tinfoid, DEBUG_TEXTINFO_OUTPUT );
        CU_ASSERT( 0x00 == i_result );
 
        i_result        = DrCC_EditText_CloseFile( i_tinfoid );
@@ -302,6 +403,17 @@ int
 
        CU_add_test( pt_edittext, "EditText_OpenTextFile_test00_001",
                                                                Test_DrCC_EditText_OpenTextFile_test00_001 );
+       CU_add_test( pt_edittext, "EditText_OpenTextFile_test00_002",
+                                                               Test_DrCC_EditText_OpenTextFile_test00_002 );
+       CU_add_test( pt_edittext, "EditText_OpenTextFile_test00_003",
+                                                               Test_DrCC_EditText_OpenTextFile_test00_003 );
+       CU_add_test( pt_edittext, "EditText_OpenTextFile_test00_004",
+                                                               Test_DrCC_EditText_OpenTextFile_test00_004 );
+
+       CU_add_test( pt_edittext, "EditText_SaveTextFile_test00_001",
+                                                               Test_DrCC_EditText_SaveTextFile_test00_001 );
+       CU_add_test( pt_edittext, "EditText_SaveTextFile_test00_002",
+                                                               Test_DrCC_EditText_SaveTextFile_test00_002 );
 
        CU_add_test( pt_edittext, "EditText_Term_test00_002",
                                                                Test_DrCC_EditText_Term_test00_002 );
index 751e989..0e1abc1 100644 (file)
@@ -120,6 +120,24 @@ void Test_DrCC_FileType_VerifyTextFile_test00_004(void)
 }
 
 
+/* DrCC_FileType_GetFileNamePosition **********************************/
+/*--------------------------------------------------------------------*/
+void Test_DrCC_FileType_GetFileNamePosition_test00_001(void)
+{
+       CU_ASSERT_STRING_EQUAL_FATAL( "test.c",
+                       DrCC_FileType_GetFileNamePosition( "./testdata/test.c" ) );
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_DrCC_FileType_GetFileNamePosition_test00_002(void)
+{
+       CU_ASSERT_STRING_EQUAL_FATAL( "Makefile",
+                       DrCC_FileType_GetFileNamePosition( "./testdata/Makefile" ) );
+       return;
+}
+
+
 /* DrCC_FileType_GetFileExtPosition ***********************************/
 /*--------------------------------------------------------------------*/
 void Test_DrCC_FileType_GetFileExtPosition_test00_001(void)
@@ -320,6 +338,12 @@ int
        CU_add_test( pt_edittext, "FileType_GetFileExtPosition_test01_002",
                                        Test_DrCC_FileType_GetFileExtPosition_test01_002 );
 
+       /* FileType_GetFileNamePosition ***********************************/
+       CU_add_test( pt_edittext, "FileType_GetFileNamePosition_test00_001",
+                                       Test_DrCC_FileType_GetFileNamePosition_test00_001 );
+       CU_add_test( pt_edittext, "FileType_GetFileNamePosition_test00_002",
+                                       Test_DrCC_FileType_GetFileNamePosition_test00_002 );
+
        /* FileType_VerifyTextFile ***************************************/
        CU_add_test( pt_edittext, "FileType_VerifyTextFile_test00_001",
                                        Test_DrCC_FileType_VerifyTextFile_test00_001);