source: trunk/src/crtdll/crt_wc.cpp@ 2618

Last change on this file since 2618 was 2618, checked in by sandervl, 26 years ago

JW: Update

File size: 16.0 KB
Line 
1/* $Id: crt_wc.cpp,v 1.1 2000-02-03 21:37:48 sandervl Exp $ */
2
3/*
4 * The C RunTime DLL
5 *
6 * Implements C run-time functionality as known from UNIX.
7 *
8 * Partialy based on Wine
9 *
10 * Copyright 1996,1998 Marcus Meissner
11 * Copyright 1996 Jukka Iivonen
12 * Copyright 1997 Uwe Bonnes
13 * Copyright 1999-2000 Jens Wiessner
14 *
15 * CRTDLL - widechar functions
16 *
17 */
18
19#include <odin.h>
20#include <os2win.h>
21#include <wchar.h>
22#include <wctype.h>
23#include <heapstring.h>
24#include <string.h>
25#include "crtimps.h"
26
27
28/*********************************************************************
29 * _fgetwchar (CRTDLL.93)
30 */
31wint_t CDECL CRTDLL__fgetwchar( void *i )
32{
33 // TODO: Check if really ok.
34 dprintf2(("CRTDLL: _fgetwchar -> _getch\n"));
35 return CRTDLL__getch();
36}
37
38
39/*********************************************************************
40 * CRTDLL__wcsdup (CRTDLL.317)
41 */
42LPWSTR CDECL CRTDLL__wcsdup( LPCWSTR str )
43{
44 dprintf2(("CRTDLL: _wcsdup\n"));
45 LPWSTR ret = NULL;
46 if (str)
47 {
48 int size = (wcslen((const wchar_t*)str) + 1) * sizeof(WCHAR);
49 ret = (WCHAR*)CRTDLL_malloc( size );
50 if (ret) memcpy( ret, str, size );
51 }
52 return ret;
53}
54
55
56/*********************************************************************
57 * CRTDLL__wcsicmp (CRTDLL.318)
58 */
59int CDECL CRTDLL__wcsicmp(LPWSTR str1, LPWSTR str2)
60{
61 dprintf2(("CRTDLL: _wcsicmp(%08xh,%08xh)\n",
62 str1,
63 str2));
64
65 return (CRTDLL__wcsnicmp(str1,
66 str2,
67 wcslen((wchar_t*) str1)));
68}
69
70
71/*********************************************************************
72 * CRTDLL__wcsicoll (CRTDLL.319)
73 */
74int CDECL CRTDLL__wcsicoll( LPCWSTR str1, LPCWSTR str2 )
75{
76 dprintf2(("CRTDLL: _wcsicoll\n"));
77 return CRTDLL__wcsicmp( (LPWSTR)str1, (LPWSTR)str2 );
78}
79
80
81/*********************************************************************
82 * CRTDLL__wcslwr (CRTDLL.320)
83 */
84LPWSTR CDECL CRTDLL__wcslwr(LPWSTR str)
85{
86 DWORD dwIndex;
87
88 dprintf2(("CRTDLL: _wcslwr(%08xh)\n",
89 str));
90
91 for (dwIndex = wcslen((const wchar_t*)str);
92 dwIndex;
93 dwIndex--)
94 {
95 towlower(str[dwIndex]);
96 }
97
98 return (str);
99}
100
101
102/*********************************************************************
103 * CRTDLL__wcsnicmp (CRTDLL.321)
104 */
105int CDECL CRTDLL__wcsnicmp(LPCWSTR str1, LPCWSTR str2, int n)
106{
107 dprintf2(("CRTDLL: _wcsnicmp(%08xh,%08xh,%08xh)\n",
108 str1,
109 str2,
110 l));
111
112 if (!n) return 0;
113 while ((--n > 0) && *str1 && (towupper(*str1) == towupper(*str2)))
114 {
115 str1++;
116 str2++;
117 }
118 return towupper(*str1) - towupper(*str2);
119}
120
121
122/*********************************************************************
123 * CRTDLL__wcsnset (CRTDLL.322)
124 */
125LPWSTR CDECL CRTDLL__wcsnset( LPWSTR str, WCHAR c, INT n )
126{
127 dprintf2(("CRTDLL: _wcsnset\n"));
128 LPWSTR ret = str;
129 while ((n-- > 0) && *str) *str++ = c;
130 return ret;
131}
132
133
134/*********************************************************************
135 * CRTDLL__wcsrev (CRTDLL.323)
136 */
137LPWSTR CDECL CRTDLL__wcsrev( LPWSTR str )
138{
139 dprintf2(("CRTDLL: _wcsrev\n"));
140 LPWSTR ret = str;
141 LPWSTR end = str + wcslen((const wchar_t*)str) - 1;
142 while (end > str)
143 {
144 WCHAR t = *end;
145 *end-- = *str;
146 *str++ = t;
147 }
148 return ret;
149}
150
151
152/*********************************************************************
153 * CRTDLL__wcsset (CRTDLL.324)
154 */
155LPWSTR CDECL CRTDLL__wcsset( LPWSTR str, WCHAR c )
156{
157 dprintf2(("CRTDLL: _wcsset\n"));
158 LPWSTR ret = str;
159 while (*str) *str++ = c;
160 return ret;
161}
162
163
164/*********************************************************************
165 * CRTDLL__wcsupr (CRTDLL.325)
166 */
167LPWSTR CDECL CRTDLL__wcsupr(LPWSTR str)
168{
169 DWORD dwIndex;
170
171 dprintf2(("CRTDLL: _wcsupr(%08xh)\n",
172 str));
173
174 for (dwIndex = wcslen((const wchar_t*)str);
175 dwIndex;
176 dwIndex--)
177 {
178 towupper(str[dwIndex]);
179 }
180
181 return (str);
182}
183
184
185/*********************************************************************
186 * fgetwc (CRTDLL.366)
187 */
188wint_t CDECL CRTDLL_fgetwc( FILE *f )
189{
190 dprintf2(("CRTDLL: fgetwc\n"));
191 return (fgetwc(f));
192}
193
194
195/*********************************************************************
196 * fputwc (CRTDLL.373)
197 */
198wint_t CDECL CRTDLL_fputwc( wint_t wc, FILE *strm )
199{
200 dprintf2(("CRTDLL: fputwc\n"));
201 return (fputwc(wc, strm));
202}
203
204
205/*********************************************************************
206 * iswalnum (CRTDLL.402)
207 */
208int CDECL CRTDLL_iswalnum(wint_t i)
209{
210 dprintf2(("CRTDLL: iswalnum(%08xh)\n", i));
211 return (iswalnum(i));
212}
213
214
215/*********************************************************************
216 * iswalpha (CRTDLL.403)
217 */
218int CDECL CRTDLL_iswalpha(wint_t i)
219{
220 dprintf2(("CRTDLL: iswalpha(%08xh)\n", i));
221 return (iswalpha(i));
222}
223
224
225/*********************************************************************
226 * iswascii (CRTDLL.404)
227 */
228int CDECL CRTDLL_iswascii(wint_t c)
229{
230 dprintf2(("CRTDLL: iswascii\n", c));
231 return (!((c)&(~0x7f)));
232}
233
234
235/*********************************************************************
236 * iswcntrl (CRTDLL.405)
237 */
238int CDECL CRTDLL_iswcntrl(wint_t i)
239{
240 dprintf2(("CRTDLL: iswcntrl(%08xh)\n", i));
241 return (iswcntrl(i));
242}
243
244
245/*********************************************************************
246 * iswctype (CRTDLL.406)
247 */
248int CDECL CRTDLL_iswctype(wint_t i, wctype_t wct)
249{
250 dprintf2(("CRTDLL: iswctype(%08xh, %08xh)\n", i, wct));
251 return (iswctype(i, wct));
252}
253
254
255/*********************************************************************
256 * iswdigit (CRTDLL.407)
257 */
258int CDECL CRTDLL_iswdigit(wint_t i)
259{
260 dprintf2(("CRTDLL: iswdigit(%08xh)\n", i));
261 return (iswdigit(i));
262}
263
264
265/*********************************************************************
266 * iswgraph (CRTDLL.408)
267 */
268int CDECL CRTDLL_iswgraph(wint_t i)
269{
270 dprintf2(("CRTDLL: iswgraph(%08xh)\n", i));
271 return (iswgraph(i));
272}
273
274
275/*********************************************************************
276 * iswlower (CRTDLL.409)
277 */
278int CDECL CRTDLL_iswlower(wint_t i)
279{
280 dprintf2(("CRTDLL: iswlower(%08xh)\n", i));
281 return (iswlower(i));
282}
283
284
285/*********************************************************************
286 * iswprint (CRTDLL.410)
287 */
288int CDECL CRTDLL_iswprint(wint_t i)
289{
290 dprintf2(("CRTDLL: iswprint(%08xh)\n", i));
291 return (iswprint(i));
292}
293
294
295/*********************************************************************
296 * iswpunct (CRTDLL.411)
297 */
298int CDECL CRTDLL_iswpunct(wint_t i)
299{
300 dprintf2(("CRTDLL: iswpunct(%08xh)\n", i));
301 return (iswpunct(i));
302}
303
304
305/*********************************************************************
306 * iswspace (CRTDLL.412)
307 */
308int CDECL CRTDLL_iswspace(wint_t i)
309{
310 dprintf2(("CRTDLL: iswspace(%08xh)\n", i));
311 return (iswspace(i));
312}
313
314
315/*********************************************************************
316 * iswupper (CRTDLL.413)
317 */
318int CDECL CRTDLL_iswupper(wint_t i)
319{
320 dprintf2(("CRTDLL: iswupper(%08xh)\n", i));
321 return (iswupper(i));
322}
323
324
325/*********************************************************************
326 * iswxdigit (CRTDLL.414)
327 */
328int CDECL CRTDLL_iswxdigit(wint_t i)
329{
330 dprintf2(("CRTDLL: iswxdigit(%08xh)\n", i));
331 return (iswxdigit(i));
332}
333
334
335/*********************************************************************
336 * swprintf (CRTDLL.480)
337 */
338int CDECL CRTDLL_swprintf(const LPWSTR str,
339 int i,
340 const LPWSTR format,
341 ...)
342{
343 va_list valist;
344 int rc;
345
346 dprintf2(("CRTDLL: swprintf(%s,%d,%s)\n",
347 str,
348 i,
349 format));
350
351 va_start( valist, format );
352 rc = vswprintf( (wchar_t*)str,
353 i,
354 (wchar_t*)format,
355 valist );
356 va_end( valist );
357 return rc;
358}
359
360
361/*********************************************************************
362 * swscanf (CRTDLL.481)
363 */
364int CDECL CRTDLL_swscanf( const wchar_t *s1, const wchar_t *s2, va_list arg )
365{
366 dprintf(("CRTDLL: swscanf\n"));
367 return (swscanf(s1, s2, arg));
368}
369
370
371/*********************************************************************
372 * towlower (CRTDLL.490)
373 */
374WCHAR CDECL CRTDLL_towlower(WCHAR c)
375{
376 dprintf2(("CRTDLL: towlower(%c)\n",
377 c));
378
379 return (towlower(c));
380}
381
382
383/*********************************************************************
384 * towupper (CRTDLL.491)
385 */
386WCHAR CDECL CRTDLL_towupper(WCHAR c)
387{
388 dprintf2(("CRTDLL: towupper(%c)\n",
389 c));
390
391 return (towupper(c));
392}
393
394
395/*********************************************************************
396 * ungetwc (CRTDLL.493)
397 */
398wint_t CDECL CRTDLL_ungetwc( wint_t wc, FILE *strm )
399{
400 dprintf2(("CRTDLL: ungetwc\n"));
401 return (ungetwc(wc, strm));
402}
403
404
405/*********************************************************************
406 * vswprintf (CRTDLL.498)
407 */
408int CDECL CRTDLL_vswprintf( wchar_t *s , size_t t, const wchar_t *format, va_list arg )
409{
410 dprintf2(("CRTDLL: vswprintf\n"));
411 return (vswprintf(s, t, format, arg));
412}
413
414
415/*********************************************************************
416 * wcscat (CRTDLL.500)
417 */
418wchar_t* CDECL CRTDLL_wcscat( wchar_t* str1,
419 const wchar_t* str2)
420{
421 dprintf2(("CRTDLL: wcscat(%08xh,%08xh)\n",
422 str1,
423 str2));
424
425 return (wcscat(str1, str2));
426}
427
428
429/*********************************************************************
430 * wcschr (CRTDLL.501)
431 */
432wchar_t* CDECL CRTDLL_wcschr(const wchar_t* str,
433 int i)
434{
435 dprintf2(("CRTDLL: wcschr(%08xh,%08xh)\n",
436 str,
437 i));
438
439 return (wcschr(str, i));
440}
441
442
443/*********************************************************************
444 * wcscmp (CRTDLL.502)
445 */
446int CDECL CRTDLL_wcscmp(const wchar_t* str1,
447 const wchar_t* str2)
448{
449 dprintf2(("CRTDLL: wcscmp(%08xh,%08xh)\n",
450 str1,
451 str2));
452
453 return (wcscmp(str1, str2));
454}
455
456
457/*********************************************************************
458 * wcscoll (CRTDLL.503)
459 */
460DWORD CDECL CRTDLL_wcscoll(LPCWSTR str1, LPCWSTR str2)
461{
462 dprintf2(("CRTDLL: wcscoll\n"));
463 return (wcscoll((const wchar_t*)str1, (const wchar_t*)str2));
464}
465
466
467/*********************************************************************
468 * wcscpy (CRTDLL.504)
469 */
470wchar_t* CDECL CRTDLL_wcscpy( wchar_t* str1,
471 const wchar_t* str2)
472{
473 dprintf2(("CRTDLL: wcscpy(%08xh,%08xh)\n",
474 str1,
475 str2));
476
477 return (wcscpy(str1, str2));
478}
479
480
481/*********************************************************************
482 * wcscspn (CRTDLL.505)
483 */
484size_t CDECL CRTDLL_wcscspn(const wchar_t* str1,
485 wchar_t* str2)
486{
487 dprintf2(("CRTDLL: wcscspn(%08xh,%08xh)\n",
488 str1,
489 str2));
490
491 return (wcscspn(str1, str2));
492}
493
494
495/*********************************************************************
496 * wcsftime (CRTDLL.506)
497 */
498size_t CDECL CRTDLL_wcsftime( wchar_t *s, size_t maxsize,
499 const wchar_t *format, const struct tm *timeptr )
500{
501 dprintf2(("CRTDLL: wcsftime\n"));
502 return (wcsftime(s, maxsize, format, timeptr));
503}
504
505
506/*********************************************************************
507 * wcslen (CRTDLL.507)
508 */
509size_t CDECL CRTDLL_wcslen(const wchar_t* str)
510{
511 dprintf2(("CRTDLL: wcslen(%08xh)\n",
512 str));
513
514 return (wcslen(str));
515}
516
517
518/*********************************************************************
519 * wcsncat (CRTDLL.508)
520 */
521wchar_t* CDECL CRTDLL_wcsncat( wchar_t* str1,
522 const wchar_t* str2,
523 size_t i)
524{
525 dprintf2(("CRTDLL: wcsncat(%08xh,%08xh,%08xh)\n",
526 str1,
527 str2,
528 i));
529
530 return (wcsncat(str1, str2, i));
531}
532
533
534
535/*********************************************************************
536 * wcsncmp (CRTDLL.509)
537 */
538int CDECL CRTDLL_wcsncmp(const wchar_t* str1,
539 const wchar_t* str2,
540 size_t i)
541{
542 dprintf2(("CRTDLL: wcsncmp(%08xh,%08xh,%08xh)\n",
543 str1,
544 str2,
545 i));
546
547 return (wcsncmp(str1, str2, i));
548}
549
550
551/*********************************************************************
552 * wcsncmp (CRTDLL.510)
553 */
554wchar_t* CDECL CRTDLL_wcsncpy( wchar_t* str1,
555 const wchar_t* str2,
556 size_t i)
557{
558 dprintf2(("CRTDLL: wcsncpy(%s,%s,%08xh)\n",
559 str1,
560 str2,
561 i));
562
563 return (wcsncpy(str1, str2, i));
564}
565
566
567/*********************************************************************
568 * wcspbrk (CRTDLL.511)
569 */
570wchar_t* CDECL CRTDLL_wcspbrk(const wchar_t* str1,
571 const wchar_t* str2)
572{
573 dprintf2(("CRTDLL: wcspbrk(%08xh,%08xh)\n",
574 str1,
575 str2));
576
577 return (wcspbrk(str1, str2));
578}
579
580
581/*********************************************************************
582 * wcsrchr (CRTDLL.512)
583 */
584wchar_t* CDECL CRTDLL_wcsrchr(const wchar_t* str,
585 size_t i)
586{
587 dprintf2(("CRTDLL: wcsrchr(%08xh,%08xh)\n",
588 str,
589 i));
590
591 return (wcsrchr(str, i));
592}
593
594
595/*********************************************************************
596 * wcsspn (CRTDLL.513)
597 */
598size_t CDECL CRTDLL_wcsspn(const wchar_t* str1,
599 const wchar_t* str2)
600{
601 dprintf2(("CRTDLL: wcsspn(%08xh,%08xh)\n",
602 str1,
603 str2));
604
605 return (wcsspn(str1, str2));
606}
607
608
609/*********************************************************************
610 * wcsstr (CRTDLL.514)
611 */
612wchar_t* CDECL CRTDLL_wcsstr(const wchar_t* str1,
613 const wchar_t* str2)
614{
615 dprintf2(("CRTDLL: wcsstr(%s,%s)\n",
616 str1,
617 str2));
618
619 return (wcsstr(str1, str2));
620}
621
622
623/*********************************************************************
624 * wcstod (CRTDLL.515)
625 */
626double CDECL CRTDLL_wcstod( const wchar_t *nptr, wchar_t **endptr )
627{
628 dprintf2(("CRTDLL: wcstod\n"));
629 return (wcstod(nptr, endptr));
630}
631
632
633/*********************************************************************
634 * wcstok (CRTDLL.516)
635 */
636wchar_t * CDECL CRTDLL_wcstok( wchar_t *s1, const wchar_t *s2, wchar_t **ptr )
637{
638 dprintf2(("CRTDLL: wcstok(%08xh, %08xh, %08xh)\n",s1,s2,ptr));
639 return (wcstok(s1, s2, ptr));
640}
641
642
643/*********************************************************************
644 * wcstol (CRTDLL.517)
645 */
646long int CDECL CRTDLL_wcstol( const wchar_t *s1, wchar_t **s2, int i )
647{
648 dprintf2(("CRTDLL: wcstol(%08xh, %08xh, %08xh)\n",s1,s2,i));
649 return (wcstol(s1, s2, i));
650}
651
652
653/*********************************************************************
654 * wcstombs (CRTDLL.518)
655 */
656size_t CDECL CRTDLL_wcstombs( char *s, const wchar_t *pwcs, size_t n )
657{
658 dprintf2(("CRTDLL: wcstombs(%08xh, %08xh, %08xh)\n",s,pwcs,n));
659 return (wcstombs(s, pwcs, n));
660}
661
662
663/*********************************************************************
664 * wcstoul (CRTDLL.519)
665 */
666unsigned long int CDECL CRTDLL_wcstoul( const wchar_t *s1, wchar_t **s2, int i )
667{
668 dprintf2(("CRTDLL: wcstoul(%08xh, %08xh, %08xh)\n",s1,s2,i));
669 return (wcstoul(s1, s2, i));
670}
671
672
673/*********************************************************************
674 * wcsxfrm (CRTDLL.520)
675 */
676size_t CDECL CRTDLL_wcsxfrm( wchar_t *s1, const wchar_t *s2, size_t n )
677{
678 dprintf2(("CRTDLL: wcsxfrm\n"));
679 return (wcsxfrm(s1, s2, n));
680}
681
682
683/*********************************************************************
684 * wctomb (CRTDLL.521)
685 */
686int CDECL CRTDLL_wctomb( LPSTR dst, WCHAR ch )
687{
688 dprintf2(("CRTDLL: wctomb\n"));
689 return (wctomb((char*)dst,ch));
690}
Note: See TracBrowser for help on using the repository browser.