OSDN Git Service

* WorkBackup: 2015/07/26(Sun) 20:36
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 26 Jul 2015 11:37:06 +0000 (20:37 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 26 Jul 2015 11:37:06 +0000 (20:37 +0900)
libedittext/drd64_libedittext_debug.c
libedittext/drd64_libedittext_undoedit.c
libedittext/drd64_libedittext_undoinfo.c
libedittext/drd64_libedittext_undoinfo.h
libedittext/test_libedittext_undoinfo.c

index e84ad42..e3a285e 100644 (file)
@@ -78,7 +78,8 @@ int
                pb_now          = pb_undo;
                i_cmdflag       = 0x00;
                
-               i_result        = LibEditText_UndoInfo_ReadUndoInfo( p_tinfo, &t_udinfo, pb_now );
+               i_result        = LibEditText_UndoInfo_ReadUndoInfo(
+                                                       p_tinfo, &t_udinfo, dw_line, dw_pos, pb_now, 0x00 );
 
                switch( t_udinfo.b_cmd )        {
                        case LIBEDITTEXT_UNDOCMD_INSERTLINE:
index 1e9e8ae..d55e287 100644 (file)
@@ -183,7 +183,8 @@ int
 
        do{
                
-               i_result        = LibEditText_UndoInfo_ReadUndoInfo( p_tinfo, &t_udinfo, pb_undo );
+               i_result        = LibEditText_UndoInfo_ReadUndoInfo(
+                                                       p_tinfo, &t_udinfo, dw_line, dw_pos, pb_undo, 0x00 );
                
                dw_line         -= t_udinfo.dw_plusline;
                dw_pos          -= t_udinfo.dw_pluspos;
index 6910b0f..35eb977 100644 (file)
@@ -124,10 +124,10 @@ Byte *
 ----------------------------------------------------------------------*/
 Byte *
        LibEditText_UndoInfo_ReadDiffValue(
-                       DWord   *pdw_newvalue,
-                       DWord   *pdw_oldvalue,
+                       DWord   *pdw_value,
                        Byte    *pb_now,
-                       Byte    b_szflag )
+                       Byte    b_szflag,
+                       Byte    b_direct )
 {
        Char            *pc_diff;
        Short           *ps_diff;
@@ -139,12 +139,16 @@ Byte *
                if( 0x80 == *pb_now )   {
                        pb_now  += sizeof( Byte );
 
-                       pdw_tmp                 = (DWord *)pb_now;
-                       *pdw_newvalue   = *pdw_tmp;
+                       if( 0x00 != b_direct )  {
+                               pdw_tmp         = (DWord *)pb_now;
+                               *pdw_value      = *pdw_tmp;
+                       }
                        pb_now                  += sizeof( DWord );
 
-                       pdw_tmp                 = (DWord *)pb_now;
-                       *pdw_oldvalue   = *pdw_tmp;
+                       if( 0x00 == b_direct )  {
+                               pdw_tmp         = (DWord *)pb_now;
+                               *pdw_value      = *pdw_tmp;
+                       }
                        pb_now                  += sizeof( DWord );
 
                        goto    goto_LibEditText_UndoInfo_ReadDiffValue_post;
@@ -164,9 +168,22 @@ Byte *
                i_diff  = *pi_diff;
                pb_now  += sizeof( INT );
        }
-
-       *pdw_newvalue   = *pdw_oldvalue + i_diff;
        
+       if( 0x00 == b_direct )  { i_diff *= -1; }
+
+       if( 0 > i_diff )        {
+               i_diff  *= -1;
+               *pdw_value      -= i_diff;
+       }
+       else    {
+               *pdw_value      += i_diff;
+       }
+/*
+       if( 0x00 == b_direct )
+               { *pdw_value    -= i_diff; }
+       else
+               { *pdw_value    += i_diff; }
+*/
 goto_LibEditText_UndoInfo_ReadDiffValue_post:
        return pb_now;
 }
@@ -181,7 +198,7 @@ Byte
                        DWord   dw_oldvalue )
 {
        Byte            b_flag;
-       int                     i_size;
+       //int                   i_size;
        INT                     i_diff;
        Char            *pc_diff;
        Short           *ps_diff;
@@ -267,7 +284,10 @@ int
        LibEditText_UndoInfo_ReadUndoInfo(
                        LibEditText_TextInfo    *p_tinfo,
                        LibEditText_UndoInfo    *pt_udinfo,
-                       Byte                                    *pb_undo )
+                       DWord                                   dw_line,
+                       DWord                                   dw_pos,
+                       Byte                                    *pb_undo,
+                       Byte                                    b_direct )
 {
        Byte    *pb_now;        
        LibEditText_UndoFlag    *pt_udflag;
@@ -277,46 +297,62 @@ int
 
        pb_now  = pb_undo;
 
+       // Read Command Byte ---
        pt_udinfo->b_cmd        = *pb_now++;
 
+       // Read UndoFlag Byte ---
        pt_udflag                       = (LibEditText_UndoFlag *)pb_now;
        pt_udinfo->t_udflag     = *pt_udflag;
        pb_now                          += sizeof( LibEditText_UndoFlag );
 
+       // Read LinkSize ---
        pb_now  = LibEditText_UndoInfo_ReadDWordData(
                                &(pt_udinfo->dw_prevlength), pb_now, (Byte)(pt_udflag->bf_linksz) );
        
-       pb_now  = LibEditText_UndoInfo_ReadDWordData(
-                               &(pt_udinfo->dw_line), pb_now, (Byte)(pt_udflag->bf_line) );
-
-       pb_now  = LibEditText_UndoInfo_ReadDWordData(
-                               &(pt_udinfo->dw_pos), pb_now, (Byte)(pt_udflag->bf_pos) );
-
        pt_udinfo->b_data               = 0x00;
        pt_udinfo->pb_str               = NULL;
        pt_udinfo->dw_data              = 0;
        pt_udinfo->dw_plusline  = 0;
        pt_udinfo->dw_pluspos   = 0;
 
+       // Read Command-Depend Variable Data ---
        if( LIBEDITTEXT_UNDOCMD_INSERTSTRING == pt_udinfo->b_cmd )      {
                pt_udinfo->pb_str               = pb_now;
                pt_udinfo->dw_data              = LibEditText_UndoInfo_GetStringSize( p_tinfo, pb_now );
                pt_udinfo->dw_pluspos   = pt_udinfo->dw_data;
+               pb_now                                  += (pt_udinfo->dw_pluspos + 1);
        }
        else if( LIBEDITTEXT_UNDOCMD_INSERTCHAR == pt_udinfo->b_cmd )   {
                pt_udinfo->b_data               = *pb_now;
                pt_udinfo->dw_data              = 1;
                pt_udinfo->dw_pluspos   = 1;
+               pb_now                                  += 1;
        }
        else if( LIBEDITTEXT_UNDOCMD_DELETESTRING == pt_udinfo->b_cmd ) {
                pt_udinfo->pb_str               = pb_now;
                pt_udinfo->dw_data              = LibEditText_UndoInfo_GetStringSize( p_tinfo, pb_now );
+               pb_now                                  += (pt_udinfo->dw_pluspos + 1);
        }
        else if( LIBEDITTEXT_UNDOCMD_DELETECHAR == pt_udinfo->b_cmd )   {
                pt_udinfo->b_data               = *pb_now;
                pt_udinfo->dw_data              = 1;
+               pb_now                                  += 1;
        }
        
+       if( 0x00 == b_direct )  { dw_line       -= pt_udinfo->dw_plusline; }
+       pb_now  = LibEditText_UndoInfo_ReadDiffValue(
+                                               &dw_line, pb_now, (Byte)(pt_udflag->bf_line), b_direct );
+       pt_udinfo->dw_line      = dw_line;
+/*     pb_now  = LibEditText_UndoInfo_ReadDWordData(
+                               &(pt_udinfo->dw_line), pb_now, (Byte)(pt_udflag->bf_line) ); */
+
+       if( 0x00 == b_direct )  { dw_pos        -= pt_udinfo->dw_pluspos; }
+       pb_now  = LibEditText_UndoInfo_ReadDiffValue(
+                                               &dw_pos, pb_now, (Byte)(pt_udflag->bf_pos), b_direct );
+       pt_udinfo->dw_pos       = dw_pos;
+/*     pb_now  = LibEditText_UndoInfo_ReadDWordData(
+                               &(pt_udinfo->dw_pos), pb_now, (Byte)(pt_udflag->bf_pos) ); */
+
        return 0x00;
 }
 
@@ -506,20 +542,6 @@ int
        else
                { pt_udflag->bf_linksz  = 0x00; }
 
-       // Record Prev. Undo-Line ---
-       pt_udflag->bf_line      = 0x00;
-       if( dw_line != p_tinfo->dw_undo_line )  {
-               pt_udflag->bf_line      = LibEditText_UndoInfo_CalcPhraseSizeBit( p_tinfo->dw_undo_line );
-               pb_now  = LibEditText_UndoInfo_SetDWordData( pb_now, p_tinfo->dw_undo_line );
-       }
-
-       // Record Prev. Undo-Pos. ---
-       pt_udflag->bf_pos               = 0x00;
-       if( dw_pos != p_tinfo->dw_undo_pos )    {
-               pt_udflag->bf_pos       = LibEditText_UndoInfo_CalcPhraseSizeBit( p_tinfo->dw_undo_pos );
-               pb_now  = LibEditText_UndoInfo_SetDWordData( pb_now, p_tinfo->dw_undo_pos );
-       }
-
        // Record Command-Data ---
        dw_afterline    = dw_line;
        dw_afterpos             = dw_pos;
@@ -541,26 +563,6 @@ int
                *pb_now++       = b_data;
        }
        else if( LIBEDITTEXT_UNDOCMD_DELETESTRING == b_cmd )    {
-/*
-               // 1Byte is that string length is less than 255bytes.
-               if( 256 > dw_strlength )        {
-                       *pb_now         = (Byte)dw_strlength;
-                       pb_now++;
-               }
-               // And 4Byte is that string length is more than 256bytes.
-               else    {
-                       *pb_now++       = 0xff;
-
-                       pdw_tmp         = (DWord *)pb_now;
-                       *pdw_tmp        = dw_strlength;
-                       pb_now          += sizeof( DWord );
-               }
-
-               // Save Delete-String for Undo-Buffer ---
-               memcpy( pb_now, pb_str, dw_strlength );
-               pb_now          += dw_strlength;
-               *pb_now++       = '\0';
-*/
                // Save Delete-String for Undo-Buffer ---
                assert( NULL != pb_str );
 
@@ -580,6 +582,28 @@ int
                LIBEDITTEXT_UNDOCMD_INSERTLINE 
 */
 
+       // Record Prev. Undo-Line ---
+       pt_udflag->bf_line      = LibEditText_UndoInfo_SetDiffValue(
+                                                                               &pb_now, dw_line, p_tinfo->dw_undo_line );
+/*
+       pt_udflag->bf_line      = 0x00;
+       if( dw_line != p_tinfo->dw_undo_line )  {
+               pt_udflag->bf_line      = LibEditText_UndoInfo_CalcPhraseSizeBit( p_tinfo->dw_undo_line );
+               pb_now  = LibEditText_UndoInfo_SetDWordData( pb_now, p_tinfo->dw_undo_line );
+       }
+*/
+
+       // Record Prev. Undo-Pos. ---
+       pt_udflag->bf_pos       = LibEditText_UndoInfo_SetDiffValue(
+                                                                               &pb_now, dw_pos, p_tinfo->dw_undo_pos );
+/*
+       pt_udflag->bf_pos               = 0x00;
+       if( dw_pos != p_tinfo->dw_undo_pos )    {
+               pt_udflag->bf_pos       = LibEditText_UndoInfo_CalcPhraseSizeBit( p_tinfo->dw_undo_pos );
+               pb_now  = LibEditText_UndoInfo_SetDWordData( pb_now, p_tinfo->dw_undo_pos );
+       }
+*/
+
        p_tinfo->dw_undo_line   = dw_afterline;
        p_tinfo->dw_undo_pos    = dw_afterpos;
        p_tinfo->dw_undo_end    = p_tinfo->dw_undo_last;
index 78b895f..0ed5618 100644 (file)
@@ -82,7 +82,8 @@ typedef struct        {
 
 LIBEDITTEXT_UNDOINFO_EXTERN
        int LibEditText_UndoInfo_ReadUndoInfo(
-                       LibEditText_TextInfo *p_tinfo, LibEditText_UndoInfo *pt_udinfo, Byte *pb_undo );
+                       LibEditText_TextInfo *p_tinfo, LibEditText_UndoInfo *pt_udinfo,
+                       DWord dw_line, DWord dw_pos, Byte *pb_undo, Byte b_direct );
 LIBEDITTEXT_UNDOINFO_EXTERN
        void LibEditText_UndoInfo_SetRedoFlag( Byte *pb_undo );
 LIBEDITTEXT_UNDOINFO_EXTERN
@@ -102,7 +103,7 @@ LIBEDITTEXT_UNDOINFO_EXTERN
 #ifdef LIBEDITTEXT_UNDOINFO_INTERNALFUNC
 Byte *LibEditText_UndoInfo_RewindUncommitInfo( LibEditText_TextInfo *p_tinfo );
 Byte *LibEditText_UndoInfo_ReadDiffValue(
-                               DWord *pdw_newvalue, DWord *pdw_oldvalue, Byte *pb_now, Byte b_szflag );
+                               DWord *pdw_value, Byte *pb_now, Byte b_szflag, Byte b_direct );
 Byte LibEditText_UndoInfo_SetDiffValue( Byte **pb_ptr, DWord dw_newvalue, DWord dw_oldvalue );
 #endif
 
index cc2746f..6527fab 100644 (file)
@@ -159,135 +159,118 @@ void Test_LibEditText_UndoInfo_SetReadDiffValue_test00_001(void)
        Byte    b_data[256];
        Byte    b_flag;
        Byte    *pb_ptr;
-       DWord   dw_newvalue;
-       DWord   dw_oldvalue;
+       DWord   dw_value;
        
        // 0 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 0;
-       dw_oldvalue     = 123;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 123, dw_oldvalue );
+       dw_value        = 123;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 123, dw_value );
        CU_ASSERT( 0x00 == b_flag );
        CU_ASSERT( pb_ptr == (Byte *)b_data );
 
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, 0x00 );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, 0x00, 0x00 );
        CU_ASSERT( pb_ptr == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == dw_oldvalue );
+       CU_ASSERT( 123 == dw_value );
 
        // +1 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 257;
-       dw_oldvalue     = 256;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 256;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 257, dw_value );
        CU_ASSERT( 0x01 == b_flag );
        CU_ASSERT( pb_ptr - 1 == (Byte *)b_data );
 
-       dw_newvalue     = 0;
+       dw_value        = 257;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 1 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 257 );
+       CU_ASSERT( dw_value == 256 );
 
        // -127 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 0;
-       dw_oldvalue     = 127;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 127;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 0, dw_value );
        CU_ASSERT( 0x01 == b_flag );
        CU_ASSERT( pb_ptr - 1 == (Byte *)b_data );
 
-       dw_newvalue     = 127;
+       dw_value        = 0;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 1 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 0 );
+       CU_ASSERT( dw_value == 127 );
 
        // -128 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 0;
-       dw_oldvalue     = 128;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 128;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 0, dw_value );
        CU_ASSERT( 0x02 == b_flag );
        CU_ASSERT( pb_ptr - 2 == (Byte *)b_data );
 
-       dw_newvalue     = 128;
+       dw_value        = 0;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 2 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 0 );
+       CU_ASSERT( dw_value == 128 );
 
        // +32767 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 32767;
-       dw_oldvalue     = 0;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 0;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 32767, dw_value );
        CU_ASSERT( 0x02 == b_flag );
        CU_ASSERT( pb_ptr - 2 == (Byte *)b_data );
 
-       dw_newvalue     = 128;
+       dw_value        = 32767;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 2 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 32767 );
+       CU_ASSERT( dw_value == 0 );
 
        // -32768 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 0;
-       dw_oldvalue     = 32768;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 32768;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 0, dw_value );
        CU_ASSERT( 0x03 == b_flag );
        CU_ASSERT( pb_ptr - 4 == (Byte *)b_data );
 
-       dw_newvalue     = 128;
+       dw_value        = 0;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 4 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 0 );
+       CU_ASSERT( dw_value == 32768 );
 
        // +2147483647 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 2147483647;
-       dw_oldvalue     = 0;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 0;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 2147483647, dw_value );
        CU_ASSERT( 0x03 == b_flag );
        CU_ASSERT( pb_ptr - 4 == (Byte *)b_data );
 
-       dw_newvalue     = 128;
+       dw_value        = 2147483647;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 4 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 2147483647 );
+       CU_ASSERT( dw_value == 0 );
 
        // -2147483648 ---
        pb_ptr  = b_data;
        memset( pb_ptr, 0x00, 256 );
-       dw_newvalue     = 2;
-       dw_oldvalue     = 2147483650;
-       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, dw_newvalue, dw_oldvalue );
+       dw_value        = 2147483650;
+       b_flag  = LibEditText_UndoInfo_SetDiffValue( &pb_ptr, 2, dw_value );
        CU_ASSERT( 0x01 == b_flag );
        CU_ASSERT( 0x80 == b_data[0] );
        CU_ASSERT( pb_ptr - 9 == (Byte *)b_data );
 
-       dw_newvalue     = 128;
+       dw_value        = 2;
        pb_ptr  = b_data;
-       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue(
-                                               &dw_newvalue, &dw_oldvalue, pb_ptr, b_flag );
+       pb_ptr  = LibEditText_UndoInfo_ReadDiffValue( &dw_value, pb_ptr, b_flag, 0x00 );
        CU_ASSERT( pb_ptr - 9 == (Byte *)b_data );
-       CU_ASSERT( dw_newvalue == 2 );
+       CU_ASSERT( dw_value == 2147483650 );
 
        return;
 }