----------------------------------------------------------------------*/
LIBEDITTEXT_DEBUG_EXTERN
int
+ LibEditText_Debug_UndoInfo(
+ LibEditText_TextInfo *p_tinfo,
+ Byte b_putflag )
+{
+ Byte *pb_undo;
+ Byte *pb_now;
+ Byte b_cmd;
+ DWord dw_line;
+ DWord dw_pos;
+ DWord dw_prevlength;
+ LibEditText_UndoFlag *pt_udflag;
+
+
+ assert( NULL != p_tinfo );
+
+ pb_undo = p_tinfo->pb_undo + p_tinfo->dw_undo_end;
+
+ dw_line = p_tinfo->dw_undo_line;
+ dw_pos = p_tinfo->dw_undo_pos;
+
+ do {
+ pb_now = pb_undo;
+
+ b_cmd = *pb_now++;
+
+ pt_udflag = (LibEditText_UndoFlag *)pb_now;
+ pb_now++;
+
+
+
+ dw_prevlength = LibEditText_Undo_GetRewindSize( pb_now );
+ pb_undo -= dw_prevlength;
+ }while( pb_undo > p_tinfo->pb_undo );
+
+ return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_DEBUG_EXTERN
+int
LibEditText_Debug_Cursor(
LibEditText_TextInfo *p_tinfo,
Byte b_putflag )
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+Byte *
+ LibEditText_Undo_ReadDWordData(
+ DWord *pdw_value,
+ Byte *pb_now,
+ Byte b_szflag )
+{
+ Byte b_tmp;
+ Word w_tmp;
+ DWord dw_tmp;
+
+ if( 0x01 == b_szflag ) {
+ b_tmp = (Byte)*pb_now;
+ *pdw_value = (DWord)b_tmp;
+ pb_now += 1;
+ }
+ else if( 0x02 == b_szflag ) {
+ w_tmp = (Word)*pb_now;
+ *pdw_value = (DWord)w_tmp;
+ pb_now += 2;
+ }
+ else if( 0x04 == b_szflag ) {
+ dw_tmp = (Word)*pb_now;
+ *pdw_value = (DWord)dw_tmp;
+ pb_now += 4;
+ }
+ else
+ { *pdw_value = 0xffffffff; }
+
+ return pb_now;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+DWord
+ LibEditText_Undo_GetStringSize(
+ LibEditText_TextInfo *p_tinfo,
+ Byte *pb_now )
+{
+ Byte *pb_end;
+ DWord dw_size;
+
+ dw_size = 0;
+ pb_end = p_tinfo->pb_undo + p_tinfo->dw_undo_last;
+
+ while(( '\0' != *pb_now ) && ( pb_now < pb_end )) {
+ pb_now++;
+ dw_size++;
+ }
+
+ return dw_size;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDO_EXTERN
+int
+ LibEditText_Undo_ReadUndoInfo(
+ LibEditText_TextInfo *p_tinfo,
+ LibEditText_UndoInfo *pt_udinfo,
+ Byte *pb_undo )
+{
+ Byte *pb_now;
+ DWord *pdw_value;
+ LibEditText_UndoFlag *pt_udflag;
+
+ assert( NULL != pt_udinfo );
+ assert( NULL != pb_undo );
+
+ pb_now = pb_undo;
+
+ pt_udinfo->b_cmd = *pb_now++;
+
+ pt_udflag = (LibEditText_UndoFlag *)pb_now;
+ pt_udinfo->t_udflag = *pt_udflag;
+ pb_now += sizeof( LibEditText_UndoFlag );
+
+ pb_now = LibEditText_Undo_ReadDWordData(
+ &(pt_udinfo->dw_prevlength), pb_now, (Byte)(pt_udflag->bf_linksz) );
+
+ pb_now = LibEditText_Undo_ReadDWordData(
+ &(pt_udinfo->dw_line), pb_now, (Byte)(pt_udflag->bf_line) );
+
+ pb_now = LibEditText_Undo_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_strlength = 0;
+ pt_udinfo->dw_plusline = 0;
+ pt_udinfo->dw_pluspos = 0;
+
+ if( LIBEDITTEXT_UNDOCMD_INSERTSTRING == pt_udinfo->b_cmd ) {
+ pt_udinfo->pb_str = pb_now;
+ pt_udinfo->dw_strlength = LibEditText_Undo_GetStringSize( p_tinfo, pb_now );
+ pt_udinfo->dw_pluspos = pt_udinfo->dw_strlength;
+ }
+ else if( LIBEDITTEXT_UNDOCMD_INSERTCHAR == pt_udinfo->b_cmd ) {
+ pt_udinfo->b_data = *pb_now;
+ pt_udinfo->dw_strlength = 1;
+ pt_udinfo->dw_pluspos = 1;
+ }
+ else if( LIBEDITTEXT_UNDOCMD_DELETESTRING == pt_udinfo->b_cmd ) {
+ if( 0xff == *pb_now ) {
+ pdw_value = (DWord *)(pb_now + 1);
+ pt_udinfo->dw_strlength = *pdw_value;
+ }
+ else {
+ pt_udinfo->dw_strlength = (DWord)(*pb_now);
+ }
+
+ }
+ else if( LIBEDITTEXT_UNDOCMD_SPLITLINE == pt_udinfo->b_cmd ) {
+ pt_udinfo->dw_plusline = 1;
+ //pt_udinfo->dw_pluspos = 0;
+ }
+
+ return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
Byte
LibEditText_Undo_CalcPhraseSizeBit(
DWord dw_data )
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDO_EXTERN
DWord
LibEditText_Undo_GetRewindSize(
- LibEditText_TextInfo *p_tinfo,
Byte *pb_now )
{
Byte *pb_tmp;
pt_udflag = (LibEditText_UndoFlag *)(pb_undo + 1);
while( 0x00 == pt_udflag->bf_chain ) {
- dw_length = LibEditText_Undo_GetRewindSize( p_tinfo, pb_undo );
+ dw_length = LibEditText_Undo_GetRewindSize( pb_undo );
if( 0 == dw_length ) { break; }
pb_last = pb_undo;
pb_now += sizeof( DWord );
}
- dw_afterpos -= dw_strlength;
+ //dw_afterpos -= dw_strlength;
}
else if( LIBEDITTEXT_UNDOCMD_SPLITLINE == b_cmd ) {
dw_afterline++;