// stringutil.h -- string utilities
//
// $Id: stringutil.h,v 1.10 2000/09/20 22:22:47 sdennis Exp $
//
// MUX 2.0
// Portions are derived from MUX 1.6. Portions are original work.
//
// Copyright (C) 1998 through 2000 Solid Vertical Domains, Ltd. All
// rights not explicitly given are reserved. Permission is given to
// use this code for building and hosting text-based game servers.
// Permission is given to use this code for other non-commercial
// purposes. To use this code for commercial purposes other than
// building/hosting text-based game servers, contact the author at
// Stephen Dennis <sdennis@svdltd.com> for another license.
//
#ifndef STRINGUTIL_H
#define STRINGUTIL_H
extern char Tiny_IsASCII[256];
extern char Tiny_IsPrint[256];
extern char Tiny_IsDigit[256];
extern char Tiny_IsAlpha[256];
extern char Tiny_IsAlphaNumeric[256];
extern char Tiny_IsUpper[256];
extern char Tiny_IsLower[256];
extern char Tiny_IsSpace[256];
extern char Tiny_IsAttributeNameCharacter[256];
extern char Tiny_IsObjectNameCharacter[256];
extern char Tiny_IsPlayerNameCharacter[256];
extern char Tiny_IsSecureCharacter[256];
extern char Tiny_IsEscapeCharacter[256];
extern unsigned char Tiny_ToUpper[256];
extern unsigned char Tiny_ToLower[256];
int ANSI_lex(int nString, const char *pString, int *nLengthToken0, int *nLengthToken1);
#define TOKEN_TEXT_ANSI 0 // Text sequence + optional ANSI sequence.
#define TOKEN_ANSI 1 // ANSI sequence.
typedef struct
{
char *pString;
char aControl[256];
} TINY_STRTOK_STATE;
void Tiny_StrTokString(TINY_STRTOK_STATE *tts, char *pString);
void Tiny_StrTokControl(TINY_STRTOK_STATE *tts, char *pControl);
char *Tiny_StrTokParseLEN(TINY_STRTOK_STATE *tts, int *pnLen);
char *Tiny_StrTokParse(TINY_STRTOK_STATE *tts);
char *RemoveSetOfCharacters(char *pString, char *pSetToRemove);
int Tiny_ltoa(long val, char *buf);
char *Tiny_ltoa_t(long val);
void safe_ltoa(long val, char *buff, char **bufc, int size);
int Tiny_i64toa(INT64 val, char *buf);
char *Tiny_i64toa_t(INT64 val);
long Tiny_atol(const char *pString);
INT64 Tiny_atoi64(const char *pString);
#pragma pack(1)
typedef struct
{
char bNormal;
char bBlink;
char bHighlite;
char bInverse;
char bUnder;
char iForeground;
char iBackground;
} ANSI_ColorState;
#pragma pack()
struct ANSI_Context
{
ANSI_ColorState acsCurrent;
ANSI_ColorState acsPrevious;
ANSI_ColorState acsFinal;
const char *pString;
int nString;
BOOL bNoBleed;
BOOL bSawNormal;
};
void ANSI_String_Init(struct ANSI_Context *pContext, const char *szString, BOOL bNoBleed);
void ANSI_String_Skip(struct ANSI_Context *pContext, int maxVisualWidth, int *pnVisualWidth);
int ANSI_String_Copy(struct ANSI_Context *pContext, int nField, char *pField0, int maxVisualWidth, int *pnVisualWidth);
int ANSI_TruncateToField(const char *szString, int nField, char *pField, int maxVisual, int *nVisualWidth, BOOL bNoBleed);
extern char *strip_ansi(const char *szString, unsigned int *pnString = 0);
extern char *normal_to_white(const char *);
extern char * FDECL(munge_space, (char *));
extern char * FDECL(trim_spaces, (char *));
extern char * FDECL(grabto, (char **, char));
extern int FDECL(string_compare, (const char *, const char *));
extern int FDECL(string_prefix, (const char *, const char *));
extern const char * FDECL(string_match, (const char * ,const char *));
extern char * FDECL(dollar_to_space, (const char *));
extern char * FDECL(replace_string, (const char *, const char *,
const char *));
extern char * FDECL(replace_string_inplace, (const char *, const char *,
char *));
extern int FDECL(prefix_match, (const char *, const char *));
extern int FDECL(minmatch, (char *, char *, int));
extern char *StringCloneLen(const char *str, unsigned int nStr);
extern char *StringClone(const char *str);
extern char *BufferCloneLen(const char *pBuffer, unsigned int nBuffer);
void safe_copy_str(const char *src, char *buff, char **bufp, int max);
int safe_copy_buf(const char *src, int nLen, char *buff, char **bufp, int nSizeOfBuffer);
extern int FDECL(matches_exit_from_list, (char *, char *));
extern char * FDECL(translate_string, (const char *, int));
#ifndef WIN32
extern int _stricmp(const char *a, const char *b);
extern int _strnicmp(const char *a, const char *b, int n);
extern void _strlwr(char *tp);
extern void _strupr(char *a);
#endif // WIN32
typedef struct tag_dtb
{
int bFirst;
char *buff;
char **bufc;
int nBufferAvailable;
} DTB;
void DbrefToBuffer_Init(DTB *p, char *arg_buff, char **arg_bufc);
int DbrefToBuffer_Add(DTB *pContext, int i);
void DbrefToBuffer_Final(DTB *pContext);
int DCL_CDECL Tiny_vsnprintf(char *buff, int count, const char *fmt, va_list va);
#endif // STRINGUTIL_H