/*
* Miscellaneous string-handling related utility-functions
* Programmed and designed by Matti 'ccr' Hamalainen
* (C) Copyright 2002-2004 Tecnic Software productions (TNSP)
*
* Please read file 'COPYING' for information on license and distribution.
*/
#ifndef _TH_STRING_H
#define _TH_STRING_H
#include "th_util.h"
#include <stdlib.h>
#include <ctype.h>
#define SET_HASH_MAXINDEX (256)
/*
* Macros
*/
#define th_isalnum(c) (isalnum((int)(unsigned char) c)||(c=='ä')||(c=='Ä')||(c=='ö')||(c=='Ö')||(c=='å')||(c=='Å'))
#define th_isalpha(c) (isalpha((int)(unsigned char) c)||(c=='ä')||(c=='Ä')||(c=='ö')||(c=='Ö')||(c=='å')||(c=='Å'))
#define th_isascii(c) isascii((int)(unsigned char) c)
#define th_isblank(c) isblank((int)(unsigned char) c)
#define th_iscntrl(c) iscntrl((int)(unsigned char) c)
#define th_isdigit(c) isdigit((int)(unsigned char) c)
#define th_isgraph(c) isgraph((int)(unsigned char) c)
#define th_islower(c) (islower((int)(unsigned char) c)||(c=='ä')||(c=='ö')||(c=='å'))
#define th_isprint(c) isprint((int)(unsigned char) c)
#define th_ispunct(c) ispunct((int)(unsigned char) c)
#define th_isspace(c) isspace((int)(unsigned char) c)
#define th_isupper(c) (isupper((int)(unsigned char) c)||(c=='Ä')||(c=='Ö')||(c=='Å'))
#define th_isxdigit(c) isxdigit((int)(unsigned char) c)
#define th_iscrlf(c) ((c=='\r')||(c=='\n'))
#define th_isspecial(q) (((q >= 0x5b) && (q <= 0x60)) || ((q >= 0x7b) && (q <= 0x7d)))
/*
* Typedefs and structures
*/
typedef struct tstrnode {
char *pcStr; /* String */
t_ulint nUsed; /* Times this string has been referenced */
void *pData; /* Extra data */
struct tstrnode *pPrev, *pNext;
} t_str_node;
typedef t_str_node *t_str_hash[SET_HASH_MAXINDEX];
typedef struct tstrindex {
t_str_node **ppIndex;
t_ulint n;
} t_str_index;
/*
* Normal NUL-terminated string functions
*/
int th_strcpy(char **, const char *);
int th_strcat(char **, const char *);
char *th_strdup(const char *);
char *th_findnext(char *, size_t *);
char *th_findsep(char *, size_t *, char);
char *th_findseporspace(char *, size_t *, char);
BOOL th_strmatch(char *, char *);
BOOL th_strcasematch(char *, char *);
int th_tolower(int);
int th_toupper(int);
int th_strcasecmp(char *, char *);
void th_strip_ctrlchars(char *);
/*
* Handling of string-lists and hashes
*/
t_str_node * th_strnode_new(char *, t_ulint, void *);
void th_strnode_free(t_str_node *);
void th_strlist_free(t_str_node *);
void th_strlist_insert(t_str_node **, t_str_node *);
int th_strhash_insert(t_str_node **, t_str_node *, BOOL);
void th_strhash_free(t_str_node **);
void th_strhash_change_pdata(t_str_hash, void *, void *);
t_str_node * th_strhash_search(t_str_node **, char *, BOOL);
t_str_index * th_strhash_makeindex(t_str_node **);
t_str_index * th_strlist_makeindex(t_str_node *);
void th_strindex_free(t_str_index *);
void th_strindex_sort_nused(t_str_index *);
void th_strindex_sort_alpha(t_str_index *);
#endif /* _TH_STRING_H */
syntax highlighted by Code2HTML, v. 0.9.1