X-Git-Url: https://git.hcoop.net/hcoop/debian/courier-authlib.git/blobdiff_plain/ac40fd9eb9d1980c90dc009d526a23ead1ec0f76..8d138742ae268344f406cb75d79aa6bf853f9d87:/unicode/windows874u.c?ds=sidebyside diff --git a/unicode/windows874u.c b/unicode/windows874u.c new file mode 100644 index 0000000..9a78430 --- /dev/null +++ b/unicode/windows874u.c @@ -0,0 +1,64 @@ +/* +** Copyright 2001-2003 Double Precision, Inc. +** See COPYING for distribution information. +** +** $Id: windows874u.c,v 1.2 2003/03/07 00:47:31 mrsam Exp $ +*/ + +#include "unicode_config.h" +#include "unicode.h" +#include +#include + +char *unicode_windows874_u2c(const unicode_char *uc, int *errflag, + const unicode_char *tab) +{ +size_t l; +char *p; + + for (l=0; uc[l]; l++) + ; + + if (errflag) *errflag= -1; + p=malloc(l+1); + if (!p) + return (0); + + for (l=0; uc[l]; l++) + { + int c; + unicode_char ucc=uc[l]; + + /* First, guess */ + + if ((ucc & 0x7F) == ucc) + c=(unsigned char)ucc; + else if (tab[ ucc & 0x7F ] == ucc) + c=(int)(ucc & 0x7F) | 0x80; + else if (ucc > 0x0E00 && ucc < 0x0E60 && + tab[ (ucc + 0x20) & 0x7F] == ucc) + c=(int)( (ucc + 0x20) & 0x7F) | 0x80; + else + { + for (c=0; c<128; c++) + if (tab[c] == uc[l]) + break; + if (c >= 128) + { + if (errflag) + { + *errflag=l; + free(p); + return (0); + } + c=uc[l]; + } + c |= 0x80; + } + if (c == 0) + c=255; + p[l]=(char)c; + } + p[l]=0; + return (p); +}