Blob


1 #ifndef _LIBSTRING_H_
2 #define _LIBSTRING_H_ 1
3 #if defined(__cplusplus)
4 extern "C" {
5 #endif
7 /*
8 #pragma src "/sys/src/libString"
9 #pragma lib "libString.a"
10 */
11 AUTOLIB(String)
13 /* extensible Strings */
14 typedef struct String {
15 Lock lk;
16 char *base; /* base of String */
17 char *end; /* end of allocated space+1 */
18 char *ptr; /* ptr into String */
19 short ref;
20 uchar fixed;
21 } String;
23 #define s_clone(s) s_copy((s)->base)
24 #define s_to_c(s) ((s)->base)
25 #define s_len(s) ((s)->ptr-(s)->base)
27 extern String* s_append(String*, char*);
28 extern String* s_array(char*, int);
29 extern String* s_copy(char*);
30 extern void s_free(String*);
31 extern String* s_incref(String*);
32 extern String* s_memappend(String*, char*, int);
33 extern String* s_nappend(String*, char*, int);
34 extern String* s_new(void);
35 extern String* s_newalloc(int);
36 extern String* s_parse(String*, String*);
37 extern String* s_reset(String*);
38 extern String* s_restart(String*);
39 extern void s_terminate(String*);
40 extern void s_tolower(String*);
41 extern void s_putc(String*, int);
42 extern String* s_unique(String*);
43 extern String* s_grow(String*, int);
45 #ifdef BGETC
46 extern int s_read(Biobuf*, String*, int);
47 extern char *s_read_line(Biobuf*, String*);
48 extern char *s_getline(Biobuf*, String*);
49 typedef struct Sinstack Sinstack;
50 extern char *s_rdinstack(Sinstack*, String*);
51 extern Sinstack *s_allocinstack(char*);
52 extern void s_freeinstack(Sinstack*);
53 #endif /* BGETC */
54 #if defined(__cplusplus)
55 }
56 #endif
57 #endif