/* Copyright (c) 1993 Stephen F. White */ #ifndef _STRING_H_ #define _STRING_H_ typedef struct String { int len; /* length of string */ int mem; /* memory allocated */ int ref; /* reference count */ char *str; /* string itself */ } String; #ifdef INLINE #define string_free(S) if (!--S->ref) { FREE(S); } #define string_dup(S) (S->ref++, S) #else /* !INLINE */ void string_free(String *s); String *string_dup(String *s); #endif /* !INLINE */ extern String *string_new(int len); extern String *string_cpy(const char *s); extern String *string_ncpy(const char *s, int len); extern String *string_cat(String *str, const char *s); extern String *string_catc(String *str, char c); extern String *string_catnum(String *str, int n); extern String *string_indent_cat(String *str, int indent, const char *s); extern String *string_backslash(String *str, const char *s); extern String *string_pad(String *str, int padlen, char tok); extern String *string_prepad(String *str, int padlen, char tok); extern String *string_strip_cr(String *str); #endif _STRING_H_