OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libc/] [ctype/] [towupper.c] - Blame information for rev 517

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 207 jeremybenn
/* Copyright (c) 2002 Red Hat Incorporated.
2
   All rights reserved.
3
 
4
   Redistribution and use in source and binary forms, with or without
5
   modification, are permitted provided that the following conditions are met:
6
 
7
     Redistributions of source code must retain the above copyright
8
     notice, this list of conditions and the following disclaimer.
9
 
10
     Redistributions in binary form must reproduce the above copyright
11
     notice, this list of conditions and the following disclaimer in the
12
     documentation and/or other materials provided with the distribution.
13
 
14
     The name of Red Hat Incorporated may not be used to endorse
15
     or promote products derived from this software without specific
16
     prior written permission.
17
 
18
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
   ARE DISCLAIMED.  IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY
22
   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
*/
29
 
30
/*
31
FUNCTION
32
        <<towupper>>---translate wide characters to uppercase
33
 
34
INDEX
35
        towupper
36
 
37
ANSI_SYNOPSIS
38
        #include <wctype.h>
39
        wint_t towupper(wint_t <[c]>);
40
 
41
TRAD_SYNOPSIS
42
        #include <wctype.h>
43
        wint_t towupper(<[c]>)
44
        wint_t <[c]>;
45
 
46
 
47
DESCRIPTION
48
<<towupper>> is a function which converts lowercase wide characters to
49
uppercase, leaving all other characters unchanged.
50
 
51
RETURNS
52
<<towupper>> returns the uppercase equivalent of <[c]> when it is a
53
lowercase wide character, otherwise, it returns the input character.
54
 
55
PORTABILITY
56
<<towupper>> is C99.
57
 
58
No supporting OS subroutines are required.
59
*/
60
 
61
#include <_ansi.h>
62
#include <newlib.h>
63
#include <string.h>
64
#include <reent.h>
65
#include <ctype.h>
66
#include <wctype.h>
67
#include "local.h"
68
 
69
wint_t
70
_DEFUN(towupper,(c), wint_t c)
71
{
72
#ifdef _MB_CAPABLE
73
  c = _jp2uc (c);
74
  if (c < 0x100)
75
    {
76
      if (c == 0x00b5)
77
        return 0x039c;
78
 
79
      if ((c >= 0x00e0 && c <= 0x00fe) ||
80
          (c >= 0x0061 && c <= 0x007a))
81
        return (c - 0x20);
82
 
83
      if (c == 0xff)
84
        return 0x0178;
85
 
86
      return c;
87
    }
88
  else if (c < 0x300)
89
    {
90
      if ((c >= 0x0101 && c <= 0x012f) ||
91
          (c >= 0x0133 && c <= 0x0137) ||
92
          (c >= 0x014b && c <= 0x0177) ||
93
          (c >= 0x01df && c <= 0x01ef) ||
94
          (c >= 0x01f9 && c <= 0x021f) ||
95
          (c >= 0x0223 && c <= 0x0233))
96
        {
97
          if (c & 0x01)
98
            return (c - 1);
99
          return c;
100
        }
101
 
102
      if ((c >= 0x013a && c <= 0x0148) ||
103
          (c >= 0x01ce && c <= 0x1dc))
104
        {
105
          if (!(c & 0x01))
106
            return (c - 1);
107
          return c;
108
        }
109
 
110
      if (c == 0x0131)
111
        return 0x0049;
112
 
113
      if (c == 0x017a || c == 0x017c || c == 0x017e)
114
        return (c - 1);
115
 
116
      if (c >= 0x017f && c <= 0x0292)
117
        {
118
          wint_t k;
119
          switch (c)
120
            {
121
            case 0x017f:
122
              k = 0x0053;
123
              break;
124
            case 0x0183:
125
              k = 0x0182;
126
              break;
127
            case 0x0185:
128
              k = 0x0184;
129
              break;
130
            case 0x0188:
131
              k = 0x0187;
132
              break;
133
            case 0x018c:
134
              k = 0x018b;
135
              break;
136
            case 0x0192:
137
              k = 0x0191;
138
              break;
139
            case 0x0195:
140
              k = 0x01f6;
141
              break;
142
            case 0x0199:
143
              k = 0x0198;
144
              break;
145
            case 0x019e:
146
              k = 0x0220;
147
              break;
148
            case 0x01a1:
149
            case 0x01a3:
150
            case 0x01a5:
151
            case 0x01a8:
152
            case 0x01ad:
153
            case 0x01b0:
154
            case 0x01b4:
155
            case 0x01b6:
156
            case 0x01b9:
157
            case 0x01bd:
158
            case 0x01c5:
159
            case 0x01c8:
160
            case 0x01cb:
161
            case 0x01f2:
162
            case 0x01f5:
163
              k = c - 1;
164
              break;
165
            case 0x01bf:
166
              k = 0x01f7;
167
              break;
168
            case 0x01c6:
169
            case 0x01c9:
170
            case 0x01cc:
171
              k = c - 2;
172
              break;
173
            case 0x01dd:
174
              k = 0x018e;
175
              break;
176
            case 0x01f3:
177
              k = 0x01f1;
178
              break;
179
            case 0x0253:
180
              k = 0x0181;
181
              break;
182
            case 0x0254:
183
              k = 0x0186;
184
              break;
185
            case 0x0256:
186
              k = 0x0189;
187
              break;
188
            case 0x0257:
189
              k = 0x018a;
190
              break;
191
            case 0x0259:
192
              k = 0x018f;
193
              break;
194
            case 0x025b:
195
              k = 0x0190;
196
              break;
197
            case 0x0260:
198
              k = 0x0193;
199
              break;
200
            case 0x0263:
201
              k = 0x0194;
202
              break;
203
            case 0x0268:
204
              k = 0x0197;
205
              break;
206
            case 0x0269:
207
              k = 0x0196;
208
              break;
209
            case 0x026f:
210
              k = 0x019c;
211
              break;
212
            case 0x0272:
213
              k = 0x019d;
214
              break;
215
            case 0x0275:
216
              k = 0x019f;
217
              break;
218
            case 0x0280:
219
              k = 0x01a6;
220
              break;
221
            case 0x0283:
222
              k = 0x01a9;
223
              break;
224
            case 0x0288:
225
              k = 0x01ae;
226
              break;
227
            case 0x028a:
228
              k = 0x01b1;
229
              break;
230
            case 0x028b:
231
              k = 0x01b2;
232
              break;
233
            case 0x0292:
234
              k = 0x01b7;
235
              break;
236
            default:
237
              k = 0;
238
            }
239
          if (k != 0)
240
            return k;
241
        }
242
    }
243
  else if (c < 0x0400)
244
    {
245
      if (c == 0x03ac)
246
        return 0x0386;
247
 
248
      if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
249
        return (c - 0x15);
250
 
251
      if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
252
        return (c - 0x20);
253
 
254
      if (c == 0x03c2)
255
        return 0x03a3;
256
 
257
      if (c >= 0x03cc && c <= 0x03f5)
258
        {
259
          wint_t k;
260
          switch (c)
261
            {
262
            case 0x03cc:
263
              k = 0x038c;
264
              break;
265
            case 0x03cd:
266
            case 0x03ce:
267
              k = c - 0x3f;
268
              break;
269
            case 0x03d0:
270
              k = 0x0392;
271
              break;
272
            case 0x03d1:
273
              k = 0x0398;
274
              break;
275
            case 0x03d5:
276
              k = 0x03a6;
277
              break;
278
            case 0x03d6:
279
              k = 0x03a0;
280
              break;
281
            case 0x03d9:
282
            case 0x03db:
283
            case 0x03dd:
284
            case 0x03df:
285
            case 0x03e1:
286
            case 0x03e3:
287
            case 0x03e5:
288
            case 0x03e7:
289
            case 0x03e9:
290
            case 0x03eb:
291
            case 0x03ed:
292
            case 0x03ef:
293
              k = c - 1;
294
              break;
295
            case 0x03f0:
296
              k = 0x039a;
297
              break;
298
            case 0x03f1:
299
              k = 0x03a1;
300
              break;
301
            case 0x03f2:
302
              k = 0x03a3;
303
              break;
304
            case 0x03f5:
305
              k = 0x0395;
306
              break;
307
            default:
308
              k = 0;
309
            }
310
          if (k != 0)
311
            return k;
312
        }
313
    }
314
  else if (c < 0x500)
315
    {
316
      if (c >= 0x0450 && c <= 0x045f)
317
        return (c - 0x50);
318
 
319
      if (c >= 0x0430 && c <= 0x044f)
320
        return (c - 0x20);
321
 
322
      if ((c >= 0x0461 && c <= 0x0481) ||
323
          (c >= 0x048b && c <= 0x04bf) ||
324
          (c >= 0x04d1 && c <= 0x04f5))
325
        {
326
          if (c & 0x01)
327
            return (c - 1);
328
          return c;
329
        }
330
 
331
      if (c >= 0x04c2 && c <= 0x04ce)
332
        {
333
          if (!(c & 0x01))
334
            return (c - 1);
335
          return c;
336
        }
337
 
338
      if (c == 0x04f9)
339
        return 0x04f8;
340
    }
341
  else if (c < 0x1f00)
342
    {
343
      if ((c >= 0x0501 && c <= 0x050f) ||
344
          (c >= 0x1e01 && c <= 0x1e95) ||
345
          (c >= 0x1ea1 && c <= 0x1ef9))
346
        {
347
          if (c & 0x01)
348
            return (c - 1);
349
          return c;
350
        }
351
 
352
      if (c >= 0x0561 && c <= 0x0586)
353
        return (c - 0x30);
354
 
355
      if (c == 0x1e9b)
356
        return 0x1e60;
357
    }
358
  else if (c < 0x2000)
359
    {
360
 
361
      if ((c >= 0x1f00 && c <= 0x1f07) ||
362
          (c >= 0x1f10 && c <= 0x1f15) ||
363
          (c >= 0x1f20 && c <= 0x1f27) ||
364
          (c >= 0x1f30 && c <= 0x1f37) ||
365
          (c >= 0x1f40 && c <= 0x1f45) ||
366
          (c >= 0x1f60 && c <= 0x1f67) ||
367
          (c >= 0x1f80 && c <= 0x1f87) ||
368
          (c >= 0x1f90 && c <= 0x1f97) ||
369
          (c >= 0x1fa0 && c <= 0x1fa7))
370
        return (c + 0x08);
371
 
372
      if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
373
        return (c + 0x08);
374
 
375
      if (c >= 0x1f70 && c <= 0x1ff3)
376
        {
377
          wint_t k;
378
          switch (c)
379
            {
380
            case 0x1fb0:
381
              k = 0x1fb8;
382
              break;
383
            case 0x1fb1:
384
              k = 0x1fb9;
385
              break;
386
            case 0x1f70:
387
              k = 0x1fba;
388
              break;
389
            case 0x1f71:
390
              k = 0x1fbb;
391
              break;
392
            case 0x1fb3:
393
              k = 0x1fbc;
394
              break;
395
            case 0x1fbe:
396
              k = 0x0399;
397
              break;
398
            case 0x1f72:
399
              k = 0x1fc8;
400
              break;
401
            case 0x1f73:
402
              k = 0x1fc9;
403
              break;
404
            case 0x1f74:
405
              k = 0x1fca;
406
              break;
407
            case 0x1f75:
408
              k = 0x1fcb;
409
              break;
410
            case 0x1fd0:
411
              k = 0x1fd8;
412
              break;
413
            case 0x1fd1:
414
              k = 0x1fd9;
415
              break;
416
            case 0x1f76:
417
              k = 0x1fda;
418
              break;
419
            case 0x1f77:
420
              k = 0x1fdb;
421
              break;
422
            case 0x1fe0:
423
              k = 0x1fe8;
424
              break;
425
            case 0x1fe1:
426
              k = 0x1fe9;
427
              break;
428
            case 0x1f7a:
429
              k = 0x1fea;
430
              break;
431
            case 0x1f7b:
432
              k = 0x1feb;
433
              break;
434
            case 0x1fe5:
435
              k = 0x1fec;
436
              break;
437
            case 0x1f78:
438
              k = 0x1ff8;
439
              break;
440
            case 0x1f79:
441
              k = 0x1ff9;
442
              break;
443
            case 0x1f7c:
444
              k = 0x1ffa;
445
              break;
446
            case 0x1f7d:
447
              k = 0x1ffb;
448
              break;
449
            case 0x1ff3:
450
              k = 0x1ffc;
451
              break;
452
            default:
453
              k = 0;
454
            }
455
          if (k != 0)
456
            return k;
457
        }
458
    }
459
  else
460
    {
461
      if (c >= 0x2170 && c <= 0x217f)
462
        return (c - 0x10);
463
 
464
      if (c >= 0x24d0 && c <= 0x24e9)
465
        return (c - 0x1a);
466
 
467
      if (c >= 0xff41 && c <= 0xff5a)
468
        return (c - 0x20);
469
 
470
      if (c >= 0x10428 && c <= 0x1044d)
471
        return (c - 0x28);
472
    }
473
  return c;
474
#else
475
  return (c < 0x00ff ? (wint_t)(toupper ((int)c)) : c);
476
#endif /* _MB_CAPABLE */
477
}
478
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.