OSDN Git Service

* Implement: LineInfo Empty-Chain in TextInfo struct
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 12 Apr 2015 09:40:05 +0000 (18:40 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Sun, 12 Apr 2015 09:40:05 +0000 (18:40 +0900)
drcc/drcc_config.h
drcc/drcc_edittext_file.c
drcc/drcc_edittext_system.c
drcc/drcc_edittext_system.h

index 401aa31..9c99350 100644 (file)
@@ -37,7 +37,7 @@ Comment:
 #ifndef DRD64_HEADER_DRCC_CONFIG
 #define DRD64_HEADER_DRCC_CONFIG
 
-#define DEBUG_TEXTINFO_OUTPUT                                          0x00
+#define DEBUG_TEXTINFO_OUTPUT                                          0x01
        /* Output TextData for Console if this value isn't 0x00 when run test_drcc program.*/
 
 
index b5cef2f..b119bfc 100644 (file)
@@ -143,20 +143,20 @@ int
                                                                                + DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE;
 
                dw_nowpos                               += p_line->dw_linelen;
-               pb_data_now                             += p_line->dw_linelen;
-               p_before                                = p_line;
-               p_line++;
-               pb_tmp_start                    = pb_tmp_now;
+               //pb_data_now                           += p_line->dw_linelen;
+               p_line->p_next                  = NULL;
+               //p_before                              = p_line;
+               //p_line++;
+               //pb_tmp_start                  = pb_tmp_now;
                                
-               p_line->dw_start                = dw_nowpos;
-               p_before->p_next                = p_line;
-               p_line->p_before                = NULL;
+               //p_line->dw_start              = dw_nowpos;
+               //p_before->p_next              = NULL;
        }
        else    {
                p_before->p_next                = NULL;
        }
 
-       p_line->p_next  = NULL;
+       p_tinfo->dw_lastsize            = dw_nowpos;
 
        return i_result;
 }
@@ -269,7 +269,7 @@ int
                
 
        /* Alloc File-Buffer */
-       dw_maxline      = 0;
+       dw_maxline      = 1;
        dw_bufline      = DRD64_DRCC_DEFAULT_CREATETEXTFILE_LINES;
        dw_bufsize      = (DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE
                                        + DRD64_DRCC_DEFAULT_BUFSIZE_RESERVELINE) * dw_bufline;
@@ -278,7 +278,7 @@ int
                                                                                dw_maxline, dw_bufline, dw_bufsize );
        if( 0x00 != i_result )  { return -0x03; }
 
-       /* Generate LineInfo */
+       /* Generate LineInfo (Only First-Line) ---*/
        p_line  = p_tinfo->p_lineinfo;
        p_line->dw_start        = 0;
        p_line->dw_strlen       = 0;
@@ -286,10 +286,16 @@ int
                                + DRD64_DRCC_DEFAULT_BUFSIZE_RESERVELINE;
        p_line->p_before        = NULL;
        p_line->p_next          = NULL;
-
-       p_tinfo->dw_maxline     = 1;
+       
+       p_tinfo->dw_lastsize    = DRD64_DRCC_DEFAULT_RESERVEBUF_INLINE
+                                   + DRD64_DRCC_DEFAULT_BUFSIZE_RESERVELINE;
        p_tinfo->i_fd           = -1;
        
+       /* Collect Empty-LineInfo Chain ---*/
+       p_line++;
+       p_tinfo->p_empty        = p_line;
+       p_line->p_before        = NULL;
+       
        return p_tinfo->i_id;
 }
 
index fe49060..4340a27 100644 (file)
@@ -46,6 +46,7 @@ int
                Byte b_putflag )
 {
        DWord           dw_nowrow;
+       int                     i_cnt;
        Byte            *pb_now;
        Drd64_DrCC_TextInfo             *p_tinfo;
        Drd64_DrCC_LineInfo             *p_before;
@@ -55,6 +56,7 @@ int
        p_tinfo = DrCC_EditText_System_GetTextInfo( i_tinfoid );
        if( NULL == p_tinfo )   { return -0x02; }
        
+       /* 1st: Check TextInfo Strcut Data --- */
        if( 0x00 != b_putflag )         {
                puts("----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
                puts(  "[1] TextInfo Struct Data ");
@@ -62,11 +64,26 @@ int
                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("  Buffer size: %u, Used Last-Byte:%u\n", p_tinfo->dw_bufsize, p_tinfo->dw_lastsize );
                printf("  FileDescriptor: %d, File SubType: %04x\n", p_tinfo->i_fd, p_tinfo->w_subtype );
        }
 
+       /* Check Empty-LineInfo Chain ---*/
+       i_cnt   = 0;
+       p_line  = p_tinfo->p_empty;
+       while( NULL != p_line ) {
+               p_line          = p_line->p_next;
+               i_cnt++;
+       }
+       if( (int)(p_tinfo->dw_bufline - p_tinfo->dw_maxline) != i_cnt ) 
+               { return -0x10; }       
+       if( 0x00 != b_putflag )         {
+               printf("  Remain Empty LineInfo Structs: %3d\n", i_cnt );
+       }
+
+
        if( 0x00 != b_putflag )         {
+               puts("");
                puts("************** ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9");
                puts(  "[2] Text Data ");
        }
@@ -156,8 +173,10 @@ int
                        DWord   dw_bufsize )
 {
        Drd64_DrCC_LineInfo             *p_line;
+       Drd64_DrCC_LineInfo             *p_before;
        Byte    *pb_text;
        Byte    *pb_attr;
+       DWord   dw_cnt;
 
        if( NULL == p_tinfo )   { return -0x01; }
        if(( 0 == dw_bufsize ) || ( 0 == dw_bufline) )  { return -0x02; }
@@ -195,6 +214,15 @@ int
        p_tinfo->dw_maxline             = dw_maxline;
        p_tinfo->dw_bufline             = dw_bufline;
        
+       /* Link Empty-LineInfo Chain --- */
+       p_before                        = (p_tinfo->p_lineinfo + dw_maxline);
+       p_tinfo->p_empty        = p_before;
+       p_line                          = p_before + 1;
+       for( dw_cnt = dw_maxline + 1; dw_cnt < dw_bufline; dw_cnt++ )   {
+               p_before->p_next        = p_line++;
+               p_before++;
+       }
+
        return 0x00;
 }
 
index b078416..9ad7890 100644 (file)
@@ -49,26 +49,30 @@ Comment:
        #define DRCC_EDITTEXT_SYSTEM_INTERNALFUNC
 #endif
 
+
 typedef        struct  {
        DWord   dw_start;               /* Start Bytes of This Line in Text-Buffer */
        DWord   dw_strlen;              /* Length of This LineString */
        DWord   dw_linelen;             /* Line Alloced Bytes */
-       void    *p_before;
-       void    *p_next;
+       void    *p_before;              /* Pointer of the Before LineInfo Struct */
+       void    *p_next;                /* Pointer of the Next LineInfo Struct */
+       void    *p_sortnext;    /* Pointer of the LineLength Sort Next LineInfo Struct */
 } Drd64_DrCC_LineInfo;
 
-
 typedef struct {
        int                                             i_id;                   /* ID of TextInfo Struct */
        int                                             i_fd;
        Word                                    w_subtype;              /* TextFile Sub-Type (.c/.h/Makefile/etc) */
        Byte                                    *pb_text;               /* Buffer of TextData */
        Byte                                    *pb_attr;               /* Attribute Buffer of Text */
-       Drd64_DrCC_LineInfo             *p_lineinfo;    /* LineInfo structs TopPointer */
        DWord                                   dw_bufsize;             /* TextData Buffer Size */
        DWord                                   dw_attrsize;    /* Attribute Buffer Size */
        DWord                                   dw_maxline;             /* Max TextFile Lines */
        DWord                                   dw_bufline;             /* Lines of Alloc LineInfo Strcut */
+       DWord                                   dw_lastsize;    /* Available Buffer Position */
+       Drd64_DrCC_LineInfo             *p_lineinfo;    /* LineInfo structs TopPointer */
+       Drd64_DrCC_LineInfo             *p_empty;               /* Empty LineInfo Structs Chain TopPointer */
+       Drd64_DrCC_LineInfo             *p_sort[128];
 
        char                                    str_pathname[DRD64_MAX_PATH];
        char                                    str_filename[DRD64_MAX_PATH];