   #include "unicode/unistr.h"
   #include "unicode/uchar.h"
 *** misc/icu/source/tools/icupkg/icupkg.cpp	Fri Jul 21 23:17:52 2006
---- misc/build/icu/source/tools/icupkg/icupkg.cpp	Mon Apr 30 17:32:58 2007
+--- misc/build/icu/source/tools/icupkg/icupkg.cpp	Tue Sep 18 19:30:31 2007
 ***************
 *** 332,337 ****
 --- 332,341 ----

  
      if (buffer != stackBuffer) {
          DELETE_ARRAY(buffer);
--- 232,249 ----
      UChar stackBuffer[STACK_BUFFER_SIZE];
      UChar *buffer = stackBuffer;
  
!     result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
  
      if (result == 0) {
          if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0);
  
              buffer = NEW_ARRAY(UChar, newLength);
!             GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, reinterpret_cast<LPWSTR>(buffer), newLength);
          }
      }
  
!     appendTo.append(buffer, (int32_t) u_strlen(buffer));
  
      if (buffer != stackBuffer) {
          DELETE_ARRAY(buffer);
***************
*** 258,275 ****
      UChar stackBuffer[STACK_BUFFER_SIZE];
      UChar *buffer = stackBuffer;
  
!     result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE);
  
      if (result == 0) {
          if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
  
              buffer = NEW_ARRAY(UChar, newLength);
!             GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, newLength);
          }
      }
  
!     appendTo.append(buffer, (int32_t) wcslen(buffer));
  
      if (buffer != stackBuffer) {
          DELETE_ARRAY(buffer);
--- 258,275 ----
      UChar stackBuffer[STACK_BUFFER_SIZE];
      UChar *buffer = stackBuffer;
  
!     result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
  
      if (result == 0) {
          if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
  
              buffer = NEW_ARRAY(UChar, newLength);

      {-1, -1, -1, -1, -1, -1,  3,  2, -1, -1, -1, -1, -1, -1, -1}, //  7 - consonant virama ZWJ, consonant ZWJ virama
      {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  4, -1}, //  8 - independent vowels that can take a virama
***************
*** 629,634 ****
--- 651,670 ----
                  output.writeChar(chars[i], i, tagArray4);
              }
  
+             /* for the special conjuction of Cons+0x0d4d+0x0d31 or Cons+0x0d4d+0x0d30 of Malayalam */
+             if ((baseConsonant - 2 >= 0) &&
+                 (chars[baseConsonant - 1] == 0x0d4d) &&
