#include <windows.h>
#include <windowsx.h>
#include <ctype.h>
#include <string.h>
#include <stdarg.h>

/*  Cross Platform specifics  */
#ifndef PBINT          
	#ifndef WIN32
		#define PBINT int
	#else
		#define PBINT short
	#endif
#endif

// #define USE_HSTRSTR2

typedef char *HPSTR ;
typedef const char *HPCSTR ;

#define MAX_STR_LEN 150000

enum enumFuncType
{
	Func_strstr,
	Func_strpbrk,
	Func_strrchr,
	Func_strcmp,
	Func_stricmp,
	Func_strncmp,
	Func_strnicmp,
	Func_strspn,
	Func_strcspn
} ;

typedef enum enumFuncType FuncType ;

PBINT __stdcall LoadCPHSTR ( PBINT iDummy ) ;
HPSTR __stdcall Hstrupr(HPSTR hpStr) ;
HPSTR __stdcall Hstrlwr(HPSTR hpStr) ;
long __stdcall 	Hstrlen(HPSTR hpStr) ;
HPSTR __stdcall Hstrcpy(HPSTR hpStr1, HPSTR hpStr2) ;
HPSTR __stdcall Hstrncpy(HPSTR hpStr1, HPSTR hpStr2, long lStrCpy) ;
void __stdcall 	Hmemset(void *hpSrc, char ch, long lLen) ;
long __stdcall 	Hstrfunc(HPSTR hpSrc, HPSTR hpSearch, FuncType ftFunc) ;
HPSTR __stdcall Hstrstr(HPSTR hpSrc, LPSTR lpSearch) ;
long __stdcall 	Hstrstrn(HPSTR hpSrc, LPSTR lpSearch) ;
HPSTR __stdcall Hstrchr(HPSTR hpStr, char ch) ;
long __stdcall 	Hstrrchrn(HPSTR hpSrc, char ch) ;
HPSTR __stdcall Hstrrchr(HPSTR hpStr, char ch) ;
long __stdcall 	Hstrpbrkn(HPSTR hpSrc, LPSTR lpSearch) ;
HPSTR __stdcall Hstrpbrk(HPSTR hpSrc, LPSTR lpSearch) ;

#ifdef USE_HSTRSTR2
	PBINT __stdcall Hstrfunc2(HPSTR hpStr1, HPSTR hpStr2, FuncType ftFunc, long nSize) ;
	long __stdcall 	Hstrspn(HPCSTR hpSrc, LPCSTR lpSearch) ;
	long __stdcall 	Hstrcspn(HPCSTR hpSrc, LPCSTR lpSearch) ;
	PBINT __stdcall Hstrcmp(HPSTR hpStr1, HPSTR hpStr2) ;
	PBINT __stdcall Hstricmp(HPSTR hpStr1, HPSTR hpStr2) ;
	PBINT __stdcall Hstrncmp(HPSTR hpStr1, HPSTR hpStr2, long nSize) ;
	PBINT __stdcall Hstrnicmp(HPSTR hpStr1, HPSTR hpStr2, long nSize) ;
#endif
