Subversion Repositories Kolibri OS

Rev

Rev 9304 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. //convert text characters
  2. #ifndef INCLUDE_LIBICONV_H
  3. #define INCLUDE_LIBICONV_H
  4.  
  5. #ifndef INCLUDE_KOLIBRI_H
  6. #include "../lib/kolibri.h"
  7. #endif
  8.  
  9. #ifndef INCLUDE_ENCODING_H
  10. #include "../lib/encoding.h"
  11. #endif
  12.  
  13. dword iconv_lib = #a_iconv_lib;
  14. char a_iconv_lib[]="/sys/lib/iconv.obj";
  15.  
  16. dword iconv_open     = #aIconv_open;
  17. dword iconv          = #aIconv;
  18. $DD 2 dup 0
  19.  
  20. char aIconv_open[] = "iconv_open";
  21. char aIconv[]       = "iconv";
  22.  
  23. char charsets[] = "UTF-8\0    KOI8-RU\0  CP1251\0   CP1252\0   ISO8859-5\0CP866\0    AUTO";
  24. enum { CH_UTF8, CH_KOI8, CH_CP1251, CH_CP1252, CH_ISO8859_5, CH_CP866, CH_AUTO };
  25.  
  26. dword ChangeCharset(dword from_chs, to_chs, conv_buf)
  27. {
  28.         dword cd, in_len, out_len, new_buf;    
  29.  
  30.         iconv_open stdcall (from_chs*10+#charsets, to_chs*10+#charsets);
  31.         if (EAX==-1) {
  32.                 debugln("iconv: unsupported charset");
  33.                 return 0;
  34.         }
  35.         cd = EAX;
  36.  
  37.         in_len = strlen(conv_buf)+1;
  38.         out_len = in_len * 2;
  39.         new_buf = mem_Alloc(out_len);
  40.         iconv stdcall (cd, #conv_buf, #in_len, #new_buf, #out_len);
  41.         if (EAX!=0)
  42.         {
  43.                 cd = EAX;
  44.                 debugval("iconv failed", cd);
  45.                 if (from_chs == CH_UTF8) && (to_chs == CH_CP866) {
  46.                         utf8rutodos(conv_buf);
  47.                 }
  48.                 if (from_chs == CH_CP1251) && (to_chs == CH_CP866) {
  49.                         wintodos(conv_buf);
  50.                 }
  51.         } else {
  52.                 strcpy(conv_buf, new_buf);
  53.         }
  54.         free(new_buf);         
  55.         return conv_buf;
  56. }
  57.  
  58. #endif