head 1.22; access; symbols STR_0_9_5:1.21 STR_0_9_4:1.20 STR_0_9_3:1.20 STR_0_9_2:1.20 STR_0_9_1:1.16 STR_0_9_0:1.16 str_init:1.1.1.1 str:1.1.1; locks; strict; comment @ * @; 1.22 date 2001.09.10.09.55.13; author thl; state dead; branches; next 1.21; 1.21 date 2001.08.16.13.21.22; author rse; state Exp; branches; next 1.20; 1.20 date 2000.01.20.20.42.10; author rse; state Exp; branches; next 1.19; 1.19 date 2000.01.20.18.56.18; author rse; state Exp; branches; next 1.18; 1.18 date 2000.01.17.15.51.01; author rse; state Exp; branches; next 1.17; 1.17 date 2000.01.17.13.45.08; author rse; state Exp; branches; next 1.16; 1.16 date 2000.01.01.13.05.17; author rse; state Exp; branches; next 1.15; 1.15 date 99.12.27.15.53.31; author rse; state Exp; branches; next 1.14; 1.14 date 99.12.27.13.43.05; author rse; state Exp; branches; next 1.13; 1.13 date 99.12.26.15.37.34; author rse; state Exp; branches; next 1.12; 1.12 date 99.12.26.15.31.24; author rse; state Exp; branches; next 1.11; 1.11 date 99.12.26.14.45.12; author rse; state Exp; branches; next 1.10; 1.10 date 99.12.25.20.57.22; author rse; state Exp; branches; next 1.9; 1.9 date 99.12.25.18.23.02; author rse; state Exp; branches; next 1.8; 1.8 date 99.11.23.15.39.30; author rse; state Exp; branches; next 1.7; 1.7 date 99.11.23.15.04.43; author rse; state Exp; branches; next 1.6; 1.6 date 99.11.23.14.42.02; author rse; state Exp; branches; next 1.5; 1.5 date 99.11.23.14.27.43; author rse; state Exp; branches; next 1.4; 1.4 date 99.11.23.08.58.07; author rse; state Exp; branches; next 1.3; 1.3 date 99.11.23.08.57.35; author rse; state Exp; branches; next 1.2; 1.2 date 99.11.22.18.02.51; author rse; state Exp; branches; next 1.1; 1.1 date 99.11.22.17.29.12; author rse; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 99.11.22.17.29.12; author rse; state Exp; branches; next ; desc @@ 1.22 log @add library version to public API @ text @/* ** Str - String Library ** Copyright (c) 1999-2001 Ralf S. Engelschall ** ** This file is part of Str, a string handling and manipulation ** library which can be found at http://www.engelschall.com/sw/str/. ** ** Permission to use, copy, modify, and distribute this software for ** any purpose with or without fee is hereby granted, provided that ** the above copyright notice and this permission notice appear in all ** copies. ** ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. ** ** str.h: public API header */ #ifndef _STR_H_ #define _STR_H_ /* C++ support */ #ifdef __cplusplus #define BEGIN_DECLARATION extern "C" { #define END_DECLARATION } #else #define BEGIN_DECLARATION /*nop*/ #define END_DECLARATION /*nop*/ #endif #include #include #include #include /* true and false boolean values and corresponding type */ #undef TRUE #undef FALSE #undef BOOL #ifdef __cplusplus #define BOOL bool #define TRUE true #define FALSE false #else #define BOOL char #define TRUE ((BOOL)(1 == 1)) #define FALSE ((BOOL)(0 == 1)) #endif /* null values for pointers and characters */ #ifndef NULL #define NULL ((void *)0) #endif #ifndef NUL #define NUL '\0' #endif BEGIN_DECLARATION typedef unsigned int str_size_t; #define STR_RIGHT (1 << 0) /* operate from right end */ #define STR_COMPLEMENT (1 << 1) /* use complement */ #define STR_NOCASE (1 << 2) /* no case sensitive operation */ #define STR_STRIPQUOTES (1 << 3) /* strip quote characters */ #define STR_BACKSLASHESC (1 << 4) /* enable ANSI C style (backslashed) escape sequences */ #define STR_SKIPDELIMS (1 << 5) /* skip trailing delimiters before return */ #define STR_TRIGRAPHS (1 << 6) /* enable ANSI C trigraph processing (implies STR_BACKSLASHESCAPE) */ #define STR_HASH_DJBX33 (1 << 0) /* Daniel J. Bernstein: Times 33 */ #define STR_HASH_BJDDJ (1 << 1) /* Bob Jenkins: Dr. Dobbs Journal */ #define STR_HASH_MACRC32 (1 << 2) /* Mark Adler: Cyclic Redudancy Check 32 */ #define STR_BASE64_ENCODE (1 << 0) /* encode: string -> base64 */ #define STR_BASE64_DECODE (1 << 1) /* decode: base64 -> string */ #define STR_BASE64_STRICT (1 << 2) /* strict encoding with no more than 72 chars/line */ extern str_size_t str_len (const char *); extern char *str_copy (char *, const char *, str_size_t); extern char *str_dup (const char *, str_size_t); extern char *str_concat (char *, ...); extern char *str_splice (char *, str_size_t, str_size_t, char *, str_size_t); extern char *str_token (char **, const char *, const char *, const char *, int); extern int str_parse (const char *, const char *, ...); extern int str_compare (const char *, const char *, str_size_t, int); extern char *str_span (const char *, str_size_t, const char *, int); extern char *str_locate (const char *, str_size_t, const char *); extern int str_format (char *, str_size_t, const char *, ...); extern unsigned long str_hash (const char *, str_size_t, int); extern int str_base64 (char *, str_size_t, unsigned char *, str_size_t, int); extern char *str_concat_va (char *, va_list); extern int str_parse_va (const char *, const char *, va_list); extern int str_format_va (char *, str_size_t, const char *, va_list); END_DECLARATION #endif /* _STR_H_ */ @ 1.21 log @Adjust copyright for year 2001. @ text @@ 1.20 log @*** empty log message *** @ text @d3 1 a3 1 ** Copyright (c) 1999-2000 Ralf S. Engelschall @ 1.19 log @*** empty log message *** @ text @d102 4 @ 1.18 log @*** empty log message *** @ text @d84 4 d100 1 @ 1.17 log @*** empty log message *** @ text @d95 1 a95 1 extern unsigned long str_hash (char *, str_size_t, int); @ 1.16 log @*** empty log message *** @ text @d80 16 a95 11 extern str_size_t str_len (const char *); extern char *str_copy (char *, const char *, str_size_t); extern char *str_dup (const char *, str_size_t); extern char *str_concat (char *, ...); extern char *str_splice (char *, str_size_t, str_size_t, char *, str_size_t); extern char *str_token (char **, const char *, const char *, const char *, int); extern int str_parse (const char *, const char *, ...); extern int str_compare (const char *, const char *, str_size_t, int); extern char *str_span (const char *, str_size_t, const char *, int); extern char *str_locate (const char *, str_size_t, const char *); extern int str_format (char *, str_size_t, const char *, ...); @ 1.15 log @*** empty log message *** @ text @d3 1 a3 1 ** Copyright (c) 1999 Ralf S. Engelschall @ 1.14 log @. @ text @d72 7 a78 32 typedef struct str_format_st str_format_t; struct str_format_st { char *curpos; char *endpos; union { int i; long l; double d; void *p; } data[6]; int (*flush)(struct str_format_st *); char *(*format)( struct str_format_st *, char *, char *, int *, char *, int, char *, int, va_list ); }; /* sizes */ #define STR_FULL STR_SIZE_MAX /* modes */ enum { STR_RIGHT = (1 << 0), /* operate from right end */ STR_COMPLEMENT = (1 << 1), /* use complement */ STR_NOCASE = (1 << 2) /* no case sensitive operation */ }; enum { STR_STRIPQUOTES = (1<<0), /* strip quote characters */ STR_BACKSLASHESC = (1<<1), /* enable ANSI C style (backslashed) escape sequences */ STR_SKIPDELIMS = (1<<2), /* skip trailing delimiters before return */ STR_TRIGRAPHS = (1<<3) /* enable ANSI C trigraph processing (implies STR_BACKSLASHESCAPE) */ }; d90 1 a90 5 extern int str_vformat (str_format_t *, const char *, va_list); extern int str_format (str_format_t *, const char *, ...); extern int str_nformat (const char *, ...); extern int str_snprintf (char *, str_size_t, const char *, ...); extern int str_vsnprintf (char *, str_size_t, const char *, va_list); @ 1.13 log @*** empty log message *** @ text @d98 7 d110 1 @ 1.12 log @*** empty log message *** @ text @a92 1 STR_DEF = 0, /* default mode */ @ 1.11 log @*** empty log message *** @ text @a42 1 #include a70 1 #define STR_SIZE_MAX UINT_MAX d72 1 d74 5 a78 4 char *curpos; char *endpos; union { int i; long l; double d; void *p; d80 6 a85 4 int (*flush)(struct str_format_st *); char *(*format)(struct str_format_st *, char *, char *, int *, char *, int, char *, int, va_list); a86 2 typedef struct str_format_st str_format_t; @ 1.10 log @*** empty log message *** @ text @d106 2 a107 2 extern char *str_span (const char *, str_size_t n, const char *, int); extern char *str_locate (const char *, const char *); @ 1.9 log @*** empty log message *** @ text @a98 1 /* str_handle.c */ a103 2 /* str_parse.c */ a104 2 /* str_compare.c */ a105 2 /* str_search.c */ a107 2 /* str_format.c */ @ 1.8 log @*** empty log message *** @ text @d1 3 a3 2 /* ** str.h -- String Library API Header d5 2 a6 2 ** ==================================================================== ** Copyright (c) 1999 Ralf S. Engelschall. All rights reserved. d8 4 a11 3 ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions ** are met: d13 12 a24 2 ** 1. Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. d26 1 a26 18 ** 2. Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** ** THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY ** EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RALF S. ENGELSCHALL OR ** ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ** STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED ** OF THE POSSIBILITY OF SUCH DAMAGE. ** ==================================================================== d114 1 a114 1 extern char *str_find (const char *, const char *); @ 1.7 log @*** empty log message *** @ text @d82 3 a84 1 void *data[4]; @ 1.6 log @*** empty log message *** @ text @d86 1 a86 1 char *, int, int, va_list); @ 1.5 log @*** empty log message *** @ text @d80 7 a86 7 char *curpos; char *endpos; void *data[4]; int (*flush)(struct str_format_st *); int (*format)(struct str_format_st *, char, va_list, char *, char **, int *, char *, char *); @ 1.4 log @*** empty log message *** @ text @d79 11 a89 6 typedef struct { char *curpos; char *endpos; void *data1; void *data2; } str_format_t; d120 2 a121 2 extern int str_format (int (*)(str_format_t *), str_format_t *, const char *, ...); extern int str_vformat (int (*)(str_format_t *), str_format_t *, const char *, va_list); @ 1.3 log @*** empty log message *** @ text @d104 2 a105 2 /* str_match.c */ extern int str_match (const char *, const char *, ...); @ 1.2 log @*** empty log message *** @ text @d100 1 a100 1 extern char *str_dup (const char *); @ 1.1 log @Initial revision @ text @d82 2 a83 1 void *data; d117 1 a117 19 /* str_wrapper.c */ extern char *str_strcat (char *, const char *); extern char *str_strncat (char *, const char *, str_size_t); extern char *str_strchr (const char *, int); extern char *str_strrchr (const char *, int); extern int str_strcmp (const char *, const char *); extern int str_strncmp (const char *, const char *, str_size_t); extern int str_strcasecmp (const char *, const char *); extern int str_strncasecmp(const char *, const char *, str_size_t); extern char *str_strcpy (char *, const char *); extern char *str_strncpy (char *, const char *, str_size_t); extern str_size_t str_strlen (const char *); extern char *str_strpbrk (const char *, const char *); extern char *str_strsep (char **, const char *); extern str_size_t str_strspn (const char *, const char *); extern str_size_t str_strcspn (const char *, const char *); extern char *str_strstr (const char *, const char *); extern char *str_strtok (char *, const char *); a119 29 #ifdef STRING2STR #define strcat str_strcat #define strncat str_strncat #define strchr str_strchr #define strrchr str_strrchr #define strcmp str_strcmp #define strncmp str_strncmp #define strcasecmp str_strcasecmp #define strncasecmp str_strncasecmp #define strcpy str_strcpy #define strncpy str_strncpy #define strlen str_strlen #define strpbrk str_strpbrk #define strsep str_strsep #define strspn str_strspn #define strcspn str_strcspn #define strstr str_strstr #define strtok str_strtok #endif #define str_EQ(s1,s2) (str_strcmp(s1,s2) == 0) #define str_NE(s1,s2) (str_strcmp(s1,s2) != 0) #define str_EQn(s1,s2,n) (str_strncmp(s1,s2,n) == 0) #define str_NEn(s1,s2,n) (str_strncmp(s1,s2,n) != 0) #define str_EQc(s1,s2) (str_strcasecmp(s1,s2) == 0) #define str_NEc(s1,s2) (str_strcasecmp(s1,s2) != 0) #define str_EQnc(s1,s2,n) (str_strncasecmp(s1,s2,n) == 0) #define str_NEnc(s1,s2,n) (str_strncasecmp(s1,s2,n) != 0) @ 1.1.1.1 log @ @ text @@