OSDN Git Service

* CreateFile: drd64_libedittext_undoedit.[ch]
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Wed, 22 Jul 2015 12:00:46 +0000 (21:00 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Wed, 22 Jul 2015 12:00:46 +0000 (21:00 +0900)
libedittext/Makefile
libedittext/drd64_libedittext.h
libedittext/drd64_libedittext_undoedit.c [new file with mode: 0644]
libedittext/drd64_libedittext_undoedit.h [new file with mode: 0644]
libedittext/drd64_libedittext_undoinfo.c
libedittext/drd64_libedittext_undoinfo.h

index 0d5a132..ba885b4 100644 (file)
@@ -65,6 +65,7 @@ OBJS = \
                drd64_libedittext_cursorapi_edit.o \
                drd64_libedittext_cursorapi_move.o \
                drd64_libedittext_undoinfo.o \
+               drd64_libedittext_undoedit.o \
                drd64_libedittext_system.o
 HEADER = \
                drd64_libedittext.h \
@@ -78,6 +79,7 @@ HEADER = \
                drd64_libedittext_cursorctrl.h \
                drd64_libedittext_cursormove.h \
                drd64_libedittext_undoinfo.h \
+               drd64_libedittext_undoedit.h \
                drd64_libedittext_system.h \
                drd64_libedittext_types.h \
                drd64_libedittext_config.h \
@@ -145,6 +147,9 @@ drd64_libedittext_cursorapi_move.o: drd64_libedittext_cursorapi_move.c $(HEADER)
 drd64_libedittext_undoinfo.o: drd64_libedittext_undoinfo.c $(HEADER)
        $(CC) -c -o drd64_libedittext_undoinfo.o $(FLAGS_DEBUG) $(FLAGS_COMPILE) \
                                drd64_libedittext_undoinfo.c
+drd64_libedittext_undoedit.o: drd64_libedittext_undoedit.c $(HEADER)
+       $(CC) -c -o drd64_libedittext_undoedit.o $(FLAGS_DEBUG) $(FLAGS_COMPILE) \
+                               drd64_libedittext_undoedit.c
 drd64_libedittext_debug.o: drd64_libedittext_debug.c $(HEADER)
        $(CC) -c -o drd64_libedittext_debug.o $(FLAGS_DEBUG) $(FLAGS_COMPILE) \
                                drd64_libedittext_debug.c
index f39aa4a..f6cb0a1 100644 (file)
@@ -67,6 +67,7 @@ Comment:
 #include"drd64_libedittext_cursorctrl.h"
 #include"drd64_libedittext_cursormove.h"
 #include"drd64_libedittext_undoinfo.h"
+#include"drd64_libedittext_undoedit.h"
 #include"drd64_libedittext_debug.h"
 
 #include"../include/libedittext.h"
@@ -85,6 +86,7 @@ Comment:
 #define        DRD64_SRC_LIBEDITTEXT_CURSORAPI_EDIT_SRCID      0x38
 #define        DRD64_SRC_LIBEDITTEXT_CURSORAPI_MOVE_SRCID      0x39
 #define        DRD64_SRC_LIBEDITTEXT_UNDOINFO_SRCID            0x41
+#define        DRD64_SRC_LIBEDITTEXT_UNDOEDIT_SRCID            0x42
 
 #endif /* DRD64_HEADER_DRCC_INCLUDE */
 
diff --git a/libedittext/drd64_libedittext_undoedit.c b/libedittext/drd64_libedittext_undoedit.c
new file mode 100644 (file)
index 0000000..7e351df
--- /dev/null
@@ -0,0 +1,200 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#define        DRD64_SRC_LIBEDITTEXT_UNDOEDIT
+#include"drd64_libedittext.h"
+
+#define        LOCATION(n)     DRD64_ERR_LOCATION( \
+                                               DRD64_ERROR_MODULE_LIBEDITTEXT, DRD64_ERROR_ARCH_NODEPEND, \
+                                               DRD64_SRC_LIBEDITTEXT_UNDOEDIT_SRCID, (n))
+
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDOEDIT_EXTERN
+int
+       LibEditText_UndoEdit_ExecReDoInfo(
+                       LibEditText_TextInfo    *p_tinfo,
+                       LibEditText_UndoInfo    *p_udinfo )
+{
+       int                                             i_result        = 0x00;
+       LibEditText_LineInfo    *p_line;
+       
+
+       if( LIBEDITTEXT_UNDOCMD_INSERTLINE == p_udinfo->b_cmd )         {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_DELETELINE == p_udinfo->b_cmd )    {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_INSERTSTRING == p_udinfo->b_cmd )  {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_DELETESTRING == p_udinfo->b_cmd )  {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_INSERTCHAR == p_udinfo->b_cmd )    {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_DELETECHAR == p_udinfo->b_cmd )    {
+
+       }
+       else    {
+
+       }
+       
+       return i_result;
+}
+
+/*----------------------------------------------------------------------
+typedef struct  {
+        unsigned        bf_redone:              1;
+        unsigned        bf_chain:               1;
+        unsigned        bf_linksz:              2;
+        unsigned        bf_pos:                 2;
+        unsigned        bf_line:                2;
+} LibEditText_UndoFlag;
+
+
+typedef struct  {
+        Byte                                    b_cmd;
+        LibEditText_UndoFlag    t_udflag;
+        DWord                                   dw_prevlength;
+        DWord                                   dw_line;
+        DWord                                   dw_pos;
+        DWord                                   dw_data;
+        Byte                                    b_data;
+        Byte                                    *pb_str;
+
+        DWord                                   dw_plusline;
+        DWord                                   dw_pluspos;
+----------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDOEDIT_EXTERN
+int
+       LibEditText_UndoEdit_ExecUnDoInfo(
+                       LibEditText_TextInfo    *p_tinfo,
+                       LibEditText_UndoInfo    *p_udinfo,
+                       DWord                                   dw_line,
+                       DWord                                   dw_pos )
+{
+       int                                             i_result        = 0x00;
+       LibEditText_LineInfo    *p_line;
+       
+
+       if( LIBEDITTEXT_UNDOCMD_INSERTLINE == p_udinfo->b_cmd )         {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_DELETELINE == p_udinfo->b_cmd )    {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_INSERTSTRING == p_udinfo->b_cmd )  {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_DELETESTRING == p_udinfo->b_cmd )  {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_INSERTCHAR == p_udinfo->b_cmd )    {
+
+       }
+       else if( LIBEDITTEXT_UNDOCMD_DELETECHAR == p_udinfo->b_cmd )    {
+
+       }
+       else    {
+               // INVALID UndoCommand ---
+               i_result        = -0x01;
+       }
+       
+       return i_result;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDOEDIT_EXTERN
+int
+       LibEditText_UndoEdit_ExecUnDo(
+                       LibEditText_TextInfo    *p_tinfo )
+{
+       int                                             i_result;
+       Byte                                    *pb_undo;
+       Byte                                    *pb_last;
+       DWord                                   dw_line;
+       DWord                                   dw_pos;
+       LibEditText_UndoInfo    t_udinfo;
+
+       assert( NULL != p_tinfo );
+
+       if( 0 == p_tinfo->dw_undo_last )        {
+               return 0x01;
+       }
+
+       pb_undo = p_tinfo->pb_undo + p_tinfo->dw_undo_end;
+       pb_last = p_tinfo->pb_undo + p_tinfo->dw_undo_last;
+       dw_line = p_tinfo->dw_undo_line;
+       dw_pos  = p_tinfo->dw_undo_pos;
+
+       do{
+               
+               i_result        = LibEditText_UndoInfo_ReadUndoInfo( p_tinfo, &t_udinfo, pb_undo );
+               
+               dw_line         -= t_udinfo.dw_plusline;
+               dw_pos          -= t_udinfo.dw_pluspos;
+               
+               // Exec Undo ---
+               i_result        = LibEditText_UndoEdit_ExecUnDoInfo( p_tinfo, &t_udinfo, dw_line, dw_pos );
+
+               if( 0x00 != t_udinfo.t_udflag.bf_line )
+                       { dw_line       = t_udinfo.dw_line; }
+               if( 0x00 != t_udinfo.t_udflag.bf_pos )
+                       { dw_pos        = t_udinfo.dw_pos; }
+
+               LibEditText_UndoInfo_SetRedoFlag( pb_undo );
+
+               pb_last         = pb_undo;
+               pb_undo         -= t_udinfo.dw_prevlength;
+
+       }while(( 0x00 == t_udinfo.t_udflag.bf_chain) && ( 0x00 != t_udinfo.t_udflag.bf_linksz )
+                       && ( pb_last > p_tinfo->pb_undo ));
+
+       return i_result;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libedittext/drd64_libedittext_undoedit.h b/libedittext/drd64_libedittext_undoedit.h
new file mode 100644 (file)
index 0000000..a575e32
--- /dev/null
@@ -0,0 +1,59 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: Header 
+Comment: 
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_LIBEDITTEXT_UNDOEDIT
+#define DRD64_HEADER_LIBEDITTEXT_UNDOEDIT
+
+#ifdef DRD64_SRC_LIBEDITTEXT_UNDOEDIT
+       #define LIBEDITTEXT_UNDOEDIT_EXTERN
+#else
+       #define LIBEDITTEXT_UNDOEDIT_EXTERN     extern
+#endif
+
+#if defined DRD64_SRC_LIBEDITTEXT_UNDOEDIT
+       #define LIBEDITTEXT_UNDOEDIT_INTERNALFUNC
+#elif defined DRD64_SRC_TEST_LIBEDITTEXT_UNDOEDIT
+       #define LIBEDITTEXT_UNDOEDIT_INTERNALFUNC
+#endif
+
+
+
+#ifdef LIBEDITTEXT_UNDOEDIT_INTERNALFUNC
+#endif
+
+#endif /* DRD64_HEADER_XXX */
+
+/* EOF of drd64_.h ----------------------------------- */
index c5f3208..5e9147d 100644 (file)
@@ -207,6 +207,25 @@ int
 ----------------------------------------------------------------------*/
 LIBEDITTEXT_UNDOINFO_EXTERN
 void
+       LibEditText_UndoInfo_SetRedoFlag(
+                       Byte                                    *pb_undo )
+{
+       LibEditText_UndoFlag    *pt_udflag;
+
+       assert( NULL != pb_undo );
+
+       pt_udflag       = (LibEditText_UndoFlag *)(pb_undo + 1);
+
+       pt_udflag->bf_redone            = 0x01;
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBEDITTEXT_UNDOINFO_EXTERN
+void
        LibEditText_UndoInfo_CommitUndo(
                        LibEditText_TextInfo    *p_tinfo,
                        int             i_flag )
index d3d67c1..1036219 100644 (file)
@@ -84,6 +84,8 @@ LIBEDITTEXT_UNDOINFO_EXTERN
        int LibEditText_UndoInfo_ReadUndoInfo(
                        LibEditText_TextInfo *p_tinfo, LibEditText_UndoInfo *pt_udinfo, Byte *pb_undo );
 LIBEDITTEXT_UNDOINFO_EXTERN
+       void LibEditText_UndoInfo_SetRedoFlag( Byte *pb_undo );
+LIBEDITTEXT_UNDOINFO_EXTERN
        void LibEditText_UndoInfo_CommitUndo( LibEditText_TextInfo *p_tinfo, int i_flag );
 LIBEDITTEXT_UNDOINFO_EXTERN
        int LibEditText_UndoInfo_CancelUndoInfo( LibEditText_TextInfo *p_tinfo );