aboutsummaryrefslogtreecommitdiff
path: root/win32/common/gtchar.h
blob: ddaa818955b269fdb1d15eccc4598a815650f5b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
/* 

 * tchar.h

 *

 * Unicode mapping layer for the standard C library. By including this

 * file and using the 't' names for string functions

 * (eg. _tprintf) you can make code which can be easily adapted to both

 * Unicode and non-unicode environments. In a unicode enabled compile define

 * _UNICODE before including tchar.h, otherwise the standard non-unicode

 * library functions will be used.

 *

 * Note that you still need to include string.h or stdlib.h etc. to define

 * the appropriate functions. Also note that there are several defines

 * included for non-ANSI functions which are commonly available (but using

 * the convention of prepending an underscore to non-ANSI library function

 * names).

 *

 * This file is part of the Mingw32 package.

 *

 * Contributors:

 *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>

 *

 *  THIS SOFTWARE IS NOT COPYRIGHTED

 *

 *  This source code is offered for use in the public domain. You may

 *  use, modify or distribute it freely.

 *

 *  This code is distributed in the hope that it will be useful but

 *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY

 *  DISCLAIMED. This includes but is not limited to warranties of

 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 *

 * $Revision$

 * $Author$

 * $Date$

 *

 */



#ifndef	_TCHAR_H_

#define _TCHAR_H_



/* All the headers include this file. */

/*#include <_mingw.h>*/



/*

 * NOTE: This tests _UNICODE, which is different from the UNICODE define

 *       used to differentiate Win32 API calls.

 */

#ifdef	_UNICODE





/*

 * Use TCHAR instead of char or wchar_t. It will be appropriately translated

 * if _UNICODE is correctly defined (or not).

 */

#ifndef _TCHAR_DEFINED

#ifndef RC_INVOKED

typedef	wchar_t	TCHAR;

typedef wchar_t _TCHAR;

#endif	/* Not RC_INVOKED */

#define _TCHAR_DEFINED

#endif





/*

 * __TEXT is a private macro whose specific use is to force the expansion of a

 * macro passed as an argument to the macros _T or _TEXT.  DO NOT use this

 * macro within your programs.  It's name and function could change without

 * notice.

 */

#define	__TEXT(q)	L##q



/*  for porting from other Windows compilers */

#if 0  // no  wide startup module

#define _tmain      wmain

#define _tWinMain   wWinMain

#define _tenviron   _wenviron

#define __targv     __wargv

#endif



/*

 * Unicode functions

 */

#define	_tprintf	wprintf

#define	_ftprintf	fwprintf

#define	_stprintf	swprintf

#define	_sntprintf	_snwprintf

#define	_vtprintf	vwprintf

#define	_vftprintf	vfwprintf

#define _vstprintf	vswprintf

#define	_vsntprintf	_vsnwprintf

#define	_tscanf		wscanf

#define	_ftscanf	fwscanf

#define	_stscanf	swscanf

#define	_fgettc		fgetwc

#define	_fgettchar	_fgetwchar

#define	_fgetts		fgetws

#define	_fputtc		fputwc

#define	_fputtchar	_fputwchar

#define	_fputts		fputws

#define	_gettc		getwc

#define	_getts		_getws

#define	_puttc		putwc

#define	_putts		_putws

#define	_ungettc	ungetwc

#define	_tcstod		wcstod

#define	_tcstol		wcstol

#define _tcstoul	wcstoul

#define	_itot		_itow

#define	_ltot		_ltow

#define	_ultot		_ultow

#define	_ttoi		_wtoi

#define	_ttol		_wtol

#define	_tcscat		wcscat

#define _tcschr		wcschr

#define _tcscmp		wcscmp

#define _tcscpy		wcscpy

#define _tcscspn	wcscspn

#define	_tcslen		wcslen

#define	_tcsncat	wcsncat

#define	_tcsncmp	wcsncmp

#define	_tcsncpy	wcsncpy

#define	_tcspbrk	wcspbrk

#define	_tcsrchr	wcsrchr

#define _tcsspn		wcsspn

#define	_tcsstr		wcsstr

#define _tcstok		wcstok

#define	_tcsdup		_wcsdup

#define	_tcsicmp	_wcsicmp

#define	_tcsnicmp	_wcsnicmp

#define	_tcsnset	_wcsnset

#define	_tcsrev		_wcsrev

#define _tcsset		_wcsset

#define	_tcslwr		_wcslwr

#define	_tcsupr		_wcsupr

#define	_tcsxfrm	wcsxfrm

#define	_tcscoll	wcscoll

#define	_tcsicoll	_wcsicoll

#define	_istalpha	iswalpha

#define	_istupper	iswupper

#define	_istlower	iswlower

#define	_istdigit	iswdigit

#define	_istxdigit	iswxdigit

#define	_istspace	iswspace

#define	_istpunct	iswpunct

#define	_istalnum	iswalnum

#define	_istprint	iswprint

#define	_istgraph	iswgraph

#define	_istcntrl	iswcntrl

#define	_istascii	iswascii

#define _totupper	towupper

#define	_totlower	towlower

#define _tcsftime	wcsftime

/* Macro functions */ 

#define _tcsdec     _wcsdec

#define _tcsinc     _wcsinc

#define _tcsnbcnt   _wcsncnt

#define _tcsnccnt   _wcsncnt

#define _tcsnextc   _wcsnextc

#define _tcsninc    _wcsninc

#define _tcsspnp    _wcsspnp

#define _wcsdec(_wcs1, _wcs2) ((_wcs1)>=(_wcs2) ? NULL : (_wcs2)-1)

#define _wcsinc(_wcs)  ((_wcs)+1)

#define _wcsnextc(_wcs) ((unsigned int) *(_wcs))

#define _wcsninc(_wcs, _inc) (((_wcs)+(_inc)))

#define _wcsncnt(_wcs, _cnt) ((wcslen(_wcs)>_cnt) ? _count : wcslen(_wcs))

#define _wcsspnp(_wcs1, _wcs2) ((*((_wcs1)+wcsspn(_wcs1,_wcs2))) ? ((_wcs1)+wcsspn(_wcs1,_wcs2)) : NULL)



#if 1  /* defined __MSVCRT__ */

/*

 *   These wide functions not in crtdll.dll.

 *   Define macros anyway so that _wfoo rather than _tfoo is undefined

 */

#define _ttoi64     _wtoi64

#define _i64tot     _i64tow

#define _ui64tot    _ui64tow

#define	_tasctime	_wasctime

#define	_tctime		_wctime

#define	_tstrdate	_wstrdate

#define	_tstrtime	_wstrtime

#define	_tutime		_wutime

#define _tcsnccoll  _wcsncoll

#define _tcsncoll   _wcsncoll

#define _tcsncicoll _wcsnicoll

#define _tcsnicoll  _wcsnicoll

#define _taccess    _waccess

#define _tchmod     _wchmod

#define _tcreat     _wcreat

#define _tfindfirst _wfindfirst

#define _tfindnext  _wfindnext

#define _tfdopen    _wfdopen

#define _tfopen     _wfopen

#define _tgetenv    _wgetenv

#define _tputenv    _wputenv

#define _tsearchenv _wsearchenv

#define _tmakepath  _wmakepath

#define _tsplitpath _wsplitpath

#define _tfullpath  _wfullpath

#define _tmktemp    _wmktemp

#define _topen      _wopen

#define _tremove    _wremove

#define _trename    _wrename

#define _tsopen     _wsopen

#define _tsetlocale _wsetlocale

#define _tunlink    _wunlink

#define _tfinddata_t    _wfinddata_t

#define _tfindfirsti64  _wfindfirsti64

#define _tfindnexti64   _wfindnexti64

#define _tfinddatai64_t _wfinddatai64_t

#endif  /* __MSVCRT__ */



/* dirent structures and functions */

#define _tdirent	_wdirent

#define _TDIR 		_WDIR

#define _topendir	_wopendir

#define _tclosedir	_wclosedir

#define _treaddir	_wreaddir

#define _trewinddir	_wrewinddir

#define _ttelldir	_wtelldir

#define _tseekdir	_wseekdir

#else	/* Not _UNICODE */



/*

 * TCHAR, the type you should use instead of char.

 */

#ifndef _TCHAR_DEFINED

#ifndef RC_INVOKED

typedef char	TCHAR;

typedef char	_TCHAR;

#endif

#define _TCHAR_DEFINED

#endif



/*

 * __TEXT is a private macro whose specific use is to force the expansion of a

 * macro passed as an argument to the macros _T or _TEXT.  DO NOT use this

 * macro within your programs.  It's name and function could change without

 * notice.

 */

#define	__TEXT(q)	q



/*  for porting from other Windows compilers */

#define _tmain      main

#define _tWinMain   WinMain

#define _tenviron  _environ

#define __targv     __argv



/*

 * Non-unicode (standard) functions

 */



#define	_tprintf	printf

#define _ftprintf	fprintf

#define	_stprintf	sprintf

#define	_sntprintf	_snprintf

#define	_vtprintf	vprintf

#define	_vftprintf	vfprintf

#define _vstprintf	vsprintf

#define	_vsntprintf	_vsnprintf

#define	_tscanf		scanf

#define	_ftscanf	fscanf

#define	_stscanf	sscanf

#define	_fgettc		fgetc

#define	_fgettchar	_fgetchar

#define	_fgetts		fgets

#define	_fputtc		fputc

#define	_fputtchar	_fputchar

#define	_fputts		fputs

#define _tfdopen	_fdopen

#define	_tfopen		fopen

#define	_tgetenv	getenv

#define	_tputenv	_putenv

#define	_tsearchenv	_searchenv

#define	_tmakepath	_makepath

#define	_tsplitpath	_splitpath

#define	_tfullpath	_fullpath

#define	_gettc		getc

#define	_getts		gets

#define	_puttc		putc

#define	_putts		puts

#define	_ungettc	ungetc

#define	_tcstod		strtod

#define	_tcstol		strtol

#define _tcstoul	strtoul

#define	_itot		_itoa

#define	_ltot		_ltoa

#define	_ultot		_ultoa

#define	_ttoi		atoi

#define	_ttol		atol

#define	_tcscat		strcat

#define _tcschr		strchr

#define _tcscmp		strcmp

#define _tcscpy		strcpy

#define _tcscspn	strcspn

#define	_tcslen		strlen

#define	_tcsncat	strncat

#define	_tcsncmp	strncmp

#define	_tcsncpy	strncpy

#define	_tcspbrk	strpbrk

#define	_tcsrchr	strrchr

#define _tcsspn		strspn

#define	_tcsstr		strstr

#define _tcstok		strtok

#define	_tcsdup		_strdup

#define	_tcsicmp	_stricmp

#define	_tcsnicmp	_strnicmp

#define	_tcsnset	_strnset

#define	_tcsrev		_strrev

#define _tcsset		_strset

#define	_tcslwr		_strlwr

#define	_tcsupr		_strupr

#define	_tcsxfrm	strxfrm

#define	_tcscoll	strcoll

#define	_tcsicoll	_stricoll

#define	_istalpha	isalpha

#define	_istupper	isupper

#define	_istlower	islower

#define	_istdigit	isdigit

#define	_istxdigit	isxdigit

#define	_istspace	isspace

#define	_istpunct	ispunct

#define	_istalnum	isalnum

#define	_istprint	isprint

#define	_istgraph	isgraph

#define	_istcntrl	iscntrl

#define	_istascii	isascii

#define _totupper	toupper

#define	_totlower	tolower

#define	_tasctime	asctime

#define	_tctime		ctime

#define	_tstrdate	_strdate

#define	_tstrtime	_strtime

#define	_tutime		_utime

#define _tcsftime	strftime

/* Macro functions */ 

#define _tcsdec     _strdec

#define _tcsinc     _strinc

#define _tcsnbcnt   _strncnt

#define _tcsnccnt   _strncnt

#define _tcsnextc   _strnextc

#define _tcsninc    _strninc

#define _tcsspnp    _strspnp

#define _strdec(_str1, _str2) ((_str1)>=(_str2) ? NULL : (_str2)-1)

#define _strinc(_str)  ((_str)+1)

#define _strnextc(_str) ((unsigned int) *(_str))

#define _strninc(_str, _inc) (((_str)+(_inc)))

#define _strncnt(_str, _cnt) ((strlen(_str)>_cnt) ? _count : strlen(_str))

#define _strspnp(_str1, _str2) ((*((_str1)+strspn(_str1,_str2))) ? ((_str1)+strspn(_str1,_str2)) : NULL)



#define _tchmod     _chmod

#define _tcreat     _creat

#define _tfindfirst _findfirst

#define _tfindnext  _findnext

#define _tmktemp    _mktemp

#define _topen      _open

#define _taccess    _access

#define _tremove    remove

#define _trename    rename

#define _tsopen     _sopen

#define _tsetlocale setlocale

#define _tunlink    _unlink

#define _tfinddata_t    _finddata_t



#if 1  /* defined __MSVCRT__ */

/* Not in crtdll.dll. Define macros anyway? */

#define _ttoi64     _atoi64

#define _i64tot     _i64toa

#define _ui64tot    _ui64toa

#define _tcsnccoll  _strncoll

#define _tcsncoll   _strncoll

#define _tcsncicoll _strnicoll

#define _tcsnicoll  _strnicoll

#define _tfindfirsti64  _findfirsti64

#define _tfindnexti64   _findnexti64

#define _tfinddatai64_t _finddatai64_t

#endif  /* __MSVCRT__ */



/* dirent structures and functions */

#define _tdirent	dirent

#define _TDIR 		DIR

#define _topendir	opendir

#define _tclosedir	closedir

#define _treaddir	readdir

#define _trewinddir	rewinddir

#define _ttelldir	telldir

#define _tseekdir	seekdir



#endif	/* Not _UNICODE */



/*

 * UNICODE a constant string when _UNICODE is defined else returns the string

 * unmodified.  Also defined in w32api/winnt.h.

 */

#define _TEXT(x)	__TEXT(x)

#define	_T(x)		__TEXT(x)



#endif	/* Not _TCHAR_H_ */