+++ /dev/null
-/*
-** Copyright 2000-2003 Double Precision, Inc.
-** See COPYING for distribution information.
-**
-** $Id: iso8859.c,v 1.3 2003/03/07 00:47:31 mrsam Exp $
-*/
-
-#include "unicode_config.h"
-#include "unicode.h"
-#include <string.h>
-#include <stdlib.h>
-
-/* ISO8859 charsets all share the same functions */
-
-unicode_char *unicode_iso8859_c2u(const char *str, int *err,
- const unicode_char *table)
-{
-size_t l=strlen(str);
-unicode_char *p=(unicode_char *)malloc((l+1) * sizeof(unicode_char));
-
- if (err)
- *err= -1;
-
- if (!p)
- return (0);
-
- for (l=0; str[l]; l++)
- {
- unicode_char c=(int)(unsigned char)str[l];
-
- c= c < 128 ? c:table[c & 0x7F];
-
- if (!c)
- {
- if (err)
- {
- *err=l;
- free(p);
- return (0);
- }
- c=(int)(unsigned char)str[l];
- }
- p[l]=c;
- }
- p[l]=0;
- return (p);
-}
-
-char *unicode_iso8859_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 ] == uc[l])
- c=(int)(ucc & 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);
-}