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:
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;
----------------------------------------------------------------------*/
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;
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;
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;
}
DWord dw_oldvalue )
{
Byte b_flag;
- int i_size;
+ //int i_size;
INT i_diff;
Char *pc_diff;
Short *ps_diff;
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;
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;
}
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;
*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 );
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;
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
#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
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;
}