⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 platform.h

📁 五行MMORPG引擎系统V1.0
💻 H
📖 第 1 页 / 共 2 页
字号:
extern char*       dStrcat(char *dst, const char *src);
extern UTF8*       dStrcat(UTF8 *dst, const UTF8 *src);

extern char*       dStrncat(char* dst, const char* src, dsize_t len);
extern char*       dStrcatl(char *dst, dsize_t dstSize, ...);

extern int         dStrcmp(const char *str1, const char *str2);
extern int         dStrcmp(const UTF16 *str1, const UTF16 *str2);
extern int         dStrcmp(const UTF8 *str1, const UTF8 *str2);

extern int         dStricmp(const char *str1, const char *str2);
extern int         dStrncmp(const char *str1, const char *str2, dsize_t len);
extern int         dStrnicmp(const char *str1, const char *str2, dsize_t len);
extern char*       dStrcpy(char *dst, const char *src);

extern char*       dStrcpyl(char *dst, dsize_t dstSize, ...);
extern char*       dStrncpy(char *dst, const char *src, dsize_t len);
extern char*       dStrncpy(UTF8 *dst, const UTF8 *src, dsize_t len);

extern dsize_t      dStrlen(const char *str);

extern char*       dStrupr(char *str);
extern char*       dStrlwr(char *str);
extern char*       dStrchr(char *str, int c);
extern const char* dStrchr(const char *str, int c);
extern char*       dStrrchr(char *str, int c);
extern const char* dStrrchr(const char *str, int c);
extern dsize_t     dStrspn(const char *str, const char *set);
extern dsize_t     dStrcspn(const char *str, const char *set);


extern char*       dStrstr(char *str1, char *str2);
extern char*       dStrstr(const char *str1, const char *str2);

extern char*       dStrtok(char *str, const char *sep);

extern int         dAtoi(const char *str);
extern float       dAtof(const char *str);
extern bool        dAtob(const char *str);

extern void   dPrintf(const char *format, ...);
extern int    dVprintf(const char *format, void *arglist);
extern int    dSprintf(char *buffer, dsize_t bufferSize, const char *format, ...);
extern int    dVsprintf(char *buffer, dsize_t bufferSize, const char *format, void *arglist);
extern int    dSscanf(const char *buffer, const char *format, ...);
extern int    dFflushStdout();
extern int    dFflushStderr();

inline char dToupper(const char c) { if (c >= char('a') && c <= char('z')) return char(c + 'A' - 'a'); else return c; }
inline char dTolower(const char c) { if (c >= char('A') && c <= char('Z')) return char(c - 'A' + 'a'); else return c; }

#ifdef TGE_RPG
extern bool dIsBlank(const char *str);
#endif

extern bool dIsalnum(const char c);
extern bool dIsalpha(const char c);
extern bool dIsdigit(const char c);
extern bool dIsspace(const char c);

extern bool dIsprint(const char c);///TGE_String

#ifdef TGE_RPG
inline bool dIshex		(const char c){return dIsdigit(c) || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F';}
inline bool dIslbracket	(const char c){return c=='{'  || c=='['  || c=='<' || c=='(' ;}
inline bool dIsrbracket	(const char c){return c=='}'  || c==']'  || c=='>' || c==')' ;}
inline bool dIsbracket	(const char c){return dIslbracket(c) || dIsrbracket(c);}
inline bool dIsoprchar	(const char c){return !dIsalnum(c) && c > ' ' && c <= 0x7f && c != '_';}
inline bool dIsopr		(const char c){return c=='`'||c=='~'||c=='@'||c=='#'||c=='$'||c=='%'||c=='^'||c=='&'||c=='*'||c=='|'||c=='='||c=='-'||c=='+';}
inline bool dIsslash		(const char c){return c=='/'||c=='\\';}
inline bool dIsquote		(const char c){return c=='\''||c=='"';}
inline bool dIssep		(const char c){return c==','|| c==';'|| c=='?' || c=='.'|| c=='!';}
inline bool dIsvarchar	(const char c){return dIsalnum(c) || c == '_';}
#endif
//------------------------------------------------------------------------------
// Unicode string conversions

//extern UTF8 * convertUTF16toUTF8(const UTF16 *string, UTF8 *buffer, U32 bufsize);
//extern UTF16 * convertUTF8toUTF16(const UTF8 *string, UTF16 *buffer, U32 bufsize);

//////////////////////////////////////////////////////////////////////////
/// \brief Get the first character of a UTF-8 string as a UTF-16 character
///
/// \param string UTF-8 string
/// \return First character of string as a UTF-16 character
//////////////////////////////////////////////////////////////////////////
//extern UTF16 getFirstUTF8Char(const UTF8 *string);

//////////////////////////////////////////////////////////////////////////
/// \brief Obtain a pointer to the start of the next UTF-8 character in the string
///
/// As UTF-8 characters can span multiple bytes, you can't scan the string
/// in the same way you would an ANSI string. getNextUTF8Char() is intended
///
/// This still works if ptr points to the middle of a character.
///
/// \param ptr Pointer to last character or start of string
/// \return Pointer to next UTF-8 character in the string or NULL for end of string.
//////////////////////////////////////////////////////////////////////////
//extern const UTF8 *getNextUTF8Char(const UTF8 *ptr);

//////////////////////////////////////////////////////////////////////////
/// \brief Obtain a pointer to the start of the Nth UTF-8 character in the string
///
/// As UTF-8 characters can span multiple bytes, you can't scan the string
/// in the same way you would an ANSI string. This allows you to quickly
/// skip to the appropriate place in the string.
///
/// This still works if ptr points to the middle of a character.
///
/// \param ptr Pointer to last character or start of string
/// \return Pointer to Nth UTF-8 character in the string or NULL for end of string.
//////////////////////////////////////////////////////////////////////////
//extern const UTF8 *getNextUTF8Char(const UTF8 *ptr, const U32 n);

// UNICODE is a windows platform API switching flag. Don't define it on other platforms.
#ifdef UNICODE
#define dT(s)    L##s
#else
#define dT(s)    s
#endif

//------------------------------------------------------------------------------
// Misc StdLib functions


#define QSORT_CALLBACK FN_CDECL
void dQsort(void *base, U32 nelem, U32 width, int (QSORT_CALLBACK *fcmp)(const void *, const void *));


//------------------------------------------------------------------------------
// ConsoleObject GetClassNameFn


//------------------------------------------------------------------------------
/// Memory functions
namespace Memory
{
   dsize_t getMemoryUsed();
   dsize_t getMemoryAllocated();
   void validate();
} // namespace Memory

extern void* FN_CDECL operator new(dsize_t size, void* ptr);

template <class T>
inline T* constructInPlace(T* p)
{
   return new(p) T;
}

template <class T>
inline T* constructInPlace(T* p, const T* copy)
{
   return new(p) T(*copy);
}

template <class T>
inline void destructInPlace(T* p)
{
   p->~T();
}

#if !defined(TORQUE_DISABLE_MEMORY_MANAGER)
   extern void* FN_CDECL operator new(dsize_t size, const char*, const U32);
   extern void* FN_CDECL operator new[](dsize_t size, const char*, const U32);
   extern void  FN_CDECL operator delete(void* ptr);
   extern void  FN_CDECL operator delete[](void* ptr);
   #define new new(__FILE__, __LINE__)
#endif

#define placenew(x) new(x)
#define dMalloc(x) dMalloc_r(x, __FILE__, __LINE__)
#define dStrdup(x) dStrdup_r(x, __FILE__, __LINE__)

extern char* dStrdup_r(const char *src, const char*, dsize_t);

extern void  setBreakAlloc(dsize_t);
extern void  setMinimumAllocUnit(U32);
extern void* dMalloc_r(dsize_t in_size, const char*, const dsize_t);
extern void  dFree(void* in_pFree);
extern void* dRealloc(void* in_pResize, dsize_t in_size);
extern void* dRealMalloc(dsize_t);
extern void  dRealFree(void*);

extern void* dMemcpy(void *dst, const void *src, dsize_t size);
extern void* dMemmove(void *dst, const void *src, dsize_t size);
extern void* dMemset(void *dst, int c, dsize_t size);
extern int   dMemcmp(const void *ptr1, const void *ptr2, dsize_t size);

//------------------------------------------------------------------------------
// Graphics functions

// Charsets for fonts

// [tom, 7/27/2005] These are intended to map to their Win32 equivalents. This
// enumeration may require changes to accommodate other platforms.
enum FontCharset
{
    TGE_ANSI_CHARSET = 0,
    TGE_SYMBOL_CHARSET,
    TGE_SHIFTJIS_CHARSET,
    TGE_HANGEUL_CHARSET,
    TGE_HANGUL_CHARSET,
    TGE_GB2312_CHARSET,
    TGE_CHINESEBIG5_CHARSET,
    TGE_OEM_CHARSET,
    TGE_JOHAB_CHARSET,
    TGE_HEBREW_CHARSET,
    TGE_ARABIC_CHARSET,
    TGE_GREEK_CHARSET,
    TGE_TURKISH_CHARSET,
    TGE_VIETNAMESE_CHARSET,
    TGE_THAI_CHARSET,
    TGE_EASTEUROPE_CHARSET,
    TGE_RUSSIAN_CHARSET,
    TGE_MAC_CHARSET,
    TGE_BALTIC_CHARSET
};

#ifdef TGE_CHINESE
class GOldFont;
extern GOldFont *createFont(const char *name, dsize_t size, U32 charset = TGE_ANSI_CHARSET);
#endif
const char *getCharSetName(const U32 charSet);

//------------------------------------------------------------------------------
// FileIO functions
typedef void* FILE_HANDLE;
enum DFILE_STATUS
{
   DFILE_OK = 1
};

extern bool dFileDelete(const char *name);
extern bool dFileTouch(const char *name);

extern FILE_HANDLE dOpenFileRead(const char *name, DFILE_STATUS &error);
extern FILE_HANDLE dOpenFileReadWrite(const char *name, bool append, DFILE_STATUS &error);
extern int dFileRead(FILE_HANDLE handle, U32 bytes, char *dst, DFILE_STATUS &error);
extern int dFileWrite(FILE_HANDLE handle, U32 bytes, const char *dst, DFILE_STATUS &error);
extern void dFileClose(FILE_HANDLE handle);


//------------------------------------------------------------------------------
// Math
struct Math
{
   static void init(U32 properties = 0);   // 0 == detect available hardware
};


//------------------------------------------------------------------------------
// Networking
struct NetAddress;

typedef S32 NetSocket;
const NetSocket InvalidSocket = -1;

struct Net
{
   enum Error
   {
#ifdef TGE_RPG
		NetError		= -1,
		IOFailed		= NetError,	//IO操作状态
      NoError		= 0,
		OK				= NoError,
		IOOK			= NoError,	//IO操作状态
		IOInvalid,					//IO操作状态
		IODisconnected,
      WrongProtocolType,
      InvalidPacketProtocol,
      WouldBlock,
      NotASocket,
		TimeOut,
      UnknownError,

#else 
      NoError,
      WrongProtocolType,
      InvalidPacketProtocol,
      WouldBlock,
      NotASocket,
      UnknownError,
#endif
   };


   enum Protocol
   {
      UDPProtocol,
      IPXProtocol,
      TCPProtocol
   };


#ifdef TGE_RPG
	//////////////////////////////////////////////////////////////////////////////////////////
	//以下常量来自于 winsock.h

	#define N_IOCPARM_MASK    0x7f
	#define N_IOC_VOID        0x20000000 
	#define N_IOC_OUT         0x40000000
	#define N_IOC_IN          0x80000000
	#define N__IO(x,y)        ( N_IOC_VOID|((x)<<8)|(y) )
	#define N__IOR(x,y,t)     ( N_IOC_OUT|(((SL32)sizeof(t)&N_IOCPARM_MASK)<<16)|((x)<<8)|(y) )
	#define N__IOW(x,y,t)     ( N_IOC_IN|(((SL32)sizeof(t)&N_IOCPARM_MASK)<<16)|((x)<<8)|(y) )

	enum NetConstants
	{
		N_FIONREAD			= N__IOR('f', 127, UL32),
		N_FIONBIO			= N__IOW('f', 126, UL32),
		N_FIOASYNC			= N__IOW('f', 125, UL32),

		N_SO_DEBUG        =	0x0001,
		N_SO_ACCEPTCONN   =	0x0002,
		N_SO_REUSEADDR    =	0x0004,
		N_SO_KEEPALIVE    =	0x0008,
		N_SO_DONTROUTE    =	0x0010,
		N_SO_BROADCAST    =	0x0020,
		N_SO_USELOOPBACK  =	0x0040,
		N_SO_LINGER       =	0x0080,
		N_SO_OOBINLINE    =	0x0100,
		N_SO_DONTLINGER   = (U32)(~N_SO_LINGER),

		N_SO_SNDBUF       =	0x1001,
		N_SO_RCVBUF       =	0x1002,
		N_SO_SNDLOWAT     =	0x1003,
		N_SO_RCVLOWAT     =	0x1004,
		N_SO_SNDTIMEO     =	0x1005,
		N_SO_RCVTIMEO     =	0x1006,
		N_SO_ERROR        =	0x1007,
		N_SO_TYPE         =	0x1008,

		N_IPPROTO_IP      = 0,
		N_IPPROTO_ICMP    = 1,
		N_IPPROTO_IGMP    = 2,
		N_IPPROTO_GGP     = 3,
		N_IPPROTO_TCP     = 6,
		N_IPPROTO_PUP     = 12,
		N_IPPROTO_UDP     = 17,
		N_IPPROTO_IDP     = 22,
		N_IPPROTO_ND      = 77,
		N_SOL_SOCKET		 = 0xffff,

		N_SOMAXCONN		 = 5,

		N_TCP_NODELAY    = 0x0001,
		N_TCP_BSDURGENT  = 0x7000,

		N_MSG_OOB        = 0x1,
		N_MSG_PEEK       = 0x2,
		N_MSG_DONTROUTE  = 0x4,
		N_MSG_MAXIOVLEN  = 16,
		N_MSG_PARTIAL    = 0x8000,

	};
#endif



   static bool init();
   static void shutdown();

   // Unreliable net functions (UDP)
   // sendto is for sending data
   // all incoming data comes in on packetReceiveEventType
   // App can only open one unreliable port... who needs more? ;)
   static bool openPort(S32 connectPort);
   static void closePort();
   static Error sendto(const NetAddress *address, const U8 *buffer, S32 bufferSize);

   // Reliable net functions (TCP)
   // all incoming messages come in on the Connected* events
   static NetSocket openListenPort(U16 port);
   static NetSocket openConnectTo(const char *stringAddress); // does the DNS resolve etc.
   static void closeConnectTo(NetSocket socket);
   static Error sendtoSocket(NetSocket socket, const U8 *buffer, S32 bufferSize);

   static void process();

   static bool compareAddresses(const NetAddress *a1, const NetAddress *a2);
   static bool stringToAddress(const char *addressString, NetAddress *address);
   static void addressToString(const NetAddress *address, char addressString[256]);

   // lower level socked based network functions
   static NetSocket openSocket();
   static Error closeSocket(NetSocket socket);

   static Error connect(NetSocket socket, const NetAddress *address);
   static Error listen(NetSocket socket, S32 maxConcurrentListens);
   static NetSocket accept(NetSocket acceptSocket, NetAddress *remoteAddress);

   static Error bind(NetSocket socket, U16    port);

	static Error setBufferSize(NetSocket socket, S32 bufferSize);
   static Error setBroadcast(NetSocket socket, bool broadcastEnable);
   static Error setBlocking(NetSocket socket, bool blockingIO);

   static Error send(NetSocket socket, const U8 *buffer, S32 bufferSize, S32 *bytesSended=0/*TGE_RPG新增*/);
   static Error recv(NetSocket socket, U8 *buffer, S32 bufferSize, S32 *bytesRead,INT nFlag=0/*TGE_RPG新增*/);

#ifdef TGE_RPG
   static Error bind(NetSocket socket,NetAddress* pSockAddr);
   static Error checkAccept(NetSocket socket, S32 tv_sec=0,S32 tv_usec=0);
   static Error checkRecv(NetSocket socket, S32 tv_sec=0,S32 tv_usec=0);
   static Error checkSend(NetSocket socket, S32 tv_sec=0,S32 tv_usec=0);
   static Error checkExcept(NetSocket socket, S32 tv_sec=0,S32 tv_usec=0);
   static Error setOption(NetSocket socket,S32 nOption,S32 nValue, S32 nLevel=N_SOL_SOCKET);
   static Error getOption(NetSocket socket,S32 nOption,S32& nValue,S32 nLevel=N_SOL_SOCKET);
   static Error ioCtrl(NetSocket socket,S32 nCmd,U32* pArg);
	static Error getLastError();
#endif

};

#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -