* srcprop.c (scm_source_properties, scm_set_source_properties_x,
[bpt/guile.git] / libguile / extchrs.c
CommitLineData
0f2d19dd
JB
1/* Copyright (C) 1995,1996 Free Software Foundation, Inc.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2, or (at your option)
6 * any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this software; see the file COPYING. If not, write to
15 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
16 *
17 * As a special exception, the Free Software Foundation gives permission
18 * for additional uses of the text contained in its release of GUILE.
19 *
20 * The exception is that, if you link the GUILE library with other files
21 * to produce an executable, this does not by itself cause the
22 * resulting executable to be covered by the GNU General Public License.
23 * Your use of that executable is in no way restricted on account of
24 * linking the GUILE library code into it.
25 *
26 * This exception does not however invalidate any other reasons why
27 * the executable file might be covered by the GNU General Public License.
28 *
29 * This exception applies only to the code released by the
30 * Free Software Foundation under the name GUILE. If you copy
31 * code from other Free Software Foundation releases into a copy of
32 * GUILE, as the General Public License permits, the exception does
33 * not apply to the code that you add in this way. To avoid misleading
34 * anyone as to the status of such modified files, you must delete
35 * this exception notice from them.
36 *
37 * If you write modifications of your own for GUILE, it is your choice
38 * whether to permit this exception to apply to your modifications.
39 * If you do not wish that, delete this exception notice.
40 */
41\f
42
43#include "extchrs.h"
44
45\f
46
e2806c10 47#ifdef SCM_FAKE_EXT_CHARS
0f2d19dd 48
1cc91f1b 49
0f2d19dd
JB
50int
51xmblen (str, size)
52 const char * str;
53 size_t size;
0f2d19dd
JB
54{
55 if (!str)
56 return 0;
57
58 if (*(unsigned char *)str > 127)
59 return ((size < 4)
60 ? -1
61 : 4);
62 else if (!*str)
63 return 0;
64 else
65 return 1;
66}
67
1cc91f1b 68
0f2d19dd
JB
69int
70xwctomb (_str, c)
71 char * _str;
72 int c;
0f2d19dd
JB
73{
74 unsigned char * str;
75 str = (unsigned char *)_str;
76 if (!str)
77 return 0;
78
79 if (!c)
80 {
81 *str = 0;
82 return 0;
83 }
84
85
86 if (c < 127)
87 {
88 *str = c;
89 return 1;
90 }
91
92 str[0] = 255;
93 str[1] = 0x80 | ((c >> 10) & 0x3f);
94 str[2] = 0x80 | ((c >> 4) & 0x3f);
95 str[3] = 0x80 | (c & 0xf);
96 return 4;
97}
98
1cc91f1b 99
0f2d19dd 100int
1cc91f1b 101xmbtowc (result, _str, size)
0f2d19dd
JB
102 xwchar_t * result;
103 const unsigned char * _str;
104 size_t size;
0f2d19dd
JB
105{
106 const unsigned char * str;
107 str = (const unsigned char *)_str;
108 if (!str)
109 return 0;
110
111 if ((size == 0) || !*str)
112 {
113 *result = 0;
114 return 0;
115 }
116
117 if (*str < 128)
118 {
119 *result = *str;
120 return 1;
121 }
122
123 if ( (*str != 255)
124 || (size < 4))
125 return -1;
126
127 *result = ( ((str[1] & 0x3f) << 10)
128 | ((str[2] & 0x3f) << 4)
129 | (str[3] & 0xf));
130 return 4;
131}
132
e2806c10 133#endif /* SCM_FAKE_EXT_CHARS */
0f2d19dd 134