xref: /plan9/sys/include/String.h (revision e6d9d90263fa8f718873e72f98194c009fe01011)
180ee5cbfSDavid du Colombier #pragma	src	"/sys/src/libString"
280ee5cbfSDavid du Colombier #pragma	lib	"libString.a"
380ee5cbfSDavid du Colombier 
480ee5cbfSDavid du Colombier /* extensible Strings */
580ee5cbfSDavid du Colombier typedef struct String {
680ee5cbfSDavid du Colombier 	Lock;
780ee5cbfSDavid du Colombier 	char	*base;	/* base of String */
880ee5cbfSDavid du Colombier 	char	*end;	/* end of allocated space+1 */
980ee5cbfSDavid du Colombier 	char	*ptr;	/* ptr into String */
1080ee5cbfSDavid du Colombier 	short	ref;
1180ee5cbfSDavid du Colombier 	uchar	fixed;
1280ee5cbfSDavid du Colombier } String;
1380ee5cbfSDavid du Colombier 
1480ee5cbfSDavid du Colombier #define s_clone(s) s_copy((s)->base)
1580ee5cbfSDavid du Colombier #define s_to_c(s) ((s)->base)
1680ee5cbfSDavid du Colombier #define s_len(s) ((s)->ptr-(s)->base)
1780ee5cbfSDavid du Colombier 
1880ee5cbfSDavid du Colombier extern String*	s_append(String*, char*);
1980ee5cbfSDavid du Colombier extern String*	s_array(char*, int);
2080ee5cbfSDavid du Colombier extern String*	s_copy(char*);
2180ee5cbfSDavid du Colombier extern void	s_free(String*);
2280ee5cbfSDavid du Colombier extern String*	s_incref(String*);
2380ee5cbfSDavid du Colombier extern String*	s_memappend(String*, char*, int);
2480ee5cbfSDavid du Colombier extern String*	s_nappend(String*, char*, int);
2580ee5cbfSDavid du Colombier extern String*	s_new(void);
2680ee5cbfSDavid du Colombier extern String*	s_newalloc(int);
2780ee5cbfSDavid du Colombier extern String*	s_parse(String*, String*);
2880ee5cbfSDavid du Colombier extern String*	s_reset(String*);
2980ee5cbfSDavid du Colombier extern String*	s_restart(String*);
3080ee5cbfSDavid du Colombier extern void	s_terminate(String*);
3180ee5cbfSDavid du Colombier extern void	s_tolower(String*);
3280ee5cbfSDavid du Colombier extern void	s_putc(String*, int);
3380ee5cbfSDavid du Colombier extern String*	s_unique(String*);
3480ee5cbfSDavid du Colombier extern String*	s_grow(String*, int);
3580ee5cbfSDavid du Colombier 
3680ee5cbfSDavid du Colombier #ifdef BGETC
3780ee5cbfSDavid du Colombier extern int	s_read(Biobuf*, String*, int);
3880ee5cbfSDavid du Colombier extern char	*s_read_line(Biobuf*, String*);
3980ee5cbfSDavid du Colombier extern char	*s_getline(Biobuf*, String*);
40dc5a79c1SDavid du Colombier typedef struct Sinstack Sinstack;
4112fd1c83SDavid du Colombier #pragma incomplete Sinstack
42dc5a79c1SDavid du Colombier extern char	*s_rdinstack(Sinstack*, String*);
43dc5a79c1SDavid du Colombier extern Sinstack	*s_allocinstack(char*);
44dc5a79c1SDavid du Colombier extern void	s_freeinstack(Sinstack*);
45*e6d9d902SDavid du Colombier #endif /* BGETC */
46