calendarui/commonutils/src/KoreanCalConv.cpp
branchRCL_3
changeset 31 97232defd20e
equal deleted inserted replaced
30:bd7edf625bdd 31:97232defd20e
       
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation of View Utils
       
    15 *
       
    16 */
       
    17 
       
    18 #include "KoreanCalConv.h"
       
    19 
       
    20 //debug
       
    21 #include "calendarui_debug.h"
       
    22 
       
    23 /* Leap month exceptions for fixing conversion result
       
    24    to match Korean lunar calendar:
       
    25 
       
    26   year cycle, year, Chinese leap month, Korean leap month
       
    27 */
       
    28 typedef struct
       
    29 {
       
    30     TInt cycle;
       
    31     TInt year;
       
    32     TInt chineseLeapMonth;
       
    33     TInt koreanLeapMonth;
       
    34 } TLeapExceptions;
       
    35 
       
    36 //CONSTANTS
       
    37 const TLeapExceptions KLeapExceptions[] = { {78, 29,  4,  3},
       
    38                                             {78, 34,  6,  5},
       
    39                                             {79, 56,  2,  3} };
       
    40 
       
    41 const TInt KLeapExceptionCnt = (sizeof( KLeapExceptions ) / sizeof( TLeapExceptions ));
       
    42 
       
    43 /* Month length exceptions for fixing conversion result
       
    44    to match Korean lunar calendar. Corresponding months
       
    45    have 30 days in Korean lunar calendar and 29 days
       
    46    in Chinese lunar calendar. The next month always contains
       
    47    30 days in Chinese lunar calendar and 29 days in Korean
       
    48    lunar calendar:
       
    49 
       
    50   year cycle, year, korean month, flag indicating leap month, flag indicating next month is leap
       
    51 */
       
    52 typedef struct
       
    53 {
       
    54     TInt cycle;
       
    55     TInt year;
       
    56     TInt koreanMonth;
       
    57     TBool isLeapMonth;
       
    58     TBool nextIsLeapMonth;
       
    59 } TMonthExceptions;
       
    60 
       
    61 const TMonthExceptions KMonthExceptions[] = { {76, 43,  3, EFalse, EFalse },
       
    62                                               {76, 51,  5, EFalse, ETrue },
       
    63                                               {76, 51,  9, EFalse, EFalse },
       
    64                                               {76, 52, 12, EFalse, EFalse },
       
    65                                               {76, 55, 10, EFalse, EFalse },
       
    66                                               {76, 56,  7, EFalse, ETrue },
       
    67                                               {76, 56,  9, EFalse, EFalse },
       
    68                                               {76, 57,  9, EFalse, EFalse },
       
    69                                               {76, 60,  9, EFalse, EFalse },
       
    70                                               {77,  1,  1, EFalse, EFalse },
       
    71                                               {77,  2,  4, EFalse, ETrue },
       
    72                                               {77,  4,  9, EFalse, EFalse },
       
    73                                               {77,  5,  8, EFalse, EFalse },
       
    74                                               {77,  8,  3, EFalse, EFalse },
       
    75                                               {77, 11,  8, EFalse, EFalse },
       
    76                                               {77, 13,  5, EFalse, EFalse },
       
    77                                               {77, 19,  7, EFalse, EFalse },
       
    78                                               {77, 19,  9, EFalse, EFalse },
       
    79                                               {77, 20, 10, EFalse, EFalse },
       
    80                                               {77, 20, 12, EFalse, EFalse },
       
    81                                               {77, 26,  2, EFalse, EFalse },
       
    82                                               {77, 27,  1, EFalse, EFalse },
       
    83                                               {77, 27,  4, EFalse, EFalse },
       
    84                                               {77, 29,  6, EFalse, EFalse },
       
    85                                               {77, 30, 12, EFalse, EFalse },
       
    86                                               {77, 32,  1, EFalse, EFalse },
       
    87                                               {77, 34, 12, EFalse, EFalse },
       
    88                                               {77, 45,  3, EFalse, EFalse },
       
    89                                               {77, 47,  5, EFalse, EFalse },
       
    90                                               {77, 49, 11, EFalse, EFalse },
       
    91                                               {77, 50, 11, EFalse, EFalse },
       
    92                                               {77, 53,  9, EFalse, EFalse },
       
    93                                               {77, 55,  2, EFalse, EFalse },
       
    94                                               {77, 59,  9, EFalse, EFalse },
       
    95                                               {78,  4,  4, EFalse, EFalse },
       
    96                                               {78,  4, 12, EFalse, EFalse },
       
    97                                               {78,  6,  9, EFalse, EFalse },
       
    98                                               {78, 12,  6, EFalse, EFalse },
       
    99                                               {78, 12,  9, EFalse, EFalse },
       
   100                                               {78, 13, 12, EFalse, EFalse },
       
   101                                               {78, 15, 11, EFalse, EFalse },
       
   102                                               {78, 18,  3, EFalse, EFalse },
       
   103                                               {78, 22, 10, EFalse, EFalse },
       
   104                                               {78, 29,  4, EFalse, EFalse },
       
   105                                               {78, 29,  6, EFalse, EFalse },
       
   106                                               {78, 30,  4, EFalse, EFalse },
       
   107                                               {78, 36, 10, EFalse, EFalse },
       
   108                                               {78, 37,  1, EFalse, EFalse },
       
   109                                               {78, 40,  3, EFalse, EFalse },
       
   110                                               {78, 43,  8, EFalse, EFalse },
       
   111                                               {78, 43, 12, EFalse, EFalse },
       
   112                                               {78, 44, 12, EFalse, EFalse },
       
   113                                               {78, 46,  5, EFalse, EFalse },
       
   114                                               {78, 48,  1, EFalse, EFalse },
       
   115                                               {78, 52, 11, EFalse, EFalse },
       
   116                                               {78, 53, 10, EFalse, EFalse },
       
   117                                               {78, 57,  7, EFalse, EFalse },
       
   118                                               {78, 58,  1, EFalse, EFalse },
       
   119                                               {78, 59, 10, EFalse, EFalse },
       
   120                                               {79,  3,  4, EFalse, EFalse },
       
   121                                               {79,  5, 10, EFalse, EFalse },
       
   122                                               {79,  7,  1, EFalse, EFalse },
       
   123                                               {79,  8,  6, EFalse, EFalse },
       
   124                                               {79,  8,  9, EFalse, EFalse },
       
   125                                               {79,  9,  8, ETrue, EFalse },
       
   126                                               {79, 15,  5, EFalse, EFalse },
       
   127                                               {79, 16,  8, EFalse, EFalse },
       
   128                                               {79, 17,  8, EFalse, EFalse },
       
   129                                               {79, 17, 12, EFalse, EFalse },
       
   130                                               {79, 20,  3, EFalse, EFalse },
       
   131                                               {79, 25,  5, EFalse, EFalse },
       
   132                                               {79, 26,  1, EFalse, EFalse },
       
   133                                               {79, 27,  1, EFalse, EFalse },
       
   134                                               {79, 28,  2, EFalse, EFalse },
       
   135                                               {79, 31,  6, ETrue, EFalse },
       
   136                                               {79, 37,  9, EFalse, EFalse },
       
   137                                               {79, 38,  1, EFalse, EFalse },
       
   138                                               {79, 39,  6, EFalse, EFalse },
       
   139                                               {79, 45, 12, EFalse, EFalse },
       
   140                                               {79, 46,  7, EFalse, EFalse },
       
   141                                               {79, 51,  1, EFalse, EFalse },
       
   142                                               {79, 53,  7, EFalse, EFalse },
       
   143                                               {79, 54,  6, EFalse, EFalse },
       
   144                                               {79, 55,  7, EFalse, EFalse },
       
   145                                               {79, 55, 11, EFalse, EFalse },
       
   146                                               {79, 56,  3, EFalse, ETrue } };
       
   147 
       
   148 const TInt KMonthExceptionCnt = (sizeof( KMonthExceptions ) / sizeof( TMonthExceptions ));
       
   149 
       
   150 // -----------------------------------------------------------------------------
       
   151 // CKoreanCalConv::NewL
       
   152 // ?implementation_description
       
   153 // (other items were commented in a header).
       
   154 // -----------------------------------------------------------------------------
       
   155 //
       
   156 EXPORT_C CKoreanCalConv* CKoreanCalConv::NewL()
       
   157     {
       
   158     TRACE_ENTRY_POINT;
       
   159     CKoreanCalConv* self = CKoreanCalConv::NewLC();
       
   160     CleanupStack::Pop( self );
       
   161 
       
   162     TRACE_EXIT_POINT;
       
   163     return self;
       
   164     }
       
   165 
       
   166 // -----------------------------------------------------------------------------
       
   167 // CKoreanCalConv::NewLC
       
   168 // ?implementation_description
       
   169 // (other items were commented in a header).
       
   170 // -----------------------------------------------------------------------------
       
   171 //
       
   172 EXPORT_C CKoreanCalConv* CKoreanCalConv::NewLC()
       
   173     {
       
   174     TRACE_ENTRY_POINT;
       
   175     CKoreanCalConv* self = new (ELeave) CKoreanCalConv();
       
   176     CleanupStack::PushL( self );
       
   177     self->ConstructL();
       
   178     
       
   179     TRACE_EXIT_POINT;
       
   180     return self;
       
   181     }
       
   182 
       
   183 // -----------------------------------------------------------------------------
       
   184 // CKoreanCalConv::CKoreanCalConv
       
   185 // ?implementation_description
       
   186 // (other items were commented in a header).
       
   187 // -----------------------------------------------------------------------------
       
   188 //
       
   189 CKoreanCalConv::CKoreanCalConv()
       
   190     {
       
   191     TRACE_ENTRY_POINT;
       
   192     TRACE_EXIT_POINT;
       
   193     }
       
   194 
       
   195 // -----------------------------------------------------------------------------
       
   196 // CKoreanCalConv::ConstructL
       
   197 // ?implementation_description
       
   198 // (other items were commented in a header).
       
   199 // -----------------------------------------------------------------------------
       
   200 //
       
   201 void CKoreanCalConv::ConstructL()
       
   202     {
       
   203     TRACE_ENTRY_POINT;
       
   204     chineseConv = CChineseCalendarConverter::NewL();
       
   205     TRACE_EXIT_POINT;
       
   206     }
       
   207 
       
   208 // -----------------------------------------------------------------------------
       
   209 // CKoreanCalConv::~CKoreanCalConv
       
   210 // ?implementation_description
       
   211 // (other items were commented in a header).
       
   212 // -----------------------------------------------------------------------------
       
   213 //
       
   214 CKoreanCalConv::~CKoreanCalConv()
       
   215     {
       
   216     TRACE_ENTRY_POINT;
       
   217     delete chineseConv;
       
   218     TRACE_EXIT_POINT;
       
   219     }
       
   220 
       
   221 
       
   222 // -----------------------------------------------------------------------------
       
   223 // CKoreanCalConv::DateTimeToKoreanL
       
   224 // ?implementation_description
       
   225 // (other items were commented in a header).
       
   226 // -----------------------------------------------------------------------------
       
   227 //
       
   228 EXPORT_C void CKoreanCalConv::DateTimeToKoreanL( const TDateTime& aDateTime, TKoreanDate& aKoreanDate )
       
   229     {
       
   230     TRACE_ENTRY_POINT;
       
   231     TInt i;
       
   232     
       
   233     /* Use the chinese converter for initial result */
       
   234     chineseConv->DateTimeToChineseL( aDateTime, aKoreanDate );
       
   235     
       
   236     /* Check if leap month fix is needed */
       
   237     for( i = 0 ; i < KLeapExceptionCnt ; i++ )
       
   238         {
       
   239         if( KLeapExceptions[i].cycle == aKoreanDate.iCycle &&
       
   240         KLeapExceptions[i].year == aKoreanDate.iYear )
       
   241             { /* Year contains an exception */
       
   242             if( KLeapExceptions[i].koreanLeapMonth < KLeapExceptions[i].chineseLeapMonth )
       
   243                 {
       
   244                 if( aKoreanDate.iLeapMonth )
       
   245                     { /* Resulted month is leap month in Chinese but not in Korean,
       
   246                     fix by unsetting the leap month flag */
       
   247                     aKoreanDate.iLeapMonth = EFalse;
       
   248                     }
       
   249                 else
       
   250                     {
       
   251                     if( aKoreanDate.iMonth == (KLeapExceptions[i].koreanLeapMonth + 1) )
       
   252                         { /* Resulted month is actually a leap month on Korean Calendar,
       
   253                         fix by setting the leap month flag and decreasing month by one */
       
   254                         aKoreanDate.iLeapMonth = ETrue;
       
   255                         aKoreanDate.iMonth -= 1;
       
   256                         }
       
   257                     
       
   258                     /* See if month needs an offset fix */
       
   259                     if( aKoreanDate.iMonth > KLeapExceptions[i].koreanLeapMonth &&
       
   260                                     aKoreanDate.iMonth <= KLeapExceptions[i].chineseLeapMonth )
       
   261                         { /* Between the leap months, fix by decreasing the month by one */
       
   262                         aKoreanDate.iMonth -= 1;
       
   263                         }
       
   264                     }
       
   265                 }
       
   266             else if( KLeapExceptions[i].koreanLeapMonth > KLeapExceptions[i].chineseLeapMonth )
       
   267                 {
       
   268                 if( aKoreanDate.iLeapMonth )
       
   269                     { /* Resulted month is leap month in Chinese but not in Korean,
       
   270                     fix by unsetting the leap month flag and increase the month by one */
       
   271                     aKoreanDate.iLeapMonth = EFalse;
       
   272                     aKoreanDate.iMonth += 1;
       
   273                     }
       
   274                 else
       
   275                     {
       
   276                     if( aKoreanDate.iMonth == KLeapExceptions[i].koreanLeapMonth )
       
   277                         { /* Resulted month is actually a leap month on Korean Calendar,
       
   278                         fix by setting the leap month flag */
       
   279                         aKoreanDate.iLeapMonth = ETrue;
       
   280                         }
       
   281                     
       
   282                     /* See if month needs an offset fix */
       
   283                     if( aKoreanDate.iMonth > KLeapExceptions[i].chineseLeapMonth &&
       
   284                                 aKoreanDate.iMonth < KLeapExceptions[i].koreanLeapMonth )
       
   285                         { /* Between the leap months, fix by increasing the month by one */
       
   286                         aKoreanDate.iMonth += 1;
       
   287                         }
       
   288                     }
       
   289                 }
       
   290             break;
       
   291             }
       
   292         }
       
   293     
       
   294     /* Check if month length fix is needed */
       
   295     for( i = 0 ; i < KMonthExceptionCnt ; i++ )
       
   296         {
       
   297         if( (KMonthExceptions[i].cycle == aKoreanDate.iCycle &&
       
   298                     KMonthExceptions[i].year == aKoreanDate.iYear &&
       
   299                     KMonthExceptions[i].koreanMonth != 12 &&
       
   300                     aKoreanDate.iMonth != 1) ||
       
   301                     (KMonthExceptions[i].koreanMonth == 12 && aKoreanDate.iMonth == 1 &&
       
   302                     (KMonthExceptions[i].year == (aKoreanDate.iYear - 1) &&
       
   303                     KMonthExceptions[i].cycle == aKoreanDate.iCycle) ||
       
   304                     (KMonthExceptions[i].year == 60 && aKoreanDate.iYear == 1 && 
       
   305                     KMonthExceptions[i].cycle == (aKoreanDate.iCycle - 1))) )
       
   306             { /* Year may contain an exception */
       
   307             if( (KMonthExceptions[i].koreanMonth == (aKoreanDate.iMonth - 1) && 
       
   308                         !(KMonthExceptions[i].nextIsLeapMonth || aKoreanDate.iLeapMonth)) ||
       
   309                         (KMonthExceptions[i].koreanMonth == 12 && aKoreanDate.iMonth == 1) ||
       
   310                         (KMonthExceptions[i].koreanMonth == aKoreanDate.iMonth &&
       
   311                         KMonthExceptions[i].nextIsLeapMonth && aKoreanDate.iLeapMonth) )
       
   312                 { /* Month contains an exception, decrease the day by one */
       
   313                 if( aKoreanDate.iDay == 1 )
       
   314                     {
       
   315                     aKoreanDate.iDay = 30;
       
   316                     if( aKoreanDate.iMonth == 1 )
       
   317                         {
       
   318                         aKoreanDate.iMonth = 12;
       
   319                         if( aKoreanDate.iYear == 1 )
       
   320                             {
       
   321                             aKoreanDate.iYear = 60;
       
   322                             aKoreanDate.iCycle -= 1;
       
   323                             }
       
   324                         else
       
   325                             {
       
   326                             aKoreanDate.iYear -= 1;
       
   327                             }
       
   328                         }
       
   329                     else
       
   330                         {
       
   331                         if( !aKoreanDate.iLeapMonth )
       
   332                             { /* Leap months don't need month decreasing */
       
   333                             aKoreanDate.iMonth -= 1;
       
   334                             }
       
   335                         if( KMonthExceptions[i].isLeapMonth )
       
   336                             {
       
   337                             aKoreanDate.iLeapMonth = ETrue;
       
   338                             }
       
   339                         else
       
   340                             {
       
   341                             aKoreanDate.iLeapMonth = EFalse;
       
   342                             }
       
   343                         }
       
   344                     }
       
   345                 else
       
   346                     {
       
   347                     aKoreanDate.iDay -= 1;
       
   348                     }
       
   349                 break;
       
   350                 }
       
   351             }
       
   352         }
       
   353     TRACE_EXIT_POINT;
       
   354     }
       
   355 
       
   356 // -----------------------------------------------------------------------------
       
   357 // CKoreanCalConv::KoreanToDateTimeL
       
   358 // ?implementation_description
       
   359 // (other items were commented in a header).
       
   360 // -----------------------------------------------------------------------------
       
   361 //
       
   362 EXPORT_C void CKoreanCalConv::KoreanToDateTimeL( TKoreanDate& aKoreanDate, TDateTime& aDateTime )
       
   363     {
       
   364     TRACE_ENTRY_POINT;
       
   365     TInt i;
       
   366     TKoreanDate fixDate = aKoreanDate;
       
   367     
       
   368     /* Check if month length fix is needed */
       
   369     for( i = 0 ; i < KMonthExceptionCnt ; i++ )
       
   370         {
       
   371         if( (KMonthExceptions[i].cycle == fixDate.iCycle &&
       
   372                 KMonthExceptions[i].year == fixDate.iYear &&
       
   373                 fixDate.iMonth != 1) ||
       
   374                 (fixDate.iMonth == 1 &&
       
   375                 (KMonthExceptions[i].year == (fixDate.iYear - 1) &&
       
   376                 KMonthExceptions[i].cycle == fixDate.iCycle) ||
       
   377                 (KMonthExceptions[i].year == 60 && fixDate.iYear == 1 && 
       
   378                 KMonthExceptions[i].cycle == (fixDate.iCycle - 1))) )
       
   379             { /* Year may contain an exception */
       
   380             if( (KMonthExceptions[i].koreanMonth == fixDate.iMonth &&
       
   381             KMonthExceptions[i].isLeapMonth == fixDate.iLeapMonth) )
       
   382                 { /* Month contains an exception */
       
   383                 if( fixDate.iDay == 30 )
       
   384                     { /* Fix the last day to be the first day of next month */
       
   385                     fixDate.iDay = 1;
       
   386                     if( fixDate.iMonth == 12 )
       
   387                         {
       
   388                         fixDate.iMonth = 1;
       
   389                         if( fixDate.iYear == 60 )
       
   390                             {
       
   391                             fixDate.iYear = 1;
       
   392                             fixDate.iCycle += 1;
       
   393                             }
       
   394                         else
       
   395                             {
       
   396                             fixDate.iYear += 1;
       
   397                             }
       
   398                         }
       
   399                     else
       
   400                         {
       
   401                         if( KMonthExceptions[i].nextIsLeapMonth )
       
   402                             { /* Leap months don't need increasing,
       
   403                             just set the flag */
       
   404                             fixDate.iLeapMonth = ETrue;
       
   405                             }
       
   406                         else
       
   407                             {
       
   408                             fixDate.iLeapMonth = EFalse;
       
   409                             fixDate.iMonth += 1;
       
   410                             }
       
   411                         }
       
   412                     }
       
   413                 break;
       
   414                 }
       
   415             else if( (KMonthExceptions[i].koreanMonth == (fixDate.iMonth - 1) && 
       
   416                     !(KMonthExceptions[i].nextIsLeapMonth || fixDate.iLeapMonth)) ||
       
   417                     (KMonthExceptions[i].koreanMonth == 12 && fixDate.iMonth == 1) ||
       
   418                     (KMonthExceptions[i].koreanMonth == fixDate.iMonth &&
       
   419                     KMonthExceptions[i].nextIsLeapMonth && fixDate.iLeapMonth) )
       
   420                 { /* It is the month following the exception, increase the day by one */
       
   421                 if( fixDate.iDay == 30 )
       
   422                     { /* Invalid day, Korean Lunar calendar has always only 29 days
       
   423                     after the exception month */
       
   424                     User::Leave( KErrArgument );
       
   425                     }
       
   426                 else
       
   427                     {
       
   428                     fixDate.iDay += 1;
       
   429                     }
       
   430                 break;
       
   431                 }
       
   432             }
       
   433         }
       
   434     
       
   435     /* Check if leap month fix is needed */
       
   436     for( i = 0 ; i < KLeapExceptionCnt ; i++ )
       
   437         {
       
   438         if( KLeapExceptions[i].cycle == fixDate.iCycle &&
       
   439                     KLeapExceptions[i].year == fixDate.iYear )
       
   440             { /* Year contains an exception */
       
   441             if( KLeapExceptions[i].koreanLeapMonth != fixDate.iMonth &&
       
   442             fixDate.iLeapMonth )
       
   443                 { /* This year does not have the requested leap month in 
       
   444                 Korean lunar calendar, leave with error */
       
   445                 User::Leave( KErrArgument );
       
   446                 }
       
   447             
       
   448             if( fixDate.iMonth == KLeapExceptions[i].koreanLeapMonth &&
       
   449             fixDate.iLeapMonth )
       
   450                 { /* Leap month in Korean lunar calendar, but not in Chinese
       
   451                 lunar calendar, fix by clearing the leap indicator*/
       
   452                 fixDate.iLeapMonth = EFalse;
       
   453                 if( KLeapExceptions[i].koreanLeapMonth < KLeapExceptions[i].chineseLeapMonth )
       
   454                 { /* Also month needs to be increased */
       
   455                 fixDate.iMonth += 1;
       
   456                 }
       
   457                 }
       
   458             else if( fixDate.iMonth > KLeapExceptions[i].koreanLeapMonth &&
       
   459             fixDate.iMonth < KLeapExceptions[i].chineseLeapMonth )
       
   460                 { /* Month between the leap month */
       
   461                 if( KLeapExceptions[i].koreanLeapMonth < KLeapExceptions[i].chineseLeapMonth )
       
   462                     {
       
   463                     fixDate.iMonth += 1;
       
   464                     }
       
   465                 else
       
   466                     {
       
   467                     fixDate.iMonth -= 1;
       
   468                     }
       
   469                 }
       
   470             else if( fixDate.iMonth == (KLeapExceptions[i].chineseLeapMonth + 1) &&
       
   471                             !fixDate.iLeapMonth )
       
   472                 { /* Leap month in Chinese lunar calendar, fix by decreasing
       
   473                 the monrth by one and setting the leap indicator */
       
   474                 fixDate.iMonth -= 1;
       
   475                 fixDate.iLeapMonth = ETrue;
       
   476                 }
       
   477             chineseConv->ChineseToDateTimeL( fixDate, aDateTime );
       
   478             
       
   479             TRACE_EXIT_POINT;
       
   480             return;
       
   481             }
       
   482         }
       
   483     /* Use the chinese converter for result */
       
   484     chineseConv->ChineseToDateTimeL( fixDate, aDateTime );
       
   485     TRACE_EXIT_POINT;
       
   486     }
       
   487 
       
   488 // -----------------------------------------------------------------------------
       
   489 // CKoreanCalConv::DateRange
       
   490 // ?implementation_description
       
   491 // (other items were commented in a header).
       
   492 // -----------------------------------------------------------------------------
       
   493 //
       
   494 EXPORT_C void CKoreanCalConv::DateRange( TDateTime& aLower, TDateTime& aUpper )
       
   495     {
       
   496     TRACE_ENTRY_POINT;
       
   497     aLower.SetYear( 1900 );
       
   498     aLower.SetMonth( EJanuary );
       
   499     aLower.SetDay( 1 );
       
   500     aUpper.SetYear( 2099 );
       
   501     aUpper.SetMonth( EDecember );
       
   502     aUpper.SetDay( 31 );
       
   503     TRACE_EXIT_POINT;
       
   504     }
       
   505 
       
   506 // -----------------------------------------------------------------------------
       
   507 // CKoreanCalConv::DateRange
       
   508 // ?implementation_description
       
   509 // (other items were commented in a header).
       
   510 // -----------------------------------------------------------------------------
       
   511 //
       
   512 EXPORT_C void CKoreanCalConv::DateRange( TKoreanDate& aLower, TKoreanDate& aUpper )
       
   513     {
       
   514     TRACE_ENTRY_POINT;
       
   515     aLower.iCycle = 76;
       
   516     aLower.iYear = 36;
       
   517     aLower.iMonth = 12;
       
   518     aLower.iDay = 1;
       
   519     aLower.iLeapMonth = EFalse;
       
   520     aUpper.iCycle = 79;
       
   521     aUpper.iYear = 56;
       
   522     aUpper.iMonth = 11;
       
   523     aUpper.iDay = 20;
       
   524     aUpper.iLeapMonth = EFalse;
       
   525     TRACE_EXIT_POINT;
       
   526     }
       
   527 
       
   528 // End of file