OSDN Git Service

* Implement: Support DrDeamon64 Error System for drd64_libedittext_linectrl.c/drd64_l...
[drdeamon64/drdeamon64.git] / libedittext / drd64_libedittext_linectrl.c
index 1f67313..2738fd5 100644 (file)
@@ -37,9 +37,15 @@ Comment:
 #define        DRD64_SRC_LIBEDITTEXT_LINECTRL
 #include"drd64_libedittext.h"
 
+#define        DRD64_SRC_LIBEDITTEXT_LINECTRL_SRCID    0x04
+#define        LOCATION(n)     DRD64_ERR_LOCATION( \
+                                               DRD64_ERROR_MODULE_LIBEDITTEXT, DRD64_ERROR_ARCH_NODEPEND, \
+                                               DRD64_SRC_LIBEDITTEXT_LINECTRL_SRCID, (n))
+
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_LineCtrl_DeleteLine  0x01
 LIBEDITTEXT_LINECTRL_EXTERN
 int
        LibEditText_LineCtrl_DeleteLine(
@@ -55,7 +61,7 @@ int
        assert( NULL != p_tinfo );
        assert( NULL != p_line );
 
-       if( 1 == p_tinfo->dw_maxline )  { return 0x00; }
+       if( 1 == p_tinfo->dw_maxline )  { return 0x00; }
 
        // Check & Remove Section ---
        LibEditText_Section_DeleteLine( p_tinfo, dw_line );
@@ -83,11 +89,25 @@ int
 
        // Remove SortChain ---
        i_result        = LibEditText_LineInfo_RemoveSortChain( p_tinfo, p_line );
-       if( 0x00 != i_result )  { return i_result; }
+       if( 0x00 != i_result )  {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_DeleteLine ),
+                               errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+               return i_result;
+       }
 
        // Add EmptyChain ---
        i_result        = LibEditText_LineInfo_SetEmptyLineChain( p_tinfo, p_line );
-       if( 0x00 != i_result )  { return i_result; }
+       if( 0x00 != i_result )  {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_DeleteLine ),
+                               errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+               return i_result;
+       }
 
        p_tinfo->dw_maxline--;
 
@@ -97,6 +117,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_DeleteLine_toLine    0x02
 LIBEDITTEXT_API_LINECTRL
 int
        LibEditText_DeleteLine_toLine(
@@ -107,9 +128,22 @@ int
        LibEditText_TextInfo    *p_tinfo;
        LibEditText_LineInfo    *p_line;
 
-       if( 0 > i_tinfoid )             { return -0x01; }
+       if( 0 > i_tinfoid )             {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                               LOCATION( FUNCID_LibEditText_DeleteLine_toLine ),
+                               errno, (QWord)i_tinfoid, (QWord)dw_line, __LINE__ ); 
+
+               return -0x01; }
        p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
-       if( NULL == p_tinfo )   { return -0x02; }
+       if( NULL == p_tinfo )   {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_DeleteLine_toLine ),
+                               errno, (QWord)i_tinfoid, (QWord)dw_line, __LINE__ ); 
+
+               return -0x02;
+       }
 
        p_line  = LibEditText_Section_SearchLine( p_tinfo, dw_line );
        assert( NULL != p_line );
@@ -122,6 +156,127 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_LineCtrl_JoinLine    0x03
+LIBEDITTEXT_LINECTRL_EXTERN
+int
+       LibEditText_LineCtrl_JoinLine(
+               LibEditText_TextInfo    *p_tinfo,
+               LibEditText_LineInfo    *p_ldest,
+               DWord   dw_line )
+{
+       int             i_result;
+       Byte    *pb_dest;
+       Byte    *pb_src;
+       LibEditText_LineInfo    *p_lsrc;
+
+       // Check 
+       assert( NULL != p_tinfo );
+       assert( NULL != p_ldest );
+
+       if(( 1 >= p_tinfo->dw_maxline ) && ( 0 == dw_line ))    {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_WARNING( DRD64_ERROR_PTN_FAILED_ARG, 0x00, 0x01 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_JoinLine ),
+                               errno, (QWord)p_tinfo->dw_maxline, (QWord)dw_line, __LINE__ ); 
+
+               return 0x01;
+       }
+       if( p_tinfo->dw_line_end == p_ldest->dw_id )    {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_WARNING( DRD64_ERROR_PTN_FAILED_ARG, 0x00, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_JoinLine ),
+                               errno, (QWord)p_tinfo->dw_line_end, (QWord)p_ldest->dw_id, __LINE__ ); 
+
+               return 0x02;
+       }
+
+       p_lsrc  = LINFO(p_tinfo, p_ldest->dw_next);
+       assert( NULL != p_lsrc );
+
+       // Merge Memory data
+       if((p_ldest->dw_strlen + p_lsrc->dw_strlen + 5) > p_ldest->dw_linelen )         {
+               i_result        = LibEditText_LineInfo_ExpandLineBuffer(
+                                                               p_tinfo, p_ldest, p_lsrc->dw_linelen );
+               if( 0x00 != i_result )  {
+                       LibBrownie_Error_SetErrorInfo(
+                                       DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
+                                       LOCATION( FUNCID_LibEditText_LineCtrl_JoinLine ),
+                                       errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+                       return -0x03;
+               }
+       }
+
+       pb_src  = p_tinfo->pb_text + p_lsrc->dw_start;
+       pb_dest = p_tinfo->pb_text + p_ldest->dw_start + p_ldest->dw_strlen;
+       if( '\n' == *(pb_dest - 1) )    {
+               p_ldest->dw_strlen--;
+               pb_dest--;
+       }
+
+       memcpy( pb_dest, pb_src, p_lsrc->dw_strlen );
+       *(pb_dest + p_lsrc->dw_strlen) = '\0';
+
+       p_ldest->dw_strlen      += p_lsrc->dw_strlen;
+
+       // delete line
+       i_result        = LibEditText_LineCtrl_DeleteLine( p_tinfo, p_lsrc, dw_line + 1 );
+       if( 0x00 != i_result )  {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_JoinLine ),
+                               errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+               return -0x04;
+       }
+       
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_JoinLine_toLine      0x04
+LIBEDITTEXT_API_LINECTRL
+int
+       LibEditText_JoinLine_toLine(
+               int             i_tinfoid,
+               DWord   dw_line )
+{
+       int                                             i_result;
+       LibEditText_TextInfo    *p_tinfo;
+       LibEditText_LineInfo    *p_line;
+       
+       if( 0 > i_tinfoid )             {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                               LOCATION( FUNCID_LibEditText_JoinLine_toLine ),
+                               errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
+
+               return -0x01;
+       }
+       p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
+       if( NULL == p_tinfo )   {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_JoinLine_toLine ),
+                               errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
+
+               return -0x02;
+       }
+
+       p_line  = LibEditText_Section_SearchLine( p_tinfo, dw_line );
+       assert( NULL != p_line );
+       
+       i_result        = LibEditText_LineCtrl_JoinLine( p_tinfo, p_line, dw_line );
+
+       return i_result;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_LineCtrl_InsertLine  0x05
 LIBEDITTEXT_LINECTRL_EXTERN
 int
        LibEditText_LineCtrl_InsertLine(
@@ -139,12 +294,7 @@ int
        
        assert( NULL != p_tinfo );
 
-       p_lnext = LibEditText_Section_SearchLine( p_tinfo, dw_line );
-       assert( NULL != p_lnext );
-
        // PreProccess
-       p_lbefore       = LINFO(p_tinfo, p_lnext->dw_before);
-       
        dw_strlen       = dw_length;
        if(( 0 == dw_length ) || ( '\n' != *(pb_text + dw_length - 1) ))
                { dw_strlen++; }
@@ -152,7 +302,19 @@ int
        // Get LineInfo struct
        dw_buflength    = dw_strlen + DRD64_LIBEDITTEXT_DEFAULT_RESERVEBUF_INLINE;
        p_line  = LibEditText_LineInfo_GetEmptyLineInfo( p_tinfo, dw_buflength );
-       if( NULL == p_line )    { return -0x11; }
+       if( NULL == p_line )    {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x11 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_InsertLine ),
+                               errno, (QWord)dw_buflength, (QWord)0x00, __LINE__ ); 
+
+               return -0x11;
+       }
+
+       p_lnext = LibEditText_Section_SearchLine( p_tinfo, dw_line );
+       assert( NULL != p_lnext );
+
+       p_lbefore       = LINFO(p_tinfo, p_lnext->dw_before);
        
        // Link Before & After LineInfo
        if( NULL != p_lbefore )         {
@@ -167,7 +329,14 @@ int
 
        // Set LineInfo to SortChain
        i_result    = LibEditText_LineInfo_AddSortChain( p_tinfo, p_line );
-       if( 0x00 != i_result )  { return -0x12; }
+       if( 0x00 != i_result )  {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x12 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_InsertLine ),
+                               errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+               return -0x12;
+       }
 
        // Set Init. TextData
        p_line->dw_strlen       = dw_strlen;
@@ -177,7 +346,14 @@ int
 
        // Adjust LineSection
        i_result        = LibEditText_Section_InsertLine( p_tinfo, dw_line );
-       if( 0x00 != i_result )  { return -0x13; }
+       if( 0x00 != i_result )  {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x13 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_InsertLine ),
+                               errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+               return -0x13;
+       }
 
        p_tinfo->dw_maxline++;
 
@@ -187,6 +363,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_InsertLine_toLine    0x06
 LIBEDITTEXT_API_LINECTRL
 int
        LibEditText_InsertLine_toLine(
@@ -198,11 +375,32 @@ int
        int                                             i_result;
        LibEditText_TextInfo    *p_tinfo;
 
-       if( 0 > i_tinfoid )             { return -0x01; }
+       if( NULL == pstr_text ) {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x03 ),
+                               LOCATION( FUNCID_LibEditText_InsertLine_toLine ),
+                               errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
+
+               return -0x01;
+       }
+
+       if( 0 > i_tinfoid )             {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_InsertLine_toLine ),
+                               errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
+
+               return -0x02;
+       }
        p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
-       if( NULL == p_tinfo )   { return -0x02; }
+       if( NULL == p_tinfo )   {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x03 ),
+                               LOCATION( FUNCID_LibEditText_InsertLine_toLine ),
+                               errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
 
-       if( NULL == pstr_text ) { return -0x03; }
+               return -0x03;
+       }
 
        if( p_tinfo->dw_maxline < (dw_line + 1) )       {
                i_result        = LibEditText_LineCtrl_AppendLine(
@@ -219,6 +417,7 @@ int
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_LineCtrl_AppendLine  0x07
 LIBEDITTEXT_LINECTRL_EXTERN
 int
        LibEditText_LineCtrl_AppendLine(
@@ -253,7 +452,14 @@ goto_LibEditText_LineCtrl_AppendLine_prechecked:
 
        dw_buflength    = dw_length + DRD64_LIBEDITTEXT_DEFAULT_RESERVEBUF_INLINE;
        p_line  = LibEditText_LineInfo_GetEmptyLineInfo( p_tinfo, dw_buflength );
-       if( NULL == p_line )    { return -0x11; }
+       if( NULL == p_line )    {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x11 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_AppendLine ),
+                               errno, (QWord)dw_buflength, (QWord)0x00, __LINE__ ); 
+
+               return -0x11;
+       }
 
        /* ReSet p_before for if expand LineInfo memory in GetEmptyLineInfo() func.. */
        p_before        = LINFO(p_tinfo, p_tinfo->dw_line_end);
@@ -269,6 +475,11 @@ goto_LibEditText_LineCtrl_AppendLine_prechecked:
 
        i_result    = LibEditText_LineInfo_AddSortChain( p_tinfo, p_line );
        if( 0x00 != i_result )  {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x12 ),
+                               LOCATION( FUNCID_LibEditText_LineCtrl_AppendLine ),
+                               errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
                return -0x12;
        }
 
@@ -279,8 +490,16 @@ goto_LibEditText_LineCtrl_AppendLine_prechecked:
        /* Normal Append Mode is b_mode=0x00. */
        if( 0x00 == b_mode )    {
                i_result        = LibEditText_Section_AddSection( p_tinfo );
-               if( 0x00 > i_result )           { return i_result; }
+               if( 0x00 > i_result )           {
+                       LibBrownie_Error_SetErrorInfo(
+                                       DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x20 ),
+                                       LOCATION( FUNCID_LibEditText_LineCtrl_AppendLine ),
+                                       errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
+
+                       return i_result;
+               }
                else if( 0x00 < i_result )      { i_result      = 0x00; }
+
                p_tinfo->dw_maxline++;
        }
 
@@ -290,6 +509,7 @@ goto_LibEditText_LineCtrl_AppendLine_prechecked:
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+#define        FUNCID_LibEditText_AppendLine   0x08
 LIBEDITTEXT_API_LINECTRL
 int
        LibEditText_AppendLine(
@@ -300,12 +520,33 @@ int
        int                                             i_result;
        LibEditText_TextInfo    *p_tinfo;
 
-       if( 0 > i_tinfoid )             { return -0x01; }
-       p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
-       if( NULL == p_tinfo )   { return -0x02; }
+       if( NULL == pstr_text ) {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
+                               LOCATION( FUNCID_LibEditText_AppendLine ),
+                               errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
 
-       if( NULL == pstr_text ) { return -0x03; }
+               return -0x01;
+       }
        
+       if( 0 > i_tinfoid )             {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
+                               LOCATION( FUNCID_LibEditText_AppendLine ),
+                               errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
+
+               return -0x02;
+       }
+       p_tinfo = LibEditText_System_GetTextInfo( i_tinfoid );
+       if( NULL == p_tinfo )   {
+               LibBrownie_Error_SetErrorInfo(
+                               DRD64_ERROR( DRD64_ERROR_PTN_NULLPTR, 0x01, 0x03 ),
+                               LOCATION( FUNCID_LibEditText_AppendLine ),
+                               errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
+
+               return -0x03;
+       }
+
        i_result        = LibEditText_LineCtrl_AppendLine( p_tinfo, (Byte *)pstr_text, dw_length, 0x00 );
        
        return i_result;