360 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* 
 | 
						|
 * 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
 | 
						|
 *  DISCLAMED. 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;
 | 
						|
#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(x)	L##x
 | 
						|
 | 
						|
/*  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 _tmktemp    _wmktemp
 | 
						|
#define _topen      _wopen
 | 
						|
#define _tremove    _wremove
 | 
						|
#define _trename    _wrename
 | 
						|
#define _tsopen     _wsopen
 | 
						|
#define _tunlink    _wunlink
 | 
						|
#define _tfinddata_t    _wfinddata_t
 | 
						|
#define _tfindfirsti64  _wfindfirsti64
 | 
						|
#define _tfindnexti64   _wfindnexti64
 | 
						|
#define _tfinddatai64_t _wfinddatai64_t
 | 
						|
#endif  /* __MSVCRT__ */
 | 
						|
 | 
						|
#else	/* Not _UNICODE */
 | 
						|
 | 
						|
/*
 | 
						|
 * TCHAR, the type you should use instead of char.
 | 
						|
 */
 | 
						|
#ifndef _TCHAR_DEFINED
 | 
						|
#ifndef RC_INVOKED
 | 
						|
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(x)	x
 | 
						|
 | 
						|
/*  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	_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 _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__ */
 | 
						|
 | 
						|
#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_ */
 | 
						|
 |