1 /* $Id: util_str.h 2417 2007-10-09 22:44:33Z kuhlmann $ */
2 
3 #ifndef CLIMM_UTIL_STR_H
4 #define CLIMM_UTIL_STR_H
5 
6 typedef struct str_s str_s;
7 typedef struct strc_s strc_s;
8 typedef struct str_s *str_t;
9 typedef const struct str_s *strc_t;
10 typedef const struct strc_s *strx_t;
11 
12 struct str_s
13 {
14     char  *txt;
15     UDWORD len;
16     UDWORD max;
17 };
18 
19 struct strc_s
20 {
21     const char *txt;
22     UDWORD len;
23     UDWORD max;
24 };
25 
26 str_t       s_init    (str_t str, const char *init, size_t add);
27 str_t       s_blow    (str_t str, size_t len);
28 str_t       s_cat     (str_t str, const char *add);
29 str_t       s_catc    (str_t str, char add);
30 str_t       s_catn    (str_t str, const char *add, size_t len);
31 str_t       s_catf    (str_t str, const char *fmt, ...) __attribute__ ((format (__printf__, 2, 3)));
32 str_t       s_insn    (str_t str, size_t pos, const char *ins, size_t len);
33 str_t       s_insc    (str_t str, size_t pos, char ins);
34 str_t       s_delc    (str_t str, size_t pos);
35 str_t       s_deln    (str_t str, size_t pos, size_t len);
36 void        s_done    (str_t str);
37 
38 const char *s_sprintf (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2)));
39 const char *s_ip      (UDWORD ip);
40 const char *s_status  (status_t status, UDWORD nativestatus);
41 const char *s_status_short  (status_t status);
42 const char *s_time    (time_t *stamp);
43 const char *s_strftime (time_t *stamp, const char *fmt, char as_gmt);
44 const char *s_msgtok  (char *);
45 
46 const char *s_dump    (const UBYTE *data, UWORD len);
47 const char *s_dumpnd  (const UBYTE *data, UWORD len);
48 const char *s_ind     (const char *str);
49 UDWORD      s_strlen  (const char *str);
50 UDWORD      s_strnlen (const char *str, UDWORD len);
51 UDWORD      s_offset  (const char *str, UDWORD offset);
52 strc_t      s_split   (const char **str, UBYTE enc, int len);
53 void        s_strrepl (str_t str, const char *olds, const char *news);
54 
55 const char *s_quote       (const char *input);
56 const char *s_cquote      (const char *input, const char *color);
57 const char *s_mquote      (const char *input, const char *color, BOOL allownl);
58 
59 #define s_qquote(i)      s_cquote (i, COLQUOTE)
60 #define s_wordquote(i)   s_mquote (i, COLQUOTE, 0)
61 #define s_msgquote(i)    s_mquote (i, COLQUOTE, 1)
62 
63 #define s_repl(old,new) do { char **_p_p_ = old; const char *_q_q_ = new; \
64                              if (*_p_p_) free (*_p_p_); *_p_p_ = NULL; \
65                              if (_q_q_) *_p_p_ = strdup (_q_q_); } while (0)
66 
67 #define s_free(old)     do { char *_p_p_ = old; if (_p_p_) free (_p_p_); } while (0)
68 #define s_now           s_time (NULL)
69 
70 #endif /* CLIMM_UTIL_STR_H */
71