ttxtbuf.h - ltk - Socket-based GUI for X11 (WIP)
HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
HTML git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
ttxtbuf.h (2393B)
---
1 #ifndef LTK_TXTBUF_H
2 #define LTK_TXTBUF_H
3
4 #include <stddef.h>
5
6 /*
7 * txtbuf is really just a string data type that is badly named.
8 * The stored text is always nul-terminated.
9 * FIXME: this data type is abused in some places and manually
10 * created so it isn't nul-terminated
11 */
12
13 typedef struct {
14 size_t len, cap;
15 char *text;
16 } txtbuf;
17
18 /*
19 * Create an empty txtbuf.
20 */
21 txtbuf *txtbuf_new(void);
22
23 /*
24 * Create a new txtbuf, initializing it with the nul-terminated
25 * string 'str'. The input string is copied.
26 */
27 txtbuf *txtbuf_new_from_char(const char *str);
28
29 /*
30 * Create a new txtbuf, initializing it with the string 'str'
31 * of length 'len'. The input string is copied.
32 */
33 txtbuf *txtbuf_new_from_char_len(const char *str, size_t len);
34
35 /*
36 * Replace the stored text in 'buf' with the text generated by
37 * 'snprintf' when called with the given format string and args.
38 */
39 void txtbuf_fmt(txtbuf *buf, const char *fmt, ...);
40
41 /*
42 * Replace the stored text in 'buf' with 'text'.
43 */
44 void txtbuf_set_text(txtbuf *buf, const char *text);
45
46 /*
47 * Same as txtbuf_set_text, but with explicit length for 'text'.
48 */
49 void txtbuf_set_textn(txtbuf *buf, const char *text, size_t len);
50
51 /*
52 * Append 'text' to the text stored in 'buf'.
53 */
54 void txtbuf_append(txtbuf *buf, const char *text);
55
56 /*
57 * Same as txtbuf_append, but with explicit length for 'text'.
58 */
59 void txtbuf_appendn(txtbuf *buf, const char *text, size_t len);
60
61 /*
62 * Compare the text of two txtbuf's like 'strcmp'.
63 */
64 int txtbuf_cmp(txtbuf *buf1, txtbuf *buf2);
65
66 /*
67 * Convenience function for calling 'txtbuf_cmp' and checking if the
68 * return value is 0, i.e. the strings are equal.
69 */
70 int txtbuf_eql(txtbuf *buf1, txtbuf *buf2);
71
72 /*
73 * Make sure the txtbuf has space for at least the given size,
74 * plus '\0' at the end.
75 */
76 void txtbuf_resize(txtbuf *buf, size_t sz);
77
78 /*
79 * Destroy a txtbuf.
80 */
81 void txtbuf_destroy(txtbuf *buf);
82
83 /*
84 * Copy txtbuf 'src' to txtbuf 'dst'.
85 */
86 void txtbuf_copy(txtbuf *dst, txtbuf *src);
87
88 /*
89 * Duplicate txtbuf 'src'.
90 */
91 txtbuf *txtbuf_dup(txtbuf *src);
92
93 /*
94 * Get copy of text stored in 'buf'.
95 * The returned text belongs to the caller and needs to be freed.
96 */
97 char *txtbuf_get_textcopy(txtbuf *buf);
98
99 /*
100 * Clear the text, but do not reduce the internal capacity
101 * (for efficiency if it will be filled up again anyways).
102 */
103 void txtbuf_clear(txtbuf *buf);
104
105 #endif /* LTK_TXTBUF */