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