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