view th_string.h @ 432:1b3472ba7b23

Bump copyrights.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 01 Jan 2017 01:59:49 +0200
parents 1d8ae82304ec
children 6245c825268b
line wrap: on
line source

/*
 * Miscellaneous string-handling related utility-functions
 * Programmed and designed by Matti 'ccr' Hamalainen
 * (C) Copyright 2002-2017 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>
#include <stdarg.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Macros
 */
#define th_isalnum(c)   isalnum((int)(unsigned char) c)
#define th_isalpha(c)   isalpha((int)(unsigned char) 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)
#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)
#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)))

#define th_tolower(c)   tolower((int)(unsigned char) c)
#define th_toupper(c)   toupper((int)(unsigned char) c)


enum
{
    TH_TRIM_START    = 1,
    TH_TRIM_END      = 2,
    TH_TRIM_BOTH     = 3
};


enum
{
    TH_PF_NONE       = 0x0000,
    TH_PF_ALT        = 0x0001,
    TH_PF_SIGN       = 0x0002,
    TH_PF_SPACE      = 0x0004,
    TH_PF_GROUP      = 0x0008,

    TH_PF_ZERO       = 0x0100,
    TH_PF_LEFT       = 0x0200,

    TH_PF_LONG       = 0x1000,
    TH_PF_LONGLONG   = 0x2000,
    TH_PF_POINTER    = 0x4000,
    TH_PF_UPCASE     = 0x8000,
};


typedef struct
{
    char *buf;
    size_t size, pos;
    int ipos;
    void *data;
} th_vprintf_ctx;


typedef int (*th_vprintf_putch)(th_vprintf_ctx *ctx, const char ch);


/* Normal NUL-terminated string functions
 */
char    *th_strdup(const char *src);
char    *th_strndup(const char *src, const size_t n);
char    *th_strdup_trim(const char *, const int flags);
char    *th_strndup_trim(const char *, const size_t n, const int flags);

int     th_strcasecmp(const char *haystack, const char *needle);
int     th_strncasecmp(const char *haystack, const char *needle, size_t n);
char    *th_strrcasecmp(char *haystack, const char *needle);
void    th_strip_ctrlchars(char *str);

int     th_vprintf_do(th_vprintf_ctx *ctx, th_vprintf_putch vputch, const char *fmt, va_list ap);
int     th_vsnprintf(char *buf, size_t size, const char *fmt, va_list ap);
int     th_snprintf(char *buf, size_t size, const char *fmt, ...);
int     th_vfprintf(FILE *fh, const char *fmt, va_list ap);
int     th_fprintf(FILE *fh, const char *fmt, ...);


char    *th_strdup_vprintf(const char *fmt, va_list ap);
char    *th_strdup_printf(const char *fmt, ...);

void    th_pstr_vprintf(char **buf, const char *fmt, va_list ap);
void    th_pstr_printf(char **buf, const char *fmt, ...);

int     th_pstrcpy(char **pdst, const char *src);
int     th_pstrcat(char **pdst, const char *src);


/* Parsing, matching
 */
const char    *th_findnext(const char *, size_t *);
const char    *th_findsep(const char *, size_t *, char);
const char    *th_findseporspace(const char *, size_t *, char);

BOOL    th_strmatch(const char *haystack, const char *pattern);
BOOL    th_strcasematch(const char *haystack, const char *pattern);

int     th_get_hex_triplet(const char *str);
BOOL    th_get_boolean(const char *str, BOOL *value);

void    th_print_wrap(FILE *fh, const char *str, int spad, int rpad, int width);


#ifdef __cplusplus
}
#endif
#endif // TH_STRING_H